กระทู้เก่าบอร์ด อ.Yeadram
12,294 11
URL.หัวข้อ /
URL
นำข้อมูลที่หน้าฟอร์ม ไปเก็บลงตาราง
คือผมต้องการนำข้อมูลที่อยู่หน้าฟอร์ม ไปเก็บไวที่ตาราง ซึ่งผมสร้างตารางไว้ 3 ตาราง โดยที่ต้องคลิกปุ่ม command Button เพียงครั้งเดียว ต้องเขียนคำสั่งอย่างไรครับ
ตัวอย่าง ชื่อตารางมี
Tables1
Tables2
Tables3
ข้อมูลที่อยู่หน้าฟอร์ม มี 3 แถว
แถวที่1 ให้ Text Box = sec223, sec224 ให้ไปอยู่ในตาราง Tables1
แถวที่2 ให้ Text Box = sec333, sec334 ให้ไปอยู่ในตาราง Tables2
แถวที่3 ให้ Text Box = sec443, sec444 ให้ไปอยู่ในตาราง Tables3
แต่คำสั่งที่ผมใช้ก็บันทึกได้แค่ที่ละ ตาราง
ตัวอย่างคำสั่งครับ
Dim myDB As Database
Dim mySet As DAO.Recordset
Set myDB = DBEngine.Workspaces(0).Databases(0)
Set mySet = myDB.OpenRecordset("Tables1", dbOpenDynaset)
mySet.AddNew
mySet![dDiecast 135] = sec223
mySet![dDiecast 250] = sec224
mySet.Update
mySet.Close
myDB.Close
End Sub
ขอบคุณครับ
ตัวอย่าง ชื่อตารางมี
Tables1
Tables2
Tables3
ข้อมูลที่อยู่หน้าฟอร์ม มี 3 แถว
แถวที่1 ให้ Text Box = sec223, sec224 ให้ไปอยู่ในตาราง Tables1
แถวที่2 ให้ Text Box = sec333, sec334 ให้ไปอยู่ในตาราง Tables2
แถวที่3 ให้ Text Box = sec443, sec444 ให้ไปอยู่ในตาราง Tables3
แต่คำสั่งที่ผมใช้ก็บันทึกได้แค่ที่ละ ตาราง
ตัวอย่างคำสั่งครับ
Dim myDB As Database
Dim mySet As DAO.Recordset
Set myDB = DBEngine.Workspaces(0).Databases(0)
Set mySet = myDB.OpenRecordset("Tables1", dbOpenDynaset)
mySet.AddNew
mySet![dDiecast 135] = sec223
mySet![dDiecast 250] = sec224
mySet.Update
mySet.Close
myDB.Close
End Sub
ขอบคุณครับ
11 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R01602
ช่วยอธิบาย คำสั่งที่ละบรรทัดได้ไหมค่ะ มือใหม่ไม่เข้าใจค่ะ
3 @R01607
คำสั่งของอันไหนครับ
ในโจกท์ หรือในความเห็นของผม
ในโจกท์ หรือในความเห็นของผม
4 @R01637
ความเห็นของอาจารย์ Yeadram ค่ะ
ขอบคุณค่ะที่เสียสละเวาลาตอบคำถาม
ขอบคุณค่ะที่เสียสละเวาลาตอบคำถาม
5 @R01645
ลักษณะงานที่ โปรแกรมย่อย (Procedure) นี้ทำ คือการสั่งบันทึกข้อมูลครับ
โดยให้ VBA (ภาษาการเขียนโปรแกรมขั้นสูงชนิดหนึ่ง ที่ประยุกต์มาจาก Visual Basic) ทำงานร่วมกับ SQL (ภาษาการเขียนโปรแกรมขั้นสูง ชนิดหนึ่ง ที่มีรูปแบบคำสั่ง เพื่อจัดการกับข้อมูล ในฐานข้อมูล)
Private Sub Command_Click() เป็นชื่อโปรแกรมย่อย สังเกตแล้วจะเห็นว่าเป็นโปรแกรมย่อย ที่ผูกกับเหตุการณ์ ตอนที่ ปุ่มคำสั่งที่ชื่อ Command ถูกคลิ๊ก หรือเราจะเรียกโปรแกรมย่อยนี้ รวมๆ ว่า Event Procedure (โปรแกรมย่อยตามเหตุการณ์)
และมันจะต้องมีบรรทัดคำสั่ง เพื่อบ่งบอก VBA ว่า โปรแกรมย่อยนี้สิ้นสุด ตรงไหนด้วย นั่นคือ บรรทัดสุดท้าย End Sub เสมอ
ภายในโปรแกรมย่อยนี้ มี 7 บรรทัด
บรรทัดคู่ 2-3 จะเหมือนๆ กับ บรรทัด 4-5 และ 6-7 ดังนั้นผมจะตัดการอธิบายของบรรทัด ตั้งแต่ 4 ไปจน 7 ไม่นำมากล่าว
บรรทัดที่ 3 :
docmd.runsql "Insert into table1(ชื่อฟิลด์, ชื่อฟิลด์) values(" & sec223 & ", " & sec224 & ")"
(1) docmd.Runsql อันนี้เป็นคำสั่งของภาษา VBA เพื่อจะสั่งให้รัน ชุดคำสั่ง SQL
(2) "Insert into table1(ชื่อฟิลด์, ชื่อฟิลด์) values(" & sec223 & ", " & sec224 & ")" อันนี้เป็นชุดคำสั่งภาษา SQL เพื่อให้นำข้อมูลจากคอนโทรลบนฟอร์ม ที่ชื่อ sec223(ชื่อคอนโทรล) กับข้อมูลบนฟอร์มที่อยู่ในช่อง sec224 เข้าไปบันทึกในตาราง ชื่อ Table1 ** ถ้าสงสัยส่วนนี้อีก ต้องศึกษาการเขียนคำสั่ง SQL เพิ่มเติมครับ
(3) คำสั่งในบรรทัดที่ 1 : docmd.setwarnings false
เป็นคำสั่งของ VBA สั่งไว้เพื่อเป็นงานช่วย คำสั่งใน (1) เพราะทุกครั้งที่มีการใช้คำสั่งใน (1) มันมักจะมีข้อความเตือนหรือข้อความที่ขอความมั่นใจประมาณว่า "คุณแน่ใจหรือไม่ที่จะทำสิ่งนี้" ขึ้นมาเตือนเสมอ แล้วเราก็ต้องคอยตอบ "OK" ทุกครั้งไป ดังนั้นคำสั่งบรรทัดที่ 1 นี้ จึงเป็นคำสั่งไปบอกมันว่า "ไม่ต้องเตือนหรอก ทำงานไปเหอะ"
(4) บรรทัดที่ 2, 4, 6
DoCmd.GoToRecord acDataForm, Me.Name..................
เป็นคำสั่ง VBA ใช้เลื่อนเคอร์เซอร์บนฟอร์ม ไห้ไปที่เรคคอร์ดที่เราต้องการ สมมติเช่น เมื่อเราเปิดฟอร์ม เคอร์เซอร์ ตัว ไอ-บีม (I-beam) มันจะกระพริบที่ บรรทัดแรก (ฟอร์มแบบคอนทินิวอัส) ถ้าเคอร์เซอร์มันอยู่ตรงบรรทัดนี้ เรคคอร์ดนี้ เมื่อเรามีการอ้างถึงข้อมูลในคอนโทรล มันจะเอาข้อมูลจากบรรทัดนี้เท่านั้น คือมันจะสนใจเฉพาะข้อมูลในบรรทัดที่เคอร์เซอร์อยู่
ดังนั้นเมื่อเราต้องการอ้างถึงข้อมูลในบรรทัดไหนๆ เราจึงต้องสั่งให้เคอร์เซอร์เลื่อนไปอยู่ที่บรรทัดนั้นๆ ก่อน ค่อยทำการอ้างอิง
งง ไหมครับ
ไม่น่างงนะ เอาแบบภาษาชาวบ้านๆ ที่สุดแล้วนะเนี่ย อิอิ
โดยให้ VBA (ภาษาการเขียนโปรแกรมขั้นสูงชนิดหนึ่ง ที่ประยุกต์มาจาก Visual Basic) ทำงานร่วมกับ SQL (ภาษาการเขียนโปรแกรมขั้นสูง ชนิดหนึ่ง ที่มีรูปแบบคำสั่ง เพื่อจัดการกับข้อมูล ในฐานข้อมูล)
Private Sub Command_Click() เป็นชื่อโปรแกรมย่อย สังเกตแล้วจะเห็นว่าเป็นโปรแกรมย่อย ที่ผูกกับเหตุการณ์ ตอนที่ ปุ่มคำสั่งที่ชื่อ Command ถูกคลิ๊ก หรือเราจะเรียกโปรแกรมย่อยนี้ รวมๆ ว่า Event Procedure (โปรแกรมย่อยตามเหตุการณ์)
และมันจะต้องมีบรรทัดคำสั่ง เพื่อบ่งบอก VBA ว่า โปรแกรมย่อยนี้สิ้นสุด ตรงไหนด้วย นั่นคือ บรรทัดสุดท้าย End Sub เสมอ
ภายในโปรแกรมย่อยนี้ มี 7 บรรทัด
บรรทัดคู่ 2-3 จะเหมือนๆ กับ บรรทัด 4-5 และ 6-7 ดังนั้นผมจะตัดการอธิบายของบรรทัด ตั้งแต่ 4 ไปจน 7 ไม่นำมากล่าว
บรรทัดที่ 3 :
docmd.runsql "Insert into table1(ชื่อฟิลด์, ชื่อฟิลด์) values(" & sec223 & ", " & sec224 & ")"
(1) docmd.Runsql อันนี้เป็นคำสั่งของภาษา VBA เพื่อจะสั่งให้รัน ชุดคำสั่ง SQL
(2) "Insert into table1(ชื่อฟิลด์, ชื่อฟิลด์) values(" & sec223 & ", " & sec224 & ")" อันนี้เป็นชุดคำสั่งภาษา SQL เพื่อให้นำข้อมูลจากคอนโทรลบนฟอร์ม ที่ชื่อ sec223(ชื่อคอนโทรล) กับข้อมูลบนฟอร์มที่อยู่ในช่อง sec224 เข้าไปบันทึกในตาราง ชื่อ Table1 ** ถ้าสงสัยส่วนนี้อีก ต้องศึกษาการเขียนคำสั่ง SQL เพิ่มเติมครับ
(3) คำสั่งในบรรทัดที่ 1 : docmd.setwarnings false
เป็นคำสั่งของ VBA สั่งไว้เพื่อเป็นงานช่วย คำสั่งใน (1) เพราะทุกครั้งที่มีการใช้คำสั่งใน (1) มันมักจะมีข้อความเตือนหรือข้อความที่ขอความมั่นใจประมาณว่า "คุณแน่ใจหรือไม่ที่จะทำสิ่งนี้" ขึ้นมาเตือนเสมอ แล้วเราก็ต้องคอยตอบ "OK" ทุกครั้งไป ดังนั้นคำสั่งบรรทัดที่ 1 นี้ จึงเป็นคำสั่งไปบอกมันว่า "ไม่ต้องเตือนหรอก ทำงานไปเหอะ"
(4) บรรทัดที่ 2, 4, 6
DoCmd.GoToRecord acDataForm, Me.Name..................
เป็นคำสั่ง VBA ใช้เลื่อนเคอร์เซอร์บนฟอร์ม ไห้ไปที่เรคคอร์ดที่เราต้องการ สมมติเช่น เมื่อเราเปิดฟอร์ม เคอร์เซอร์ ตัว ไอ-บีม (I-beam) มันจะกระพริบที่ บรรทัดแรก (ฟอร์มแบบคอนทินิวอัส) ถ้าเคอร์เซอร์มันอยู่ตรงบรรทัดนี้ เรคคอร์ดนี้ เมื่อเรามีการอ้างถึงข้อมูลในคอนโทรล มันจะเอาข้อมูลจากบรรทัดนี้เท่านั้น คือมันจะสนใจเฉพาะข้อมูลในบรรทัดที่เคอร์เซอร์อยู่
ดังนั้นเมื่อเราต้องการอ้างถึงข้อมูลในบรรทัดไหนๆ เราจึงต้องสั่งให้เคอร์เซอร์เลื่อนไปอยู่ที่บรรทัดนั้นๆ ก่อน ค่อยทำการอ้างอิง
งง ไหมครับ
ไม่น่างงนะ เอาแบบภาษาชาวบ้านๆ ที่สุดแล้วนะเนี่ย อิอิ
6 @R01670
ขอบคุณ คุณ yeadram และเพื่อน ๆ ทุกท่านที่ช่วยให้คำแนะนำครับ ผมทำได้แล้วครับ คือผมใช้ทำใน แบบสอบถามแบบใช้ผนวกข้อมูล ทำครับ เพื่อทำการดึงข้อมูลจาก แบบสอบถาม ให้ดึงข้อมูล ลงไปไว้ในตาราง เพื่อเก็บขอ้มูลที่ผ่านการคำนวน แล้วนำไปใช้ต่อครับ
ขอบคุณทุกท่านครับ
paitoon
ขอบคุณทุกท่านครับ
paitoon
7 @R04903
คุณ yeadram ครับ
ถามเกี่ยวกับการเขียน code ในการ insert ข้อมูลลงตารางครับ แล้วลงใน query ได้ไหมครับ โดยใน form มี combo box ด้วยครับ ตอนนี้งงมากครับ มือใหม่ครับ
ถามเกี่ยวกับการเขียน code ในการ insert ข้อมูลลงตารางครับ แล้วลงใน query ได้ไหมครับ โดยใน form มี combo box ด้วยครับ ตอนนี้งงมากครับ มือใหม่ครับ
8 @R04910
ตอนนี้งงมากเหมือนกันครับ อิอิ
insert คือการสั่งให้นำข้อมูลไปเก็บ โดยปกติแล้ว การจัดการข้อมูลเราเก็บข้อมูลในตารางอยู่แล้ว ครับ ไม่มีการเก็บในคิวรี่
ดังนั้น ไม่ต้องไป insert เข้าคิวรี่ครับ
- คิวรี่บางชนิดเพิ่ม หรือแก้ไขข้อมูลไม่ได้ อันนี้ Insert ไม่ได้แน่นอน
- คิวรี่บางชนิดเพิ่ม หรือแก้ไขข้อมูลได้ แต่เราก็ควรมองหาแหล่งข้อมูลของคิวรี่ แล้วนำข้อมูลไปเข้าตรง ที่แหล่งนั้นดีกว่าครับ ไม่ควรเข้าผ่านคิวรี่
.............. โดยในฟอร์ม มี Combo box อยู่ด้วย .......... ?!?!
เอ๋ ผมตอบตรงประเด็นหรือเปล่าเนี่ย ตอนนี้ผมก็งงมากเหมือนกันครับ
insert คือการสั่งให้นำข้อมูลไปเก็บ โดยปกติแล้ว การจัดการข้อมูลเราเก็บข้อมูลในตารางอยู่แล้ว ครับ ไม่มีการเก็บในคิวรี่
ดังนั้น ไม่ต้องไป insert เข้าคิวรี่ครับ
- คิวรี่บางชนิดเพิ่ม หรือแก้ไขข้อมูลไม่ได้ อันนี้ Insert ไม่ได้แน่นอน
- คิวรี่บางชนิดเพิ่ม หรือแก้ไขข้อมูลได้ แต่เราก็ควรมองหาแหล่งข้อมูลของคิวรี่ แล้วนำข้อมูลไปเข้าตรง ที่แหล่งนั้นดีกว่าครับ ไม่ควรเข้าผ่านคิวรี่
.............. โดยในฟอร์ม มี Combo box อยู่ด้วย .......... ?!?!
เอ๋ ผมตอบตรงประเด็นหรือเปล่าเนี่ย ตอนนี้ผมก็งงมากเหมือนกันครับ
9 @R05011
ขอบคุณมากครับ สำหรับคำตอบ ผมเพิ่งหัดทำครับ ช่วยแนะนำทีครับ ผมต้องการนำข้อมูลจาก form เก็บลงใน table ครับ
ขอบคุณมากครับ สำหรับคำตอบ ผมเพิ่งหัดทำครับ ช่วยแนะนำทีครับ ผมต้องการนำข้อมูลจาก form เก็บลงใน table ครับ
10 @R05349
อยาก insert จากฟอร์ม 2 ฟอร์ม มาเก็บไว้ในตารางเดียวกันอ่ะค่า ทำได้ไหมค่า
11 @R05424
-ไม่เข้าใจคำถาม คุณ pinkgirl ครับ
- คุณเล็กครับ ตอนสร้างฟอร์ม ได้ใช้ วิซาร์ด พาสร้างหรือเปล่าครับ
- คุณเล็กครับ ตอนสร้างฟอร์ม ได้ใช้ วิซาร์ด พาสร้างหรือเปล่าครับ
Time: 0.3574s
Private Sub Commman_click()
docmd.setwarnings false
DoCmd.GoToRecord acDataForm, Me.Name, acFirst
docmd.runsql "Insert into table1(ชื่อฟิลด์, ชื่อฟิลด์) values(" & sec223 & ", " & sec224 & ")"
DoCmd.GoToRecord acDataForm, Me.Name, acNext, 1
docmd.runsql "Insert into table2(ชื่อฟิลด์, ชื่อฟิลด์) values(" & sec333 & ", " & sec334 & ")"
DoCmd.GoToRecord acDataForm, Me.Name, acNext, 1
docmd.runsql "Insert into table3(ชื่อฟิลด์, ชื่อฟิลด์) values(" & sec443 & ", " & sec444 & ")"
End sub