DAO การ insert ข้อมูล โดยการ Select จากอีก Record



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

11 ก.พ. 64 , 16:49:25
อ่าน 388 ครั้ง

Kxess


มีเรื่องรบกวนครับ
อยากให้ช่วยแนะนำการเขียน vba โดยใช้ DAO ครับ
การทำงานคือ ผมจะทำการก๊อปปี้ข้อมูลใน OrderDetail ไปยัง BillDetail

เดิมที่ผมใช้คำสั่ง CurrentDb.Execute "INSERT INTO BillDetail(B2,B3,B4) SELECT (O2,O3,O4) FROM OrderDetail WHERE Order_ID=" & CurrentID
ใช้งานได้ปกติไม่มีปัญหาอะไรครับ

แต่ตอนนี้ผมต้องการเพิ่มข้อมูลเลข Serial ลงใน BillDetail ซึ่งแตกต่างกันในแต่ละระเบียน

ผมเลยต้องใช้ DAO ผมขอเขียนคร่าว ๆ แบบไม่ถูก syntax


rsBill(B1) = "เลขที่ที่กำหนดขึ้นใหม่"
rsBill(B2) = rsOrder(O2)
rsBill(B3) = rsOrder(O3)
rsBill(B4) = rsOrder(O4)
rsBill(B5) = "เลขซีเรี่ยลที่กำหนดขึ้น"
Next ..

ผมจะเขียนเป็นโปรแกรมได้ยังไงครับ
ขอบคุณครับ

สวัสดีวันปีใหม่จีน
ขอให้มีความสุข เฮ็ง ๆ รวย ๆ สุขภาพแข็งแรงกันถ้วนหน้า


 

15 ก.พ. 64 , 17:36:00
ตอบกลับ #1

Kxess

: DAO การ insert ข้อมูล โดยการ Select จากอีก Record
« ตอบกลับ #1 เมื่อ: 15 ก.พ. 64 , 17:36:00 »
ทำได้แล้วครับ : D
« แก้ไขครั้งสุดท้าย: 16 ก.พ. 64 , 14:10:56 โดย Kxess »

 

16 ก.พ. 64 , 14:43:11
ตอบกลับ #2

OddyWriter

: DAO การ insert ข้อมูล โดยการ Select จากอีก Record
« ตอบกลับ #2 เมื่อ: 16 ก.พ. 64 , 14:43:11 »
อ้าว ลบข้อมูลออกทำไมอะครับ เผื่อจะมีประโยชน์กับคนอื่นในอนาคต
วิกฤติโควิดทำให้ร้อนเงิน
ใครอยากจ้างทำฐานข้อมูล สอนวางระบบฐานข้อมูล Excel/ Access/ VBA Excel/ VBA Access/ SQL Server/ Database Design
แม้กระทั่งดูดวง ก็ติดต่อได้นะครับ
 
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown, Un

17 ก.พ. 64 , 10:10:18
ตอบกลับ #3

Kxess

: DAO การ insert ข้อมูล โดยการ Select จากอีก Record
« ตอบกลับ #3 เมื่อ: 17 ก.พ. 64 , 10:10:18 »
อ้าว ลบข้อมูลออกทำไมอะครับ เผื่อจะมีประโยชน์กับคนอื่นในอนาคต

ยังแสดงผลไม่ถูกต้องตามต้องการครับ อาจจะทำให้คนเข้าใจผิด
ถ้าแก้ไขแล้ว ผมจะเพิ่มให้แน่นอนครับ

 

17 ก.พ. 64 , 11:04:01
ตอบกลับ #4

PNR

: DAO การ insert ข้อมูล โดยการ Select จากอีก Record
« ตอบกลับ #4 เมื่อ: 17 ก.พ. 64 , 11:04:01 »
อ้าว ลบข้อมูลออกทำไมอะครับ เผื่อจะมีประโยชน์กับคนอื่นในอนาคต

ยังแสดงผลไม่ถูกต้องตามต้องการครับ อาจจะทำให้คนเข้าใจผิด
ถ้าแก้ไขแล้ว ผมจะเพิ่มให้แน่นอนครับ
อธิบายเพิ่มเติมให้หน่อยนะครับ
"เลขที่ที่กำหนดขึ้นใหม่" อันนี้ระบุในฟอร์มหรือเปล่าครับ

อ้างถึง
ตอนนี้ผมต้องการเพิ่มข้อมูลเลข Serial ลงใน BillDetail ซึ่งแตกต่างกันในแต่ละระเบียน
"เลขซีเรียล" มาจากไหนมีวิธีการระบุอย่างไร
เราสามารถเปิด Recordset ทั้ง 2 ขึ้นมา แล้วใช้ Loop มาทำกับทุกระเบียนได้ครับ แต่ต้องรู้วิธีได้มาของ เลขที่ที่กำหนดขึ้นใหม่ และ เลขซีเรี่ยลที่กำหนดขึ้น ก่อนว่าสร้างมาอย่างไร




« แก้ไขครั้งสุดท้าย: 17 ก.พ. 64 , 12:39:01 โดย PNR »
Time to stop for me  :dizzy:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Kxess

17 ก.พ. 64 , 12:57:41
ตอบกลับ #5

sjs

: DAO การ insert ข้อมูล โดยการ Select จากอีก Record
« ตอบกลับ #5 เมื่อ: 17 ก.พ. 64 , 12:57:41 »
DAO  ผมชอบใช้เพราะมี Index and seek ให้ใช้ ลองดู index , seek เพิ่มเติมด้วยครับ
ในเว็บมีหลายกระทู้ที่พูดถึง
ตัวอย่าง
https://www.thai-access.com/index.php?topic=629.0

 
โพสต์นี้ได้รับคำขอบคุณจาก: Kxess, PNR

17 ก.พ. 64 , 13:30:15
ตอบกลับ #6

Kxess

: DAO การ insert ข้อมูล โดยการ Select จากอีก Record
« ตอบกลับ #6 เมื่อ: 17 ก.พ. 64 , 13:30:15 »
ขอบคุณทุกท่านครับ

ตอนนี้ผมแก้จนได้ผลตามที่ต้องการแล้วครับ

บางทีก็อธิบายคำถามหรือสิ่งที่ต้องการยากครับ ฮ่าๆ

คือฟังก์ชั่นในการบันทึกเลข Serial ลงในรายการของบิลครับ โดยข้อมูลใน OrderDetail เมื่อเปิดบิลก็จะเพิ่มข้อมูลใน BillDetail จากนั้นจะมีการใส่เลข Serial ลงไปในรายการของบิลด้วยครับ

โค๊ด: [Select]

Private Sub InsertSerialtoBillDetail(CurrentOrderID As Long, NewBill_ID As String)

Set rsOrder_Details = CurrentDb.OpenRecordset("SELECT * FROM Order_Details WHERE Order_ID = " & CurrentOrderID, dbOpenSnapshot)
Set rsBill_Details = CurrentDb.OpenRecordset("Bill_Details", dbOpenDynaset, dbAppendOnly)
   
 
    Do While rsOrder_Details.EOF = False
        With rsBill_Details
                .AddNew
                For Each fld In rsOrder_Details.Fields
                        Select Case fld.Name
                                Case "Order_ID"
                                    rsBill_Details("Bill_ID").Value = NewBill_ID
               
                                Case "Product_ID"
                                    rsBill_Details("Product_ID").Value = fld.Value
                                    ProID = fld.Value
                                    getPSerial = Nz(DLookup("P_RunSerial", "Products", "Product_ID=" & ProID), "")

                                Case "OD_Quantity"
                                    rsBill_Details("BD_Quantity").Value = fld.Value
                                    PQuantity = fld.Value
           
                                Case "OD_Unit_Price"
                                    rsBill_Details("BD_Unit_Price").Value = fld.Value

                                'BD_Serials
                                Case Else
                                   
                                 'เรียกฟังก์ชั่นในการรันซีเรียล
                                 txtLastSerial = RunSerialTube(getPSerial, PQuantity)
                                 CurrentDb.Execute "UPDATE Products SET P_RunSerial ='" & txtLastSerial & "' WHERE [Product_ID]= " & ProID, dbSeeChanges

                        End Select
                        Next
                    .Update
            End With
            rsOrder_Details.MoveNext
    Loop

   rsOrder_Details.Close
   rsBill_Details.Close
  Set rsBill_Details = Nothing
  Set rsOrder_Details = Nothing



มีผิดแปลกตรงไหนแนะนำได้ครับ
ขอบคุณครับ

 


บอร์ดเรียนรู้ Access สำหรับคนไทย