กระทู้เก่าบอร์ด อ.Yeadram
2,454 18
URL.หัวข้อ /
URL
โยนค่า Subform ไป Subform ครับ
เรียนท่านผู้เชียวชาญ และอาจารย์ที่เคารพ
อากสอบถามเรื่องโยนค่าจาก SubForm ครับ
คือผมมีฟอร์ม Main_Table1 โดยมีฟอร์มย่อยคือ Sub_Table1
และMain_Table2 โดยมีฟอร์มย่อยคือ Sub_Table2
มีปุ่มCMD1 สำหรับโยนค่าไป โดยทั้ง2 ฟอร์มชื่อฟิวส์ไม่เหมือนกันนะครับ
เพราะคนละตาราง มีรูปให้ดูด้วยครับ ผมควรจะเขียนโปรแกรมแบบไหนครับ
แต่ผมดูเหมือนจะโยนค่าจากตารางได้เลย แต่ก็ขอวิธีเขียนหน่อยครับ
ขอบคุณครับ
อากสอบถามเรื่องโยนค่าจาก 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
2 @R20828
ขอบคุณครับ
จากที่อาจารย์แนะนำมาคงต้องเป็นแบบข้อ 1 ครับ
เพราะต้องการทุกเรคอร์ด ครับ
และพอจับโยนข้อมูลมาที่Form2แล้ว ผมจะลบข้อมูลที่ Form1 ทิ้งทั้งหมดครับ
แต่จะมีวิธีเขียนยังไงตามที่อาจารย์บอกครับ ผมครับขอตัวอย่างซักตัวอย่างครับ
ขอบคุณครับ
จากที่อาจารย์แนะนำมาคงต้องเป็นแบบข้อ 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
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 ครับ ต้องใส่ให้ถูกเพื่อให้ได้เรคอร์ดที่ต้องการ
CurrentDB.Execute "insert into Table2(B1, B2, ...) select A1, A2, ... from Table1 where ... ", dbFailOnError
ที่สำคัญคือเงื่อนไขหลัง Where clause ครับ ต้องใส่ให้ถูกเพื่อให้ได้เรคอร์ดที่ต้องการ
5 @R20833
ขอบคุณครับ ได้แล้วครับแจ่มเลยครับ
อาจารย์ครับที่ทำแบบนี้น่าจะเป็นการโยนค่าจาก Table ใช่หรือไม่ครับ
ไม่ใช่เป็นการโยนค่าข้ามพอร์มใช่หรือเปล่าครับ
เพราะมันเรียกค่าจากตารางเลย ไม่ได้เรียกบน Form
ขอบคุณครับ
อาจารย์ครับที่ทำแบบนี้น่าจะเป็นการโยนค่าจาก 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
ผมเขียนผิดตรงไหนช่วยแนะนำให้หน่อยครับ
ขอบคุณอย่างสูงครับ
แต่พอมาแก้ให้ตรงกับตารางจริงมันขึ้นแบบนี้ครับ
โดยเขียน 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 เขียนยังไงครับ ช่วยผมด้วยครับอาจารย์
ขอบคุณมากครับ
หากต้องการเอาข้อมูลหรือค่าจาก 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
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 ครับ
กระผมแจ้งไว้ก่อนเพราะมันได้เพิ่มเข้ามาจากการสอบถามอาจารย์รอบที่แล้วครับ
ขอขอบคุณอีกครั้งครับ
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 "#)
แต่ก็เหมือนเดิมครับ
ตอนนี้ขึ้น Type Mismatch ครับ
แต่เข้ามาดูกระทู้เก่าเห็นบอกให้ใ่ส (#" Me.A_DateCh "#)
แต่ก็เหมือนเดิมครับ
15 @R20913
กรณีที่เป็น Date/Time ต้องครอบด้วยเครื่องหมาย # แทน '
และถ้ามีฟิลด์ไหนที่เป็น Numeric เช่น Integer รวมทั้ง check box ด้วย ก็ไม่ต้องครอบด้วยเครื่องหมายอะไรทั้งนั้น
และถ้ามีฟิลด์ไหนที่เป็น 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
ถูกหรือเปล่าครับ เพราะผมลองแล้วมันไม่ขึ้นครับ ถ้าถูกต้องผมจะได้หาสาเหตุอื่นครับ
ขอบคุณครับ
สมมุด 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
CurrentDB.Execute "insert into Table2(B1, B2) select #" + Me.Text1 + "#," + Me.Text2 ,dbFailOnError
Time: 0.4966s
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 ครับ