ต้องการ Assign รหัส sale ลงตารางข้อมูล
กระทู้เก่าบอร์ด อ.Yeadram

 782   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

รบกวนด้วยครับ
ขอบคุณครับ

9 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R24341
ID เป็นตัวเลขเรียงลำดับจาก 1 และไม่มีข้ามตัวเลขเลยหรือไม่
2 @R24343
ใช่ครับผม
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

จะได้ไหมครับ
ขอบคุณมากครับ
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
ขอบคุณมากครับอาจารย์
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.4999s