กระทู้เก่าบอร์ด อ.Yeadram
1,686 8
URL.หัวข้อ /
URL
รวมยอดซื้อของสมาชิกตามเงื่อนไข
ถ้าเราอยากรู้ยอดรวมของจำนวนเงินที่สมาชิกมาซื้อของเรา และจำนวนวันนับจากวันสุดท้ายที่เค้ามาซื้อของเรา จนถึงวันที่เราคิด เราจะเขียนโค๊ตยังงัยครับ
ตารางชื่อ income มี 4 ฟิลด์ คือ IDmem(รหัสสมาชิก) BuyDate(วันที่ซื้อ) Money(จำนวนเงิน) DifDay(ห่างจากครั้งล่าสุดกี่วัน)
BuyDate IDmem Money DifDay
1/7/2554 1 100
1/7/2554 2 90
1/7/2554 3 350
2/7/2554 2 150 1
2/7/2554 3 350 1
3/7/2554 1 150 2
7/7/2554 2 200 5
ตารางชื่อ income มี 4 ฟิลด์ คือ IDmem(รหัสสมาชิก) BuyDate(วันที่ซื้อ) Money(จำนวนเงิน) DifDay(ห่างจากครั้งล่าสุดกี่วัน)
BuyDate IDmem Money DifDay
1/7/2554 1 100
1/7/2554 2 90
1/7/2554 3 350
2/7/2554 2 150 1
2/7/2554 3 350 1
3/7/2554 1 150 2
7/7/2554 2 200 5
8 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R10580
อาจารย์ครับผมทำฟอร์มไว้โดยบันทึกข้อมูลแล้วหน้าฟอร์มจะคำนวน วันที่แตกต่างไว้เรียบร้อยแล้วครับ แต่ที่จะทำคือ
ณ วันที่จะคำนวนยอดรวมจะคลิกปุ่มคำสั่ง แล้วยอดรวม เข้าไปอยู่ใน record สุดท้าย และวันสุดท้ายจนถึงวันที่คำนวน ของแต่ละคนเลยครับ มันจึงใช้ Query ไม่ได้ มันต้อง วนลูปทีละคน ผมจึงทำไม่ได้ครับ
ณ วันที่จะคำนวนยอดรวมจะคลิกปุ่มคำสั่ง แล้วยอดรวม เข้าไปอยู่ใน record สุดท้าย และวันสุดท้ายจนถึงวันที่คำนวน ของแต่ละคนเลยครับ มันจึงใช้ Query ไม่ได้ มันต้อง วนลูปทีละคน ผมจึงทำไม่ได้ครับ
3 @R10586
เนื่องจากผมไม่เคยเรียน หรือมีตัวอย่างในแบบที่ต้องการครับ
ผมจะลองทำเองแต่ก็ไม่รู้เรื่อง VB แต่จะลองทำเองดู ขอคำสั่งต่างๆหน่อยครับเช่น
คำสั่งนำค่าที่ได้จาก Query ไปใช้
คำสั่งนำค่าจากQuery ไปใส่ไว้ใน Reccord สุดท้ายของทุกๆ คน
แล้วผมจำลองผิดลองถูกเองครับ
ผมจะลองทำเองแต่ก็ไม่รู้เรื่อง VB แต่จะลองทำเองดู ขอคำสั่งต่างๆหน่อยครับเช่น
คำสั่งนำค่าที่ได้จาก Query ไปใช้
คำสั่งนำค่าจากQuery ไปใส่ไว้ใน Reccord สุดท้ายของทุกๆ คน
แล้วผมจำลองผิดลองถูกเองครับ
4 @R10589
Do Until หมายถึงทำไปจะถึง....ใช้มั้ยครับ แล้วมันคู่กับอะไรครับ
EOF ,With ,Loop ,dbOpenSnapshot ,dbOpenDynaset อันนี้หมายถึงอะไรครับ ใช้ยังงัยครับ
รู้ประมาณนี้ น่าจะพอทำได้เพราะเข้าไปดูแต่ละอัน เจออยู่ประมาณนี้
EOF ,With ,Loop ,dbOpenSnapshot ,dbOpenDynaset อันนี้หมายถึงอะไรครับ ใช้ยังงัยครับ
รู้ประมาณนี้ น่าจะพอทำได้เพราะเข้าไปดูแต่ละอัน เจออยู่ประมาณนี้
5 @R10591
ลองผิดลองถูกไปมา มันออกมาแบบที่ต้องการได้ครับ ประมาณนี้
Set dbs = CurrentDb
Set rstQ = dbs.OpenRecordset("คิวรี่ที่หายอดรวม", dbOpenSnapshot)
Set rstT = dbs.OpenRecordset("ตารางที่ให้บันทึกค่า", dbOpenDynaset)
Do Until rstQ.EOF
rstT.addNew
rstT!รหัสสมาชิก= rstQ!รหัสสมาชิก
rstT!วันที่ซื้อ= date
rstT!ยอดซื้อรวม= rstQ!ยอดซื้อรวม
rstT!DPrate = rstQ!Lrate
rstT!จำนวนวันที่ซื้อครั้งที่แล้ว= rstQ!วันที่ซื้อครั้งที่แล้ว-Date
rstT.update
rstQ.MoveNext
Loop
MsgBox "เรียบร้อย"
DoCmd.Close
ตรงไหนควรแก้เป็นอย่างไร ผู้รู้ชี้แนะด้วยครับ
Set dbs = CurrentDb
Set rstQ = dbs.OpenRecordset("คิวรี่ที่หายอดรวม", dbOpenSnapshot)
Set rstT = dbs.OpenRecordset("ตารางที่ให้บันทึกค่า", dbOpenDynaset)
Do Until rstQ.EOF
rstT.addNew
rstT!รหัสสมาชิก= rstQ!รหัสสมาชิก
rstT!วันที่ซื้อ= date
rstT!ยอดซื้อรวม= rstQ!ยอดซื้อรวม
rstT!DPrate = rstQ!Lrate
rstT!จำนวนวันที่ซื้อครั้งที่แล้ว= rstQ!วันที่ซื้อครั้งที่แล้ว-Date
rstT.update
rstQ.MoveNext
Loop
MsgBox "เรียบร้อย"
DoCmd.Close
ตรงไหนควรแก้เป็นอย่างไร ผู้รู้ชี้แนะด้วยครับ
6 @R10592
แล้วถ้าเราจะใส่เงื่อนไข ว่า
ถ้าลูกค้าซื้อมากกว่า 3 ครั้ง ให้บันทึกลงไปในฟิลด์นึงว่า (A)ซึ่งผมจะหมายถึงลูกค้าประจำ
เราจะใส่ตรงไหน แล้วคำสั่งจะเป็นแบบไหนครับ
ถ้าลูกค้าซื้อมากกว่า 3 ครั้ง ให้บันทึกลงไปในฟิลด์นึงว่า (A)ซึ่งผมจะหมายถึงลูกค้าประจำ
เราจะใส่ตรงไหน แล้วคำสั่งจะเป็นแบบไหนครับ
7 @R10599
ขออภัยครับ ไม่ว่างเข้ามาดูเว็บหลายวัน (เกือบสัปดาห์เลย) ไม่ได้มาตอบเลยครับ
คำถามก่อนๆ ก็น่าตอบหลายข้อ
แต่เห็นว่ามีทางทำได้เลย ก็ขอข้ามไปเลยนะครับ
มาที่คำถามสุดท้ายเลยก็แล้วกัน "ถ้าลูกค้าซื้อมากกว่า 3 ครั้ง ....."
จะให้บันทึก A ลงไหนฟิลด์ไหน และเรคคอร์ดไหนครับ ต้องระบุด้วยครับ
ถ้าสมมติว่ามีฟิลด์เพิ่มมาในตาราง เก็บ text กว้าง 1 ชือฟิลด์ว่า cKindOf
- ให้นับจำนวนการซื้อของลูกค้าแต่ละรหัส
- ถ้าผลการนับ มากกว่าหรือเท่ากับ สาม ให้
- บันทึกข้อมูลว่า "A" ลงในฟิลด์ cKind ในเรคคอร์ดสุดท้าย ที่เป็นเรคคอร์ดของลูกค้ารหัสนั้นๆ
Set rstQ = noting
Set rstT = nothing
Set rstQ = dbs.OpenRecordset("select IDmen, Last(BuyDate) as Lbuy from income group by IDmen", dbOpenSnapshot)
dim Cnt as long
dim Sq as string
Do Until rstQ.EOF
cnt = dcount("BuyDate","income","[IDmen] = " & rstQ("IDmen"))
if cnt >=3 then
sq = "Update income set cKind='A' Where [IDmen] = " _
& rstQ("IDmen") & " AND BuyDate = " & rstQ("Lbuy")
docmd.runsql sq
end if
rstQ.MoveNext
Loop
MsgBox "เรียบร้อย"
DoCmd.Close
คำถามก่อนๆ ก็น่าตอบหลายข้อ
แต่เห็นว่ามีทางทำได้เลย ก็ขอข้ามไปเลยนะครับ
มาที่คำถามสุดท้ายเลยก็แล้วกัน "ถ้าลูกค้าซื้อมากกว่า 3 ครั้ง ....."
จะให้บันทึก A ลงไหนฟิลด์ไหน และเรคคอร์ดไหนครับ ต้องระบุด้วยครับ
ถ้าสมมติว่ามีฟิลด์เพิ่มมาในตาราง เก็บ text กว้าง 1 ชือฟิลด์ว่า cKindOf
- ให้นับจำนวนการซื้อของลูกค้าแต่ละรหัส
- ถ้าผลการนับ มากกว่าหรือเท่ากับ สาม ให้
- บันทึกข้อมูลว่า "A" ลงในฟิลด์ cKind ในเรคคอร์ดสุดท้าย ที่เป็นเรคคอร์ดของลูกค้ารหัสนั้นๆ
Set rstQ = noting
Set rstT = nothing
Set rstQ = dbs.OpenRecordset("select IDmen, Last(BuyDate) as Lbuy from income group by IDmen", dbOpenSnapshot)
dim Cnt as long
dim Sq as string
Do Until rstQ.EOF
cnt = dcount("BuyDate","income","[IDmen] = " & rstQ("IDmen"))
if cnt >=3 then
sq = "Update income set cKind='A' Where [IDmen] = " _
& rstQ("IDmen") & " AND BuyDate = " & rstQ("Lbuy")
docmd.runsql sq
end if
rstQ.MoveNext
Loop
MsgBox "เรียบร้อย"
DoCmd.Close
8 @R10626
ขอบคุณ อ.yeadram อีกครั้งครับชอบ ผมทำได้แบบฟรุคๆ ครับ ยังไม่เข้าใจเท่าไหร่ คือ ผมใช้แนว Query ที่ตัวเองถนัด แล้วก็ตามที่ อาจารย์แนะนำ เอา ความต้องการ 2 แบบมาทำ Query แล้วค่อยเขียน VB จนออกมาแบบที่ต้องการแล้วครับ
จอนนี้อยากให้อาจารย์ แนะนำคำถาม กระทู้ R10589 หน่อยครับ จะได้หัดทำไปเรื่อยๆ จากกระทู้ที่อาจารย์ตอบคนอื่นด้วยครับ
จอนนี้อยากให้อาจารย์ แนะนำคำถาม กระทู้ R10589 หน่อยครับ จะได้หัดทำไปเรื่อยๆ จากกระทู้ที่อาจารย์ตอบคนอื่นด้วยครับ
Time: 0.3535s
ตัวที่ 1(Q1) หาวันสุดท้าย และระยะเวลานับจากวันนี้
select IDmen, Last(BuyDate) as Ldate, Datediff("d", BuyDate, now()) as DifDay
from income
group by IDmen;
ตัวที่ 2(Q2) หายอดรวมการขาย สำหรับแต่ละสมาชิก
select IDmen, sum(Money) as sMoney
from income
group by IDmen;
แล้วเอาคิวรี่ทั้งสองมารวมกันเพื่อแสดงผลตามต้องการ
Select Ldate as BuyDate, Q1.IDmen, sMoney as Money, DifDay
From Q1 inner join Q2 on Q1.IDmen=Q2.IDmen;
ถ้าคล่องแล้ว อาจจะประยุกต์ทำเป็นคิวรี่ตัวเดียว แล้วใช้ Sub query ช่วยก็ได้ครับ