กระทู้เก่าบอร์ด อ.Yeadram
2,352 9
URL.หัวข้อ /
URL
ส่งข้อมมูลจากฟอร์มไปยังตาราง
ผมจะส่งข้อมมูลจากฟอร์ม(form1)ไปยังตาราง(table1)เขียนCodeยังงัยครับ
ในฟอร์มมีกล่องข้อความ2กล่องชื่อ tbx1 กับ tbx2
ในตารางมี3ฟิลด์ชื่อ autonum กับ fx1 และ fx2 จะเอาข้อมูลที่บันทึกในกล่องข้อความ
tbx1 ไป fx1 และ tbx2 ไป fx2 โดย autonum ให้+1 ไปเรื่อยๆ
ถ้าคำถามไม่เข้าใจ จะอธิบายเพิ่มครับ
ในฟอร์มมีกล่องข้อความ2กล่องชื่อ tbx1 กับ tbx2
ในตารางมี3ฟิลด์ชื่อ autonum กับ fx1 และ fx2 จะเอาข้อมูลที่บันทึกในกล่องข้อความ
tbx1 ไป fx1 และ tbx2 ไป fx2 โดย autonum ให้+1 ไปเรื่อยๆ
ถ้าคำถามไม่เข้าใจ จะอธิบายเพิ่มครับ
9 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R15373
ใช้ access อย่างเดียว หรือ ใช้ vb เขียนครับ
2 @R15374
ผมไม่แน่ใจว่ามันเรียกว่าอะไรครับ แต่มันอยู่ใน Access
เคยได้ยินมาว่าใน Access มีทั้ง VB และ Access Besic
เคยได้ยินมาว่าใน Access มีทั้ง VB และ Access Besic
3 @R15375
หมายถึงฟอร์ม Form1 เป็น Unbound เมื่อคีย์ข้อมูลใน tbx1 กับ tbx2 แล้วให้ข้อมูลไปเก็บในฟิลด์ fx1 และ fx2 อย่างนั้นหรือเปล่าครับ หรือ Form1 มีการดึงข้อมูลจากตารางหรือคิวรี่ด้วย
4 @R15376
Form1 เป็น Unbound ครับ แต่ที่สำคัญคือ ฟิลด์ autonum ครับ สมมุติ ว่าจะเอาค่า Max มาจาก ฟิลด์ at ใน table2 ผมเขียนเป็นโค๊ตไม่ถูก
5 @R15377
คุณคงต้องไล่ขั้นตอนแล้วหละครับ ยิ่งอ่านยิ่งงงครับ
6 @R15380
การเพิ่มเรคอร์ดเข้าไปในเทเบิลของ Access เอง หลักๆก็มีวิธีเหล่านี้
1. ทำผ่าน Data Access Object ไม่ว่าจะเป็น ADO หรือ DAO โดยการสร้าง SQL INSERT statement ตย.ของ ADO http://thai-access.com/yeadram_view.php?topic_id=1670
2. ทำผ่าน ADO หรือ DAO เหมือนข้อ 1. แต่ทำโดยเปิด Recordset Object แล้วเขียนค่าลงไปทีละฟิลด์ แล้วสั่งเขียนเรคอร์ด ตย.ของ DAO (ในคำตอบที่ 2) http://thai-access.com/yeadram_view.php?topic_id=3269
3. ทำผ่าน Access Object โดยการสร้าง SQL INSERT statement แล้วสั่งด้วย .Execute method ตย.ในคำตอบสุดท้าย http://thai-access.com/yeadram_view.php?topic_id=894
วิธีที่ 1 และ 2 ทำงานไม่ต่างกัน เพียงแต่ถนัดแบบไหน/เหมาะสมแบบไหนก็เลือกแบบนั้น
วิธีที่ 3 เท่าที่ทราบคือมันมีความสามารถเพิ่มเข้ามาตรงมันสามารถตีความหาค่าจาก Access Object ก่อนส่งไปทำได้ เช่น "insert into table (field1,...) values (forms![form1]![text1], ...)" ซึ่งถ้าทำด้วยวิธีที่ 1 DAO หรือ ADO จะไม่ทราบว่า forms![form1]![text1] คืออะไร ก็จะตีว่า error ออกมาแทน แต่โดยปกติที่ผมทำ ผมจะหาค่า forms![form1]![text1] ออกมาก่อน แล้วค่อยเอาค่านั้นสร้างเป็นส่วนหนึ่งของ SQL INSERT statement ไปเลย เช่น "insert into table (field1,...) values (" & forms![form1]![text1] & ", ...)" เรียกได้ว่าวิธีที่ 3 นี้ กระทำบนเลเยอร์ที่อยู่สูงกว่า Data Access Layer ครับ แต่ก็แลกมากับ performance ที่ช้ากว่าครับ
สำหรับการกำหนด Autonumber field ให้มีค่าตามที่เราต้องการ ก็ให้เขียนเรคอร์ดอะไรก็ได้ไป 1 เรคอร์ดก่อน โดยที่มีค่าของฟิลด์ Autonumber เท่ากับค่าที่อยากได้ลบด้วย 1 จากนั้นก็ลบเรคอร์ดที่เพิ่งเขียนนี้ออก ต่อไปฟิลด์ Autonumber ก็จะเริ่มเลขที่ตามที่เราต้องการแล้วครับ
หมายเหตุ : ตัว Access และโปรแกรมอื่นๆในชุด Microsoft Office มีแต่ภาษา VBA (Visual BASIC for Application) เท่านั้นครับ
1. ทำผ่าน Data Access Object ไม่ว่าจะเป็น ADO หรือ DAO โดยการสร้าง SQL INSERT statement ตย.ของ ADO http://thai-access.com/yeadram_view.php?topic_id=1670
2. ทำผ่าน ADO หรือ DAO เหมือนข้อ 1. แต่ทำโดยเปิด Recordset Object แล้วเขียนค่าลงไปทีละฟิลด์ แล้วสั่งเขียนเรคอร์ด ตย.ของ DAO (ในคำตอบที่ 2) http://thai-access.com/yeadram_view.php?topic_id=3269
3. ทำผ่าน Access Object โดยการสร้าง SQL INSERT statement แล้วสั่งด้วย .Execute method ตย.ในคำตอบสุดท้าย http://thai-access.com/yeadram_view.php?topic_id=894
วิธีที่ 1 และ 2 ทำงานไม่ต่างกัน เพียงแต่ถนัดแบบไหน/เหมาะสมแบบไหนก็เลือกแบบนั้น
วิธีที่ 3 เท่าที่ทราบคือมันมีความสามารถเพิ่มเข้ามาตรงมันสามารถตีความหาค่าจาก Access Object ก่อนส่งไปทำได้ เช่น "insert into table (field1,...) values (forms![form1]![text1], ...)" ซึ่งถ้าทำด้วยวิธีที่ 1 DAO หรือ ADO จะไม่ทราบว่า forms![form1]![text1] คืออะไร ก็จะตีว่า error ออกมาแทน แต่โดยปกติที่ผมทำ ผมจะหาค่า forms![form1]![text1] ออกมาก่อน แล้วค่อยเอาค่านั้นสร้างเป็นส่วนหนึ่งของ SQL INSERT statement ไปเลย เช่น "insert into table (field1,...) values (" & forms![form1]![text1] & ", ...)" เรียกได้ว่าวิธีที่ 3 นี้ กระทำบนเลเยอร์ที่อยู่สูงกว่า Data Access Layer ครับ แต่ก็แลกมากับ performance ที่ช้ากว่าครับ
สำหรับการกำหนด Autonumber field ให้มีค่าตามที่เราต้องการ ก็ให้เขียนเรคอร์ดอะไรก็ได้ไป 1 เรคอร์ดก่อน โดยที่มีค่าของฟิลด์ Autonumber เท่ากับค่าที่อยากได้ลบด้วย 1 จากนั้นก็ลบเรคอร์ดที่เพิ่งเขียนนี้ออก ต่อไปฟิลด์ Autonumber ก็จะเริ่มเลขที่ตามที่เราต้องการแล้วครับ
หมายเหตุ : ตัว Access และโปรแกรมอื่นๆในชุด Microsoft Office มีแต่ภาษา VBA (Visual BASIC for Application) เท่านั้นครับ
7 @R15383
ขอถามด้วยคับ คือผมต้องการสร้างแบบง่ายๆนะครับ
คือผมต้องการสร้าง from(From1) login เพื่อตรวจสอบสิทธิ์ ถ้า Username และ Password ถูกต้อง ให้เปิด from2 อะไรประมาณนี้ครับ
เขียนด้วย access ครับ
แนะนำด้วยนะครับ
คือผมต้องการสร้าง from(From1) login เพื่อตรวจสอบสิทธิ์ ถ้า Username และ Password ถูกต้อง ให้เปิด from2 อะไรประมาณนี้ครับ
เขียนด้วย access ครับ
แนะนำด้วยนะครับ
8 @R15387
ขอบคุณ อาจรย์TTT และอาจารย์สันติสุขครับ เดี๋ยวว่างๆ จะมาอธิบายอีกทีครับ ตอนนี้ผมทำได้แล้ว แต่ ยังไม่ได้แบบที่ต้องการ คือ เป็น VBA ทั้งหมด ยังต้องอ้างไปที่ Query อยู่ ซึ่งปัญหาของผมคือ พอโปรแกรมมันใหญ่ขึ้น จำ Query ไม่ได้ ต้องมาไล่ Query เลยอยากจะใช้ VBA แทนแต่ อ้างไม่ถูกครับ
9 @R15390
ตั้งชื่อคิวรี่ให้มีส่วนเหมือนกับชื่อฟอร์ม / รายงาน จะช่วยให้ตามหาได้ง่าย เช่น ฟอร์ม FrmA ก็ใช้คิวรี่ QryA_ xxxxxx ก็ได้ครับ ผมจะใช้คิวรี่เมื่อ SQL statement นั้นยาวและสลับซับซ้อน ดูใน Design View จะทำให้เข้าใจได้ง่าย แต่ถ้าสั้นๆ ผมก็เขียน SQL statement นั้นลงใน VBA โค้ดเลย การใช้ให้เหมาะสมจะทำให้การดูแลโค้ดทำได้ง่าย ไม่จำเป็นต้องใช้อย่างใดอย่างหนึ่งเท่านั้นครับ
Time: 0.2721s