กระทู้เก่าบอร์ด อ.Yeadram
12,865 27
URL.หัวข้อ /
URL
ขอวิธีการดึงข้อมูลจากตารางมาไว้ที่ฟอร์มค่ะ
สวัสดีค่ะ วันนี้หนูมีข้อสงสัยมาสอบถามท่านอาจารย์ด้วยนะคะ
คือหนูมีตารางที่เก็บข้อมูลของการส่งสินค้าไปแปรรูปสินค้า โดยในประวัติจะมีแค่จำนวนสินค้าที่ส่งไป ทีนี้หนูก็สร้างฟอร์มขึ้นมาสองฟอร์ม ฟอร์มแรกหนูใช้สำหรับโชว์ขอมูลในตารางที่เก็บข้อมูลของการส่งสินค้าไปแปรรูปสินค้าขึ้นมาโดยที่หน้าของข้อมูลหนูจะสร้างปุ่มไว้เพื่อเปิดข้อมูลไปฟอร์มที่สอง ดังรูปตัวอย่างค่ะ
คือหนูมีตารางที่เก็บข้อมูลของการส่งสินค้าไปแปรรูปสินค้า โดยในประวัติจะมีแค่จำนวนสินค้าที่ส่งไป ทีนี้หนูก็สร้างฟอร์มขึ้นมาสองฟอร์ม ฟอร์มแรกหนูใช้สำหรับโชว์ขอมูลในตารางที่เก็บข้อมูลของการส่งสินค้าไปแปรรูปสินค้าขึ้นมาโดยที่หน้าของข้อมูลหนูจะสร้างปุ่มไว้เพื่อเปิดข้อมูลไปฟอร์มที่สอง ดังรูปตัวอย่างค่ะ
27 Reply in this Topic. Dispaly 2 pages and you are on page number 1
2 @R11020
ถามใหม่ค่ะ ต้องขอโทษด้วยนะคะ คำถามอาจจะไม่เคลีย หนูไปศึกษาในสิ่งที่ต้องการแล้ว จึงขอถามคำถามใหม่นะคะ
จากภาพนะคะ ฟอร์มของหนูคือ FmAccounting ฟอร์มนี้ใช้อ้างอิงข้อมูลมาจากข้อมูลของตาราง TbOutStockHistory ซึ่งเป็นตารางที่ใช้เก็บข้อมูลของการจัดส่งสินค้าให้ลูกค้าในแต่ละวันค่ะ จากรูปนะคะจะเห็นว่าฟอร์มจะเป็นลิสรายการลงมาทีละบรรทัดเรื่อยๆ และด้านหน้าของข้อมูลในแต่ละบรรทัดจะมีปุ่มอยู่ 1 ปุ่มค่ะ ปุ่มนี้หนูอยากให้การทำงานของมันคือ
เมื่อเรากดที่ปุ่มแล้วอยากให้ข้อมูลในบรรทัดนั้นๆ ที่แสดงในฟอร์ม FmAccounting (เฉพาะข้อมูลในบรรทัดนั้นนะคะ ไม่เอาทั้งหมดในฟอร์ม) ซึ่งเป็นข้อมูลจากตาราง TbOutStockHistory นั้น ไปบันทึกลงในตารางใหม่อีก 1 ตาราง คือตาราง TbAccoun ซึ่งในตารางนี้จะเป็นตารางพักข้อมูล ซึ่งก็จะมีเขตข้อมูลเหมือนกันกับตาราง TbOutStockHistory ทุกเขตข้อมูลค่ะ แต่จะมีเขตข้อมูลการคำนวนเพิ่มเข้ามาค่ะเพื่อที่จะนำไปใช้คำนวณในคิวรี่ต่อไปค่ะ
อยากทราบว่าต้องเขียนโค๊ดอย่างไร หรือพอจะมีวิธีไหนสามารถทำได้บ้างค่ะ
จากภาพนะคะ ฟอร์มของหนูคือ FmAccounting ฟอร์มนี้ใช้อ้างอิงข้อมูลมาจากข้อมูลของตาราง TbOutStockHistory ซึ่งเป็นตารางที่ใช้เก็บข้อมูลของการจัดส่งสินค้าให้ลูกค้าในแต่ละวันค่ะ จากรูปนะคะจะเห็นว่าฟอร์มจะเป็นลิสรายการลงมาทีละบรรทัดเรื่อยๆ และด้านหน้าของข้อมูลในแต่ละบรรทัดจะมีปุ่มอยู่ 1 ปุ่มค่ะ ปุ่มนี้หนูอยากให้การทำงานของมันคือ
เมื่อเรากดที่ปุ่มแล้วอยากให้ข้อมูลในบรรทัดนั้นๆ ที่แสดงในฟอร์ม FmAccounting (เฉพาะข้อมูลในบรรทัดนั้นนะคะ ไม่เอาทั้งหมดในฟอร์ม) ซึ่งเป็นข้อมูลจากตาราง TbOutStockHistory นั้น ไปบันทึกลงในตารางใหม่อีก 1 ตาราง คือตาราง TbAccoun ซึ่งในตารางนี้จะเป็นตารางพักข้อมูล ซึ่งก็จะมีเขตข้อมูลเหมือนกันกับตาราง TbOutStockHistory ทุกเขตข้อมูลค่ะ แต่จะมีเขตข้อมูลการคำนวนเพิ่มเข้ามาค่ะเพื่อที่จะนำไปใช้คำนวณในคิวรี่ต่อไปค่ะ
อยากทราบว่าต้องเขียนโค๊ดอย่างไร หรือพอจะมีวิธีไหนสามารถทำได้บ้างค่ะ
3 @R11021
ใน _OnClick event procedure ของปุ่มด้านหน้า ให้ใส่โค้ด
Dim DB as DAO.Database
Dim RS as DAO.Recordset
set DB = CurrentDB
set RS = DB.OpenRecordset("TbAccoun",,dbAppendOnly)
With RS
.AddNew
!ชื่อฟิลด์ที่หนึ่ง = Me.ชื่อเท็กซ์บ็อกส์ของฟิลดที่หนึ่งบนหน้าฟอร์ม
...
...
...
.Update
End With
RS.Close : Set RS = Nothing
แต่จะมีปัญหาต่อไปคือ ถ้าเทเบิล TbAccoun มี primary key หรือ unique key แล้วผู้ใช้คลิกที่บรรทัดเดิม 2 ครั้ง ก็จะเกิด Error ในครั้งที่ 2 ได้จากการที่ค่าคีย์ซ้ำกัน ตรงนี้คุณออกแบบไว้หรือไม่ว่าจะให้ทำอย่างไรต่อไป
Dim DB as DAO.Database
Dim RS as DAO.Recordset
set DB = CurrentDB
set RS = DB.OpenRecordset("TbAccoun",,dbAppendOnly)
With RS
.AddNew
!ชื่อฟิลด์ที่หนึ่ง = Me.ชื่อเท็กซ์บ็อกส์ของฟิลดที่หนึ่งบนหน้าฟอร์ม
...
...
...
.Update
End With
RS.Close : Set RS = Nothing
แต่จะมีปัญหาต่อไปคือ ถ้าเทเบิล TbAccoun มี primary key หรือ unique key แล้วผู้ใช้คลิกที่บรรทัดเดิม 2 ครั้ง ก็จะเกิด Error ในครั้งที่ 2 ได้จากการที่ค่าคีย์ซ้ำกัน ตรงนี้คุณออกแบบไว้หรือไม่ว่าจะให้ทำอย่างไรต่อไป
4 @R11022
ขอบคุณมากค่ะ อาจารย์สันติสุข.... ในตาราง TbAccoun ของหนู หนูออกแบบไว้เพื่อนำข้อมูลเฉพาะเรคคอร์ดที่หนูต้องการมาพักไว้ค่ะ โดยที่หนูไม่ได้กำหนด primary key หรือ unique key ไว้เลยค่ะ เพราะหนูต้องการนำเรคคอร์ดเฉพาะที่หนูต้องการมาใส่ราคาขายเข้าไปเพื่อที่จะนำไปคำนวนผลออกมาในคิวรี่ค่ะ เสร็จแล้วก็จะเขียนคิวรี่ท้ายสุดไว้ลบข้อมูลเดิมในตาราง TbAccoun ออกไปเพื่อที่เตรียมรับข้อมูลใหม่เข้ามาค่ะ ปกติหนูจะใช้วิธีนี้ในการอัพเดทตาราง History ต่างๆไว้ ฟอร์มอื่นๆ หนูคีย์ข้อมูลเข้าไปปกติ แต่ฟอร์มนี้ต้องดึงข้อมูลจากตาราง History ที่เก็บไว้แล้วออกมา หนูเลยคิดว่าจะใช้วิธีนี้ทำออกมาน่ะค่ะ
ไม่ทราบว่าวิธีที่หนูทำถูกต้องไหมค่ะ และถ้าหนูไม่ได้กำหนด primary key หรือ unique key จะเกิดปัญหาการ Error ไหมค่ะ รบกวนชี้แนะด้วยค่ะ
ไม่ทราบว่าวิธีที่หนูทำถูกต้องไหมค่ะ และถ้าหนูไม่ได้กำหนด primary key หรือ unique key จะเกิดปัญหาการ Error ไหมค่ะ รบกวนชี้แนะด้วยค่ะ
5 @R11023
ไม่กำหนด primary key ก็ไม่เกิด error แต่ก็จะเกิดเรคอร์ดซ้ำ ดังนั้นก็คงผิดวัตถุประสงค์
โดยส่วนตัวแล้วคิดว่าควรกำหนด แล้วก็ไปเช็คจาก primary key ใน TBAccoun ก่อน ว่ามีเรคอร์ดนั้นแล้วหรือยัง ถ้ายังไม่มีก็ค่อยผ่านไปขั้นตอนการเขียนเรคอร์ดต่อไปครับ
set DB = CurrentDB
set RS = DB.OpenRecordset("Select Count(*) as Cnt from TbAccoun where [ชื่อฟิลด์ Primary Key] = " & Me..ชื่อเท็กซ์บ็อกส์ของฟิลดที่เป็น Primary Key บนหน้าฟอร์ม ) ' จุดนี้ถ้า Primary Key ประกอบไปด้วยหลายฟิลด์ คุณก็ต้องเชื่อมนิพจน์ด้วย AND ด้วย
If RS!Cnt > 0 then
RS.Close: Set RS = Nothing
Exit Sub
End If
set RS = DB.OpenRecordset("TbAccoun",,dbAppendOnly)
With RS
...
...
...
โดยส่วนตัวแล้วคิดว่าควรกำหนด แล้วก็ไปเช็คจาก primary key ใน TBAccoun ก่อน ว่ามีเรคอร์ดนั้นแล้วหรือยัง ถ้ายังไม่มีก็ค่อยผ่านไปขั้นตอนการเขียนเรคอร์ดต่อไปครับ
set DB = CurrentDB
set RS = DB.OpenRecordset("Select Count(*) as Cnt from TbAccoun where [ชื่อฟิลด์ Primary Key] = " & Me..ชื่อเท็กซ์บ็อกส์ของฟิลดที่เป็น Primary Key บนหน้าฟอร์ม ) ' จุดนี้ถ้า Primary Key ประกอบไปด้วยหลายฟิลด์ คุณก็ต้องเชื่อมนิพจน์ด้วย AND ด้วย
If RS!Cnt > 0 then
RS.Close: Set RS = Nothing
Exit Sub
End If
set RS = DB.OpenRecordset("TbAccoun",,dbAppendOnly)
With RS
...
...
...
6 @R11028
ขอบคุณค่ะอาจารย์ เดี๋ยวหนูลองทำตามอาจารย์สันติสุขชี้แจ้งนะคะ ได้ผลประการใดจะแจ้งให้ทราบเจ้าค่ะ...
7 @R11039
เรียนอาจารย์ค่ะ...หนูลองทำตามที่อาจารย์สันติสุขชี้แนะแล้วค่ะ แต่ขึ้น ERROR ขึ้นมาค่ะ ขึ้นมาว่า
Compile error
Type mismatch
อธิบายเพิ่มนะคะ หนูสร้าง primary key อยู่ด้วยกัน 4 ฟิลด์ค่ะ ได้แก่
AcCus, AcDoc, AcSto, AcBar, ค่ะ ส่วนนี่คือโค๊ดที่หนูเขียนขึ้นมาค่ะ
Private Sub Command40_Click()
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Set DB = CurrentDb
Set RS = DB.OpenRecordset("Select Count(*) as Cnt from TbAccounting where [AcCus] = " & Me.OHCus) And [AcDoc] = " & Me.OHDoc)" And [AcSto] = " & Me.OHSto)" And [AcBar] = " & Me.OHBar)"
If RS!Cnt > 0 Then
RS.Close: Set RS = Nothing
Exit Sub
End If
Set RS = DB.OpenRecordset("TbAccounting", , dbAppendOnly)
With RS
.AddNew
!AcCus = Me.OHCus
!AcDoc = Me.OHDoc
!AcSto = Me.OHSto
!AcBar = Me.OHBar
.Update
End With
RS.Close: Set RS = Nothing
End Sub
ไม่ทราบว่าหนูเขียนผิดตรงไหนคะ รบกวนชี้แนะด้วยค่ะ
Compile error
Type mismatch
อธิบายเพิ่มนะคะ หนูสร้าง primary key อยู่ด้วยกัน 4 ฟิลด์ค่ะ ได้แก่
AcCus, AcDoc, AcSto, AcBar, ค่ะ ส่วนนี่คือโค๊ดที่หนูเขียนขึ้นมาค่ะ
Private Sub Command40_Click()
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Set DB = CurrentDb
Set RS = DB.OpenRecordset("Select Count(*) as Cnt from TbAccounting where [AcCus] = " & Me.OHCus) And [AcDoc] = " & Me.OHDoc)" And [AcSto] = " & Me.OHSto)" And [AcBar] = " & Me.OHBar)"
If RS!Cnt > 0 Then
RS.Close: Set RS = Nothing
Exit Sub
End If
Set RS = DB.OpenRecordset("TbAccounting", , dbAppendOnly)
With RS
.AddNew
!AcCus = Me.OHCus
!AcDoc = Me.OHDoc
!AcSto = Me.OHSto
!AcBar = Me.OHBar
.Update
End With
RS.Close: Set RS = Nothing
End Sub
ไม่ทราบว่าหนูเขียนผิดตรงไหนคะ รบกวนชี้แนะด้วยค่ะ
8 @R11040
Error ตรงบรรทัดไหนช่วยบอกด้วย
ยังไงก็ตาม บรรทัดข้างล่างนี้เขียนได้มั่วดี ส่วนที่ถูกจะเป็นอย่างไรนั้นขึ้นกับประเภทของข้อมูลของทั้ง 4 ฟิลด์ที่เป็น PK (Primary Key) ช่วยบอกมาด้วยครับว่าเป็นข้อมูลประเภทไหน เช่น Text, Integer, ... เป็นต้น
Set RS = DB.OpenRecordset("Select Count(*) as Cnt from TbAccounting where [AcCus] = " & Me.OHCus) And [AcDoc] = " & Me.OHDoc)" And [AcSto] = " & Me.OHSto)" And [AcBar] = " & Me.OHBar)"
ยังไงก็ตาม บรรทัดข้างล่างนี้เขียนได้มั่วดี ส่วนที่ถูกจะเป็นอย่างไรนั้นขึ้นกับประเภทของข้อมูลของทั้ง 4 ฟิลด์ที่เป็น PK (Primary Key) ช่วยบอกมาด้วยครับว่าเป็นข้อมูลประเภทไหน เช่น Text, Integer, ... เป็นต้น
Set RS = DB.OpenRecordset("Select Count(*) as Cnt from TbAccounting where [AcCus] = " & Me.OHCus) And [AcDoc] = " & Me.OHDoc)" And [AcSto] = " & Me.OHSto)" And [AcBar] = " & Me.OHBar)"
9 @R11043
ขอบคุณค่ะอาจารย์สันติสุข และต้องขออภัยด้วยค่ะที่มั่วไปหน่อย
คือขอมูลของทั้ง 4 ฟิลด์มีดังนี้ค่ะ
AcCus เป็นฟิลด์รายชื่อลูกค้าลักษณะเป็น Text ค่ะ
AcDoc เป็นฟิลด์เลขที่เอกสารค่ะลักษณะเป็น Text ค่ะ
ACSto เป็นฟิลด์โกดังสินค้าค่ะลักษณะเป็น Text ค่ะ
ACBar เป็นฟิล์บาร์โค๊ดค่ะลักษณะเป็นไฟล์ Text ค่ะ
ส่วน Error จะมีแถบสีน้ำเงินครอบที่บรรทัดนี้ค่ะ .OpenRecordset
รบกวนท่านอาจารย์ช่วยชี้แนะด้วยนะคะ
คือขอมูลของทั้ง 4 ฟิลด์มีดังนี้ค่ะ
AcCus เป็นฟิลด์รายชื่อลูกค้าลักษณะเป็น Text ค่ะ
AcDoc เป็นฟิลด์เลขที่เอกสารค่ะลักษณะเป็น Text ค่ะ
ACSto เป็นฟิลด์โกดังสินค้าค่ะลักษณะเป็น Text ค่ะ
ACBar เป็นฟิล์บาร์โค๊ดค่ะลักษณะเป็นไฟล์ Text ค่ะ
ส่วน Error จะมีแถบสีน้ำเงินครอบที่บรรทัดนี้ค่ะ .OpenRecordset
รบกวนท่านอาจารย์ช่วยชี้แนะด้วยนะคะ
10 @R11044
เพิ่มเติมนะคะ .OpenRecordset ที่มีแถบสีน้ำเงินครอบจะอยู่ในส่วนของ
Set RS = DB.OpenRecordset("Select Count(*) as Cnt from TbAccounting where [AcCus] = " & Me.OHCus) And [AcDoc] = " & Me.OHDoc)" And [AcSto] = " & Me.OHSto)" And [AcBar] = " & Me.OHBar)"
ค่ะ (ขออภัยค่ะลืมบอกบรรทัดที่ Error ไปค่ะ)
Set RS = DB.OpenRecordset("Select Count(*) as Cnt from TbAccounting where [AcCus] = " & Me.OHCus) And [AcDoc] = " & Me.OHDoc)" And [AcSto] = " & Me.OHSto)" And [AcBar] = " & Me.OHBar)"
ค่ะ (ขออภัยค่ะลืมบอกบรรทัดที่ Error ไปค่ะ)
11 @R11045
ประเภทข้อมูลที่เป็น text จะต้องถูกครอบด้วย single quote หรือ double quote ดังนั้น SQL Select statement ที่จะต้องสร้างจริงๆก็มีรูปแบบเป็น (แบบ single quote)
Select Count(*) as Cnt from TbAccounting where [AcCus] = 'ค่าของ Me.OHCus' And [AcDoc] = 'ค่าของ Me.OHDoc' And [AcSto] = 'ค่าของ Me.OHSto' And [AcBar] = 'ค่าของ Me.OHBar'
พอเราต้องมาสร้างเป็นนิพจน์ของ text ก็จะได้ออกมาเป็น
Set RS = DB.OpenRecordset("Select Count(*) as Cnt from TbAccounting where [AcCus] = '" & Me.OHCus & "' And [AcDoc] = '" & Me.OHDoc & "' And [AcSto] = '" & Me.OHSto & "' And [AcBar] = '" & Me.OHBar & "' ")
Select Count(*) as Cnt from TbAccounting where [AcCus] = 'ค่าของ Me.OHCus' And [AcDoc] = 'ค่าของ Me.OHDoc' And [AcSto] = 'ค่าของ Me.OHSto' And [AcBar] = 'ค่าของ Me.OHBar'
พอเราต้องมาสร้างเป็นนิพจน์ของ text ก็จะได้ออกมาเป็น
Set RS = DB.OpenRecordset("Select Count(*) as Cnt from TbAccounting where [AcCus] = '" & Me.OHCus & "' And [AcDoc] = '" & Me.OHDoc & "' And [AcSto] = '" & Me.OHSto & "' And [AcBar] = '" & Me.OHBar & "' ")
12 @R11046
ขอบคุณมากเลยค่ะอาจารย์สันติสุข... ได้ตามแบบที่หนูต้องการเลยค่ะ หนูรบกวนขอถามอีกคำถามนะค่ะ ถ้าเราต้องการให้เปิดอีกฟอร์มขึ้นมาด้วยหลังจากที่ข้อมูลเข้าไปอยู่ในตาราง TbAccounting แล้ว ฟอร์มใช้ชื่อ FmAccounting02 หนูต้องเขียนโค๊ดว่าอย่างไรแล้วไปวางไว้ตำแหน่งไหนคะ
รบกวนด้วยนะคะ
รบกวนด้วยนะคะ
13 @R11047
ถ้าหมายถึงบันทึกลง TbAccounting ปั๊ป ก็ให้เปิดฟอร์ม FmAccounting02 และแสดงเรคอร์ดที่เพิ่งบันทึกไปทันที ก็เขียนโค้ดอย่างนี้
...
...
...
RS.Close: Set RS = Nothing
DoCmd.OpenForm "FmAccounting02",,,"[AcCus] = '" & Me.OHCus & "' And [AcDoc] = '" & Me.OHDoc & "' And [AcSto] = '" & Me.OHSto & "' And [AcBar] = '" & Me.OHBar & "' "
End Sub
...
...
...
RS.Close: Set RS = Nothing
DoCmd.OpenForm "FmAccounting02",,,"[AcCus] = '" & Me.OHCus & "' And [AcDoc] = '" & Me.OHDoc & "' And [AcSto] = '" & Me.OHSto & "' And [AcBar] = '" & Me.OHBar & "' "
End Sub
14 @R11048
ได้แล้วค่ะ ขอบคุณอาจารย์สันติสุขมากๆเลยค่ะที่คอยช่วยชี้แนะหนู ขอบพระคุณค่ะ
15 @R11049
ประสบปัญหาอีกแล้วค่ะ... ต้องขออภัยท่านอาจารย์สันติสุขด้วยนะคะที่รบกวนบ่อยๆ จากที่ท่านอาจารย์สันติสุขได้ชี้แนะหนูจนสามารถทำได้ตามที่หนูต้องการทุกอย่างแล้ว หลังจากนั้นหนูก็ทำตามวิธีที่อาจารย์ได้แนะนำและได้มีการเพิ่มการทำงานเข้าไปดังนี้
1. หนูได้สร้างคิวรี่ขึ้นมา 1 คิวรี่ ชื่อว่า Colse_Ac หนูเอาไปผูกไว้กับฟอร์มในคุณสมบัติของฟอร์มตรงส่วน "เมื่อปิด..." การทำงานคือเมื่อปิดฟอร์ม FmAccounting02 แล้วก็จะลบเรคคอร์ดทั้งหมดในตาราง TbAccounting เพื่อที่จะไว้รับข้อมูลใหม่ที่จะเข้ามาจะได้ไม่ซ้ำกัน (อันนี้ไม่ติดปัญหาค่ะ)
2. หนูได้ทำการเขียนคิวรี่ขึ้นมาโดยตั้งค่าเป็น"แบบสอบถามใช้ผนวกข้อมูล"โดยที่หนูตั้งค่าให้ผนวกข้อมูลจากตาราง TbAccounting ผนวกข้อมูลเข้ากับตาราง TbOutStockHistory ใช้ชื่อว่า QAccoun02 พร้อมกับสร้างมาโครขึ้นมาโดยใส่คิวรี่ QAccoun02 ไว้ในมาโครและใชชื่อว่า"RunQAcc02" หลังจากนั้นหนูก็สร้างปุ่มขึ้นมา 1 ปุ่มบนฟอร์ม FmAccounting02 ชื่อว่าปุ่ม"บันทึก" ในปุ่มนี้หนูก็กำหนดคุณสมบัติในส่วน"เมื่อคลิ๊ก..."แล้วก็ใส่มาโคร RunQAcc02 เข้าไปค่ะ
หลังจากที่ทดลองการทำงานของปุ่มแล้วปรากฎว่า Access ไม่ยอมให้ทำการบันทึกข้อมูลเข้าตาราง TbOutStockHistory ค่ะ
หนูจึงคิดว่า ถ้าเราสร้างการทำงานโดยการที่เมื่อกดปุ่ม "บันทึกแล้ว" ให้ลบเรคคอร์ดเก่าจากตาราง TbOutStockHistory ก่อน เสร็จแล้วค่อยบันทึกเรคคอร์ดใหม่เข้าไปในตาราง TbOutStockHistory จะสามารถทำได้ไหมค่ะ ไม่ทราบว่าหนูคิดถูกหรอเปล่า หนูไม่ทราบว่าต้องเขียนโค๊ดอย่างไร รบกวนท่านอาจารย์ด้วยนะคะ ขอบคุณค่ะ
1. หนูได้สร้างคิวรี่ขึ้นมา 1 คิวรี่ ชื่อว่า Colse_Ac หนูเอาไปผูกไว้กับฟอร์มในคุณสมบัติของฟอร์มตรงส่วน "เมื่อปิด..." การทำงานคือเมื่อปิดฟอร์ม FmAccounting02 แล้วก็จะลบเรคคอร์ดทั้งหมดในตาราง TbAccounting เพื่อที่จะไว้รับข้อมูลใหม่ที่จะเข้ามาจะได้ไม่ซ้ำกัน (อันนี้ไม่ติดปัญหาค่ะ)
2. หนูได้ทำการเขียนคิวรี่ขึ้นมาโดยตั้งค่าเป็น"แบบสอบถามใช้ผนวกข้อมูล"โดยที่หนูตั้งค่าให้ผนวกข้อมูลจากตาราง TbAccounting ผนวกข้อมูลเข้ากับตาราง TbOutStockHistory ใช้ชื่อว่า QAccoun02 พร้อมกับสร้างมาโครขึ้นมาโดยใส่คิวรี่ QAccoun02 ไว้ในมาโครและใชชื่อว่า"RunQAcc02" หลังจากนั้นหนูก็สร้างปุ่มขึ้นมา 1 ปุ่มบนฟอร์ม FmAccounting02 ชื่อว่าปุ่ม"บันทึก" ในปุ่มนี้หนูก็กำหนดคุณสมบัติในส่วน"เมื่อคลิ๊ก..."แล้วก็ใส่มาโคร RunQAcc02 เข้าไปค่ะ
หลังจากที่ทดลองการทำงานของปุ่มแล้วปรากฎว่า Access ไม่ยอมให้ทำการบันทึกข้อมูลเข้าตาราง TbOutStockHistory ค่ะ
หนูจึงคิดว่า ถ้าเราสร้างการทำงานโดยการที่เมื่อกดปุ่ม "บันทึกแล้ว" ให้ลบเรคคอร์ดเก่าจากตาราง TbOutStockHistory ก่อน เสร็จแล้วค่อยบันทึกเรคคอร์ดใหม่เข้าไปในตาราง TbOutStockHistory จะสามารถทำได้ไหมค่ะ ไม่ทราบว่าหนูคิดถูกหรอเปล่า หนูไม่ทราบว่าต้องเขียนโค๊ดอย่างไร รบกวนท่านอาจารย์ด้วยนะคะ ขอบคุณค่ะ
16 @R11050
1) ...หลังจากที่ทดลองการทำงานของปุ่มแล้วปรากฎว่า Access ไม่ยอมให้ทำการบันทึกข้อมูลเข้าตาราง TbOutStockHistory ค่ะ ...
ประโยคลอยๆอย่างนี้มาอีกแล้ว "Access ไม่ยอม" มันไม่ยอมยังไง มันมีข้อความ error อะไร หรือ error รหัสอะไร ? ลองเช็คว่ามีเรคอร์ดใน TbAccounting ที่อาจก่อให้เกิด duplicate key ใน TbOutStockHistory หรือไม่ หรือมีฟิลด์อะไรใน TbOutStockHistory ที่ต้องการข้อมูล แต่คิวรี่ไม่ได้ใส่ข้อมูลให้แก่ฟิลด์นั้นหรือไม่
2) ลบเรคคอร์ดเก่าจากตาราง TbOutStockHistory ก่อน เสร็จแล้วค่อยบันทึกเรคคอร์ดใหม่เข้าไปในตาราง TbOutStockHistory จะสามารถทำได้ไหมค่ะ
ทำได้ ที่อธิบายมาให้ผมฟังนี้เป็นเพียงลอจิคที่คุณคิดจะทำ แต่ทำไมถึงจะทำอย่างนั้น ทำแล้วผิดวัตถุประสงค์หรือเปล่า อันนี้ผมไม่รู้ เพราะผมไม่รู้ว่าคุณต้องการทำอะไร
3) ตกลงคิวรี่ Close_Ac นี่เกี่ยวอะไรกับปัญหานี้หรือเปล่า อ่านแล้วเหมือนไม่เกี่ยว
ประโยคลอยๆอย่างนี้มาอีกแล้ว "Access ไม่ยอม" มันไม่ยอมยังไง มันมีข้อความ error อะไร หรือ error รหัสอะไร ? ลองเช็คว่ามีเรคอร์ดใน TbAccounting ที่อาจก่อให้เกิด duplicate key ใน TbOutStockHistory หรือไม่ หรือมีฟิลด์อะไรใน TbOutStockHistory ที่ต้องการข้อมูล แต่คิวรี่ไม่ได้ใส่ข้อมูลให้แก่ฟิลด์นั้นหรือไม่
2) ลบเรคคอร์ดเก่าจากตาราง TbOutStockHistory ก่อน เสร็จแล้วค่อยบันทึกเรคคอร์ดใหม่เข้าไปในตาราง TbOutStockHistory จะสามารถทำได้ไหมค่ะ
ทำได้ ที่อธิบายมาให้ผมฟังนี้เป็นเพียงลอจิคที่คุณคิดจะทำ แต่ทำไมถึงจะทำอย่างนั้น ทำแล้วผิดวัตถุประสงค์หรือเปล่า อันนี้ผมไม่รู้ เพราะผมไม่รู้ว่าคุณต้องการทำอะไร
3) ตกลงคิวรี่ Close_Ac นี่เกี่ยวอะไรกับปัญหานี้หรือเปล่า อ่านแล้วเหมือนไม่เกี่ยว
17 @R11051
ต้องขออภัยอาจารย์ด้วยค่ะ ที่ถามคำถามลอยๆ ขอโทษด้วยค่ะ
คือพอกดปุ่มมันขึ้นฟ้องอย่างนี้ค่ะ
"โปรแกรมสต๊อกสินค้า ได้ตั้งค่า 0 เขตข้อมูลเป็น Null เนื่องจากความล้มเหลวในการแปลงชนิดและไม่ได้เพิ่ม, 1 ระเบียนไปยังตารางเนื่องจากการละเมิดของคีย์, 0 ระเบียนเนื่องจากการละเมิดการล็อก และ 0 ระเบียน เนื่องจากละเมิดกฎการตรวจสอบ" ค่ะ หนูใส่ทุกฟิลด์แล้วนะคะ ไม่ทราบว่าเพราะอะไรค่ะ
ส่วนวัตถุประสงค์จริงๆของหนูนั้นคือ ต้องการเพิ่มฟิลด์ที่ได้จากการคำนวณในคิวรี่ บันทึกลงไปเพิ่มเติมในเรคคอร์ดเดิม เนื่องจากหนูเว้นฟิลด์ที่ใส่ผลลัพท์การคำนวณไว้ค่ะ เพราะทางเจ้านายหนูต้องการให้คนคีย์ข้อมูลตัดสต๊อกสินค้า 1 คนและให้คนคีย์ข้อมูลบัญชีจากการตัดสต๊อกสินค้าในแต่ละวันอีก 1 คนค่ะ ลักษณะเป็นแบบนี้ค่ะ
คนคีย์ข้อมูลตัดสต๊อก
วันที่ เลขที่เอกสาร บาร์โค๊ด จำนวน ทุน ขาย กำไร
21-9-54 11111 1234 50 3.2 - -
พอคีย์เสร็จแล้วจะไปบันทึกอยู่ในตาราง TbOutStockHistory ค่ะ
คนคีย์ข้อมูลบัญชี ต้องดึงข้อมูลจากตาราง TbOutStockHistory ออกมาค่ะ
วันที่ เลขที่เอกสาร บาร์โค๊ด จำนวน ทุน ขาย กำไร
21-9-54 11111 1234 50 3.2 4.5 65
จากตัวอย่างคนคีย์ข้อมูลบัญชีต้องดึงข้อมูลของคนคีย์ข้อมูลตัดสต๊อกออกมาเพื่อที่จะคีย์ฟิลด์ ขาย เข้าไปเพื่อที่จะให้คิวรี่ในการคำนวณผลลัพท์ในฟิลด์ กำไร ออกมาและกลับไปบันทึกในตาราง TbOutStockHistory ในส่วนของฟิลด์ ขายและกำไร ที่ยังว่างอยู่ค่ะ
เนื่องจากหนูยังไม่ค่อยเก่งทางด้านเขียน Access เท่าไร หนูจึงได้คิดวิธีออกมาในลักษณะนี้ค่ะ ส่วน Close_Ac ไม่ได้เกี่ยวข้องกันค่ะ รบกวนท่านอาจารย์ด้วยนะคะ ขอบคุณค่ะ
คือพอกดปุ่มมันขึ้นฟ้องอย่างนี้ค่ะ
"โปรแกรมสต๊อกสินค้า ได้ตั้งค่า 0 เขตข้อมูลเป็น Null เนื่องจากความล้มเหลวในการแปลงชนิดและไม่ได้เพิ่ม, 1 ระเบียนไปยังตารางเนื่องจากการละเมิดของคีย์, 0 ระเบียนเนื่องจากการละเมิดการล็อก และ 0 ระเบียน เนื่องจากละเมิดกฎการตรวจสอบ" ค่ะ หนูใส่ทุกฟิลด์แล้วนะคะ ไม่ทราบว่าเพราะอะไรค่ะ
ส่วนวัตถุประสงค์จริงๆของหนูนั้นคือ ต้องการเพิ่มฟิลด์ที่ได้จากการคำนวณในคิวรี่ บันทึกลงไปเพิ่มเติมในเรคคอร์ดเดิม เนื่องจากหนูเว้นฟิลด์ที่ใส่ผลลัพท์การคำนวณไว้ค่ะ เพราะทางเจ้านายหนูต้องการให้คนคีย์ข้อมูลตัดสต๊อกสินค้า 1 คนและให้คนคีย์ข้อมูลบัญชีจากการตัดสต๊อกสินค้าในแต่ละวันอีก 1 คนค่ะ ลักษณะเป็นแบบนี้ค่ะ
คนคีย์ข้อมูลตัดสต๊อก
วันที่ เลขที่เอกสาร บาร์โค๊ด จำนวน ทุน ขาย กำไร
21-9-54 11111 1234 50 3.2 - -
พอคีย์เสร็จแล้วจะไปบันทึกอยู่ในตาราง TbOutStockHistory ค่ะ
คนคีย์ข้อมูลบัญชี ต้องดึงข้อมูลจากตาราง TbOutStockHistory ออกมาค่ะ
วันที่ เลขที่เอกสาร บาร์โค๊ด จำนวน ทุน ขาย กำไร
21-9-54 11111 1234 50 3.2 4.5 65
จากตัวอย่างคนคีย์ข้อมูลบัญชีต้องดึงข้อมูลของคนคีย์ข้อมูลตัดสต๊อกออกมาเพื่อที่จะคีย์ฟิลด์ ขาย เข้าไปเพื่อที่จะให้คิวรี่ในการคำนวณผลลัพท์ในฟิลด์ กำไร ออกมาและกลับไปบันทึกในตาราง TbOutStockHistory ในส่วนของฟิลด์ ขายและกำไร ที่ยังว่างอยู่ค่ะ
เนื่องจากหนูยังไม่ค่อยเก่งทางด้านเขียน Access เท่าไร หนูจึงได้คิดวิธีออกมาในลักษณะนี้ค่ะ ส่วน Close_Ac ไม่ได้เกี่ยวข้องกันค่ะ รบกวนท่านอาจารย์ด้วยนะคะ ขอบคุณค่ะ
18 @R11052
"1 ระเบียนไปยังตารางเนื่องจากการละเมิดของคีย์" นี่แหล่ะคือสาเหตุของปัญหา ข้อความนี้บอกว่ามีการเพิ่มเรคอร์ดลงใน TbOutStockHistory แต่เรคอร์ดนั้นทำให้ค่าคีย์ PK หรือ AK (Alternate Key) อื่นๆที่เป็น Unique Key ใน TbOutStockHistory เกิดซ้ำกันอยู่ 1 เรคอร์ด นั่นแสดงว่า PK หรือ AK ใน TbOutStockHistory ไม่เหมือนกับใน TbAccounting ลองไปเช็คดูนะครับ
แต่ด้วยวัตถุประสงค์ที่จะให้ฝ่ายบัญชีป้อนข้อมูลขาย ก็ยังไม่เห็นว่าทำไมต้องแยกออกมาเป็นเทเบิล TbAccounting ทำไมไม่ป้อนลงใน TbOutStockHistory โดยตรงไปเลย เพราะยังไงเราก็กำหนดได้ว่าจะให้คิวรี่หรือฟอร์มที่ป้อน แสดงหรือไม่แสดงฟิลด์อะไรก็ได้นี่ครับ
แต่ด้วยวัตถุประสงค์ที่จะให้ฝ่ายบัญชีป้อนข้อมูลขาย ก็ยังไม่เห็นว่าทำไมต้องแยกออกมาเป็นเทเบิล TbAccounting ทำไมไม่ป้อนลงใน TbOutStockHistory โดยตรงไปเลย เพราะยังไงเราก็กำหนดได้ว่าจะให้คิวรี่หรือฟอร์มที่ป้อน แสดงหรือไม่แสดงฟิลด์อะไรก็ได้นี่ครับ
19 @R11053
แก้เขียนผิด
แต่ด้วยวัตถุประสงค์ที่จะให้ฝ่ายบัญชีป้อนข้อมูลขาย ก็ยังไม่เห็นว่าทำไมต้องแยกออกมาเป็นเทเบิล TbOutStockHistory ทำไมไม่ป้อนลงใน TbAccounting โดยตรงไปเลย เพราะยังไงเราก็กำหนดได้ว่าจะให้คิวรี่หรือฟอร์มที่ป้อน แสดงหรือไม่แสดงฟิลด์อะไรก็ได้นี่ครับ
แต่ด้วยวัตถุประสงค์ที่จะให้ฝ่ายบัญชีป้อนข้อมูลขาย ก็ยังไม่เห็นว่าทำไมต้องแยกออกมาเป็นเทเบิล TbOutStockHistory ทำไมไม่ป้อนลงใน TbAccounting โดยตรงไปเลย เพราะยังไงเราก็กำหนดได้ว่าจะให้คิวรี่หรือฟอร์มที่ป้อน แสดงหรือไม่แสดงฟิลด์อะไรก็ได้นี่ครับ
20 @R11059
ขอบคุณค่ะอาอารย์สันติสุข เดี๋ยวหนูจะลองทำตามที่อาจารย์แนะนำดูนะคะ ได้ผลอย่างไรจะแจ็งให้ทราบค่ะ ยอบคุณค่ะ
Time: 0.3264s
ฟอร์มที่สองนี้จะมีทั้งข้อมูลจากตารางที่เก็บข้อมูลของการส่งสินค้าไปแปรรูปสินค้าโชว์ขึ้นด้านบน และยังมีช่องสำหรับใส่ข้อมูลด้านล่างค่ะ
ส่วนที่หนูต้องการคือ จะต้องสร้างปุ่มและเขียนโค๊ดอย่างไรค่ะ ให้ดึงข้อมูลจากทั้งข้อมูลด้านบนที่ใช้สำหรับโชว์ข้อมูลของตารางที่เก็บข้อมูลของการส่งสินค้าไปแปรรูปสินค้า และข้อมูลที่กรอกข้อมูลเพิ่มทางด้านล่างของฟอร์มที่สองในรูปนี้ ไปบันทึกอยู่ในตารางใหม่ที่เตรียมไว้ได้ค่ะ ขอบคุณค่ะ