กระทู้เก่าบอร์ด อ.Yeadram
969 9
URL.หัวข้อ /
URL
ต้องการ Assign รหัส sale ลงตารางข้อมูล
สวัสดีครับ ผมมีตารางข้อมูลลูกค้า มี field ตามตัวอย่าง เช่น
ID NAME sale
1 A
2 B
3 C
4 D
5 E
6 F
โดยช่อง sale ยังคงว่าง ครับ
แล้วผมมีตารางรายชื่อ sale ตามตัวอย่าง เช่น
sale
001
002
003
ผมต้องการให้ รายชื่อ sale ไปแทรกลงตารางข้อมูลลูกค้าเฉลี่ยเท่าๆกันครับ
ID NAME sale
1 A 001
2 B 002
3 C 003
4 D 001
5 E 002
6 F 003
รบกวนด้วยครับ
ขอบคุณครับ
ID NAME sale
1 A
2 B
3 C
4 D
5 E
6 F
โดยช่อง sale ยังคงว่าง ครับ
แล้วผมมีตารางรายชื่อ sale ตามตัวอย่าง เช่น
sale
001
002
003
ผมต้องการให้ รายชื่อ sale ไปแทรกลงตารางข้อมูลลูกค้าเฉลี่ยเท่าๆกันครับ
ID NAME sale
1 A 001
2 B 002
3 C 003
4 D 001
5 E 002
6 F 003
รบกวนด้วยครับ
ขอบคุณครับ
9 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R24341
ID เป็นตัวเลขเรียงลำดับจาก 1 และไม่มีข้ามตัวเลขเลยหรือไม่
2 @R24343
ใช่ครับผม
ID ไม่มีข้ามครับ
ID ไม่มีข้ามครับ
3 @R24344
ตอนแรกว่าจะเขียนคิวรี่เดียวโดยหา sale จาก ID ของลูกค้า แต่ดูแล้วอาจมีข้อจำกัด เลยเขียนโค้ดให้แทน เอาโค้ดใส่ใน Module ใหม่สักตัว แล้วกด Ctrl-G เพื่อเปิด Immediate Window จากนั้นก็ป้อนคำว่า FillSale เท่านั้น ในโค้ดสมมุติว่าเทเบิล Customer ชื่อว่า C และ Sale ชื่อว่า S
Public Sub FillSale()
Dim RC As DAO.Recordset ' เรคอร์ดเซ็ทในเทเบิล Customer
Dim RS As DAO.Recordset ' เรคอร์ดเซ็ทในเทเบิล Sale
Dim N As Long ' เรคอร์ดที่เท่าไหร่ในเทเบิล Customer เมื่อเรียงตาม ID
Dim T As Long ' จำนวนเรคอร์ดทั้งหมดในเทเบิล Sale
Dim P As Long ' เรคอร์ดที่เท่าไหร่ในเทเบิล Sale ที่จะต้องไปดึงมา
N = 1
T = DCount("*", "S")
Set RC = CurrentDb.OpenRecordset("select * from C order by ID")
With RC
Do Until .EOF
P = (((N - 1) Mod T) + 1)
Set RS = CurrentDb.OpenRecordset("select last(sale) as lastsale from (select top " + Str(P) + " S.sale from S order by sale)")
.Edit
!sale = RS("lastsale")
.Update
.MoveNext
N = N + 1
Loop
.Close
End With
End Sub
4 @R24345
สนใจสนับสนุนเพจได้ที่ ขายหนังสือเพื่อเว็ป
5 @R24348
ขอบคุณมากๆ ครับอาจารย์
6 @R24351
อาจารย์ครับ ผมรบกวนสอบถามเพิ่มเติม
ถ้าผมต้องการให้ รหัส sale สลับกลับไปมา
ID NAME sale
1 A 001
2 B 002
3 C 003
4 D 003
5 E 002
6 F 001
7 G 001
8 H 002
9 I 003
จะได้ไหมครับ
ขอบคุณมากครับ
ถ้าผมต้องการให้ รหัส sale สลับกลับไปมา
ID NAME sale
1 A 001
2 B 002
3 C 003
4 D 003
5 E 002
6 F 001
7 G 001
8 H 002
9 I 003
จะได้ไหมครับ
ขอบคุณมากครับ
7 @R24352
โพสเดิมผมทำอะไรนี่ ยุ่งยาก ซับซ้อน
ส่วนที่ถามมาล่าสุด แก้โค้ดเป็นตามนี้

Public Sub FillSale()
Dim RC As DAO.Recordset ' เรคอร์ดเซ็ทในเทเบิล Customer
Dim RS As DAO.Recordset ' เรคอร์ดเซ็ทในเทเบิล Sale
Dim Forward As Boolean ' True = อ่าน sale จากน้อยไปมาก, False = อ่านจากมากไปน้อย
Dim T As Long ' จำนวนเรคอร์ดทั้งหมดในเทเบิล Sale
Dim P As Long ' เรคอร์ดที่เท่าไหร่ในเทเบิล Sale ที่จะต้องไปดึงมา
P = 1
Down = True
T = DCount("*", "S")
Set RC = CurrentDb.OpenRecordset("select * from C order by ID")
With RC
Do Until .EOF
Set RS = CurrentDb.OpenRecordset("select last(sale) as lastsale from (select top " + Str(P) + " S.sale from S order by sale)")
.Edit
!sale = RS("lastsale")
.Update
.MoveNext
If Forward Then P = P + 1 Else P = P - 1
If P > T Then P = T: Forward = False
If P < 1 Then P = 1: Forward = True
Loop
.Close
End With
End Sub
8 @R24353
แก้ที่ผิด บรรทัดที่เขียนว่า Down = True แก้เป็น Forward = True
9 @R24357
ขอบคุณมากครับอาจารย์
Time: 0.3499s