โยนค่า Subform ไป Subform ครับ
กระทู้เก่าบอร์ด อ.Yeadram

 2,336   18
URL.หัวข้อ / URL
โยนค่า Subform ไป Subform ครับ

เรียนท่านผู้เชียวชาญ และอาจารย์ที่เคารพ

อากสอบถามเรื่องโยนค่าจาก SubForm ครับ
คือผมมีฟอร์ม Main_Table1 โดยมีฟอร์มย่อยคือ Sub_Table1
และMain_Table2 โดยมีฟอร์มย่อยคือ Sub_Table2
มีปุ่มCMD1 สำหรับโยนค่าไป โดยทั้ง2 ฟอร์มชื่อฟิวส์ไม่เหมือนกันนะครับ
เพราะคนละตาราง มีรูปให้ดูด้วยครับ ผมควรจะเขียนโปรแกรมแบบไหนครับ
แต่ผมดูเหมือนจะโยนค่าจากตารางได้เลย แต่ก็ขอวิธีเขียนหน่อยครับ
ขอบคุณครับ

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

1 @R20827
มี 3 แนวทาง หลังจากอ่านได้แล้ว เราก็เขียนลงเทเบิล Table2 ครับ แนวทางก็คือ

1. อ่าน Recordset จากเทเบิล Table1 ตามเงื่อนไขเดียวกันกับที่เลือกมาแสดงใน Sub_Table1 (เหมาะสำหรับต้องการทุกเรคอร์ดในซับฟอร์ม)

หรือ

2. อ่านจาก Recordset Clone ของฟอร์ม Sub_Table1 (ได้ทั้งทุกเรคอร์ดในซับฟอร์มและก็ไม่ยุ่งยากที่จะอ่านเฉพาะเรคอร์ดปัจจุบันที่กำลังแสดงบนฟอร์ม)

หรือ

3. อ่านตรงๆเท็กซ์บ็อกซ์บนฟอร์ม Sub_Table1 (ได้ค่าเฉพาะเรคอร์ดปัจจุบันเรคอร์ดเดียว)

ถ้าเลือกวิธีแรกอย่างที่บอกมาในคำถาม ก็สามารถใช้คำสั่ง SQL เป็น

insert into Table2(B1, B2, ...) select A1, A2, ... from Table1 where ...

ลองดูตัวอย่างได้จากกระทู้เก่าด้วยคำว่า Insert Into ครับ
2 @R20828
ขอบคุณครับ
จากที่อาจารย์แนะนำมาคงต้องเป็นแบบข้อ 1 ครับ
เพราะต้องการทุกเรคอร์ด ครับ
และพอจับโยนข้อมูลมาที่Form2แล้ว ผมจะลบข้อมูลที่ Form1 ทิ้งทั้งหมดครับ
แต่จะมีวิธีเขียนยังไงตามที่อาจารย์บอกครับ ผมครับขอตัวอย่างซักตัวอย่างครับ
ขอบคุณครับ

3 @R20830
ผมทดลองเขียนได้ดังนี้ครับ แต่มันมาแค่ Record แรก แต่อยากให้มันมาทั้งหมดในตารางทำไงครับ

Private Sub CMD1_Click()
Dim ABC As String
On Error GoTo Err_CMD1_Click
    Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "Main_Table2"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
Dim myDB As Database
Dim mySet As DAO.Recordset
Set myDB = DBEngine.Workspaces(0).Databases(0)
Set mySet = myDB.OpenRecordset("Table2", dbOpenDynaset)
    mySet.AddNew
    mySet![B1] = A1
    mySet![B2] = A2
    mySet![B3] = A3
    mySet![B4] = A4
    mySet.Update
    mySet.Close
    myDB.Close

Exit_CMD1_Click:
    Exit Sub

Err_CMD1_Click:
    MsgBox Err.Description
    Resume Exit_CMD1_Click

End Sub
4 @R20832
โค้ดที่คุณเขียนมามันเป็นแนวทางที่ 3 ก็อย่างที่บอกไว้ มันจะได้เฉพาะเรคอร์ดปัจจุบันเรคอร์ดเดียวเท่านั้น สำหรับวิธีแรก ใช้เพียงบรรทัดเดียวก็พอครับ

CurrentDB.Execute "insert into Table2(B1, B2, ...) select A1, A2, ... from Table1 where ... ", dbFailOnError

ที่สำคัญคือเงื่อนไขหลัง Where clause ครับ ต้องใส่ให้ถูกเพื่อให้ได้เรคอร์ดที่ต้องการ
5 @R20833
ขอบคุณครับ ได้แล้วครับแจ่มเลยครับ

อาจารย์ครับที่ทำแบบนี้น่าจะเป็นการโยนค่าจาก Table ใช่หรือไม่ครับ
ไม่ใช่เป็นการโยนค่าข้ามพอร์มใช่หรือเปล่าครับ
เพราะมันเรียกค่าจากตารางเลย ไม่ได้เรียกบน Form

ขอบคุณครับ
6 @R20835
ก็เป็นการก็อปปี้ข้อมูลจากเทเบิลไปเทเบิลที่เป็นแหล่งเก็บข้อมูลโดยตรง ไม่ได้ก็อปปี้ค่าจากเท็กซ์บ็อกซ์ไปเท็กซ์บ็อกซ์ครับ โค้ดที่ให้ไป จะเห็นว่าสั้นกระชับ อ่านทีเดียวเข้าใจเลย และประสิทธิภาพดีกว่าด้วย
7 @R20868
เข้าใจล่ะครับ
ขอบคุณครับอย่างที่อาจารย์บอกเลยครับ
8 @R20876
เรียนอาจารย์ครับ ตอนทดลองทำใช้งานได้ครับ
แต่พอมาแก้ให้ตรงกับตารางจริงมันขึ้นแบบนี้ครับ



โดยเขียน Code ดังนี้ครับ
CurrentDb.Execute "insert into Qr_PD4ICiERP(CustomerID, PartID, A_Total) select F2, F6, F9, from iERP1 ", dbFailOnError

ผมเขียนผิดตรงไหนช่วยแนะนำให้หน่อยครับ
ขอบคุณอย่างสูงครับ
9 @R20878
เห็นละครับ F9, คอมม่าเกินมา
ขอโทษครับ
ขอบคุณครับ
10 @R20908
ขอถามเพิ่มอีกนิดครับ
หากต้องการเอาข้อมูลหรือค่าจาก Text1, Text2 ไปด้วยกับ
A1, A2, ไปไว้ที่ B6 , B7 เขียนยังไงครับ ช่วยผมด้วยครับอาจารย์


ขอบคุณมากครับ



11 @R20909
เราต้องเอาค่าจาก Text1 และ Text2 ไปแปะลงเป็นส่วนหนึ่งของ SQL statement ก็จะได้ออกมาเป็น

CurrentDB.Execute "insert into Table2(B1, B2, ..., B6, B7) select A1, A2, ... , '" + Me.Text1 + "', '" + Me.Text2 + "' from Table1 where ... ", dbFailOnError
12 @R20910
ขอบพระคุณอย่างสูงครับ
ในที่สุดก็มาได้ครึ่งทางแล้วครับ ขอบคุณมากๆๆอีกครั้งครับ

ขอบคุณจากใจเลยครับ ขอบคุณทุกๆท่านครับ
13 @R20911
อาจารย์ช่วยเช็คให้อีกทีครับว่าผมติดตรงไหนครับ คือเอาไปทดลองทำ สามารถได้แต่พอใช้งานจริงติด Error

the expression you entered refers to an object that is closed or doesn't exist ครับ

Code ที่ผมเขียนมีแบบนี้ครับ


CurrentDb.Execute "insert into QR_PD4IC(Item, A_Total, A_NoCh, A_ToSection, A_DateCh, A_Time, A_Shift, A_Informent, D_Agencies, A_PD4, IC) select F6, F9 , '" + Me.A_NoCh + "', '" + Me.A_ToSection + "', '" + Me.A_DateCh + "', '" + Me.A_Time + "', '" + Me.A_Shift + "', '" + Me.A_Informent + "', '" + Me.D_Agencies + "', '" + Me.A_PD4 + "', '" + Me.IC + "' from iERP1 ", dbFailOnError

รบกวนเช็คให้ผมอีกทีครับ

อ่อคือผมได้เพิ่ม ChackBox ไปด้วยครับคือ IC
และมี TextBox ที่เป็นวันที่ และเวลา A_DateCh, A_Time ครับ
กระผมแจ้งไว้ก่อนเพราะมันได้เพิ่มเข้ามาจากการสอบถามอาจารย์รอบที่แล้วครับ

ขอขอบคุณอีกครั้งครับ
14 @R20912
อาจาร์ครับผมลองลบทีละตัวจบรู้ว่าติดที่ตัว Date ครับหรือที่ A_DateCh
ตอนนี้ขึ้น Type Mismatch ครับ

แต่เข้ามาดูกระทู้เก่าเห็นบอกให้ใ่ส (#" Me.A_DateCh "#)

แต่ก็เหมือนเดิมครับ
15 @R20913
กรณีที่เป็น Date/Time ต้องครอบด้วยเครื่องหมาย # แทน '    
และถ้ามีฟิลด์ไหนที่เป็น Numeric เช่น Integer รวมทั้ง check box ด้วย ก็ไม่ต้องครอบด้วยเครื่องหมายอะไรทั้งนั้น
16 @R20914
อาจาร์ครับประมาณนี้หรือเปล่าครับ
สมมุด Text1 =วันที่, Text2 = check box


Date/Time = CurrentDB.Execute "insert into Table2(B1, B2) select #" + Me.Text1 + "#," + Me.Text1 + ",dbFailOnError

ถูกหรือเปล่าครับ เพราะผมลองแล้วมันไม่ขึ้นครับ ถ้าถูกต้องผมจะได้หาสาเหตุอื่นครับ
ขอบคุณครับ
17 @R20915
CurrentDB.Execute "insert into Table2(B1, B2) select #" + Me.Text1 + "#," + Me.Text1 ,dbFailOnError
18 @R20916
แก้ใหม่

CurrentDB.Execute "insert into Table2(B1, B2) select #" + Me.Text1 + "#," + Me.Text2 ,dbFailOnError
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2449s