กระทู้เก่าบอร์ด อ.Yeadram
1,286 7
URL.หัวข้อ /
URL
รบกวนอีกแล้วครับผมเรื่องใส่ข้อความแทนเมื่อคลิก
รบกวนอาจารย์ด้วยครับ ผมมี ฟอร์มลงการขายอยู่หนึ่งฟอร์ม แต่ไม่ต้องการให้มีการลบบิลได้ จึงทำฟอร์มสำหรับยกเลิกเป็นบิลเสีย ผ่านฟอร์มยกเลิก โดยมีฟอร์มดังนี้
ฟอร์มหลักชื่อ FmOrder_Out_Hd_Cc_ExV (จากTableชื่อ TbOrder )
ฟอร์มย่อยชื่อ FsOrderDetail_Out_Hd_Cc_ExV (จากTableชื่อ TbOrderDetail)
โดยทั้ง2ฟอร์ม มีฟิลด์ OrderBuild ที่เหมือนกัน และเชื่อมโยงกันอยู่ รวมทั้ง ฟิล์ดOrderIDที่เป็นการเชื่อมโยงร่วมด้วย(ที่ให้รายละเอียด OrderID เพราะต้องการให้ยกเลิกเมื่อบิลมีเลขที่บิลเหมือนกันครับ)
และมีComboให้เลือกคำว่า "บิลดี" และ "บิลเสีย" ซึ่งปรกติจะมองไม่เห็นหน้าฟอร์ม เพราะถูกกำหนดว่า ไม่แสดงให้เห็น
จึงอยากสร้างปุ่มให้ โดย เมื่อคลิกแล้ว จะแสดงหน้าต่าง ถามว่า "ท่านแน่ใจว่าต้องการยกเลิกรายการนี้เป็นบิลเสียหรือไม่ หากตอบ Y=ใช่ N=ไม่ใช่"
และเมื่อกด Y กด Enter ก็จะทำงานโดย เปลี่ยนข้อความในฟิล์ด OrderBuild เป็น "บิลเสีย"ทั้ง2ฟอร์ม แล้วยังคงเปิดฟอร์มอยู่ และแสดงรายการปรกติถูกตั้งให้แสดงแสดงแต่รายการที่เป็นบิลดีอยู่แล้ว
หากกด N กด Enter ก็จะไม่มีการเปลี่ยนแปลงใดๆเกิดขึ้น
ฟิล์ด OrderBuild จะใช้เป็นComboที่ใช้แหล่งข้อมูลจาก TzOrderBuild ที่มีเพียงฟิล์ดเดียว และมีเพียง2เรคคอร์ดคือ "บิลดี" และ "บิลเสีย" ครับ
ไม่ทราบว่าจะเขียนโค๊ตอย่างไรครับ เป็นโค๊ตที่ต้องการมากๆ รบกวนด้วยนะครับ
ขอบคุณครับ
ฟอร์มหลักชื่อ FmOrder_Out_Hd_Cc_ExV (จากTableชื่อ TbOrder )
ฟอร์มย่อยชื่อ FsOrderDetail_Out_Hd_Cc_ExV (จากTableชื่อ TbOrderDetail)
โดยทั้ง2ฟอร์ม มีฟิลด์ OrderBuild ที่เหมือนกัน และเชื่อมโยงกันอยู่ รวมทั้ง ฟิล์ดOrderIDที่เป็นการเชื่อมโยงร่วมด้วย(ที่ให้รายละเอียด OrderID เพราะต้องการให้ยกเลิกเมื่อบิลมีเลขที่บิลเหมือนกันครับ)
และมีComboให้เลือกคำว่า "บิลดี" และ "บิลเสีย" ซึ่งปรกติจะมองไม่เห็นหน้าฟอร์ม เพราะถูกกำหนดว่า ไม่แสดงให้เห็น
จึงอยากสร้างปุ่มให้ โดย เมื่อคลิกแล้ว จะแสดงหน้าต่าง ถามว่า "ท่านแน่ใจว่าต้องการยกเลิกรายการนี้เป็นบิลเสียหรือไม่ หากตอบ Y=ใช่ N=ไม่ใช่"
และเมื่อกด Y กด Enter ก็จะทำงานโดย เปลี่ยนข้อความในฟิล์ด OrderBuild เป็น "บิลเสีย"ทั้ง2ฟอร์ม แล้วยังคงเปิดฟอร์มอยู่ และแสดงรายการปรกติถูกตั้งให้แสดงแสดงแต่รายการที่เป็นบิลดีอยู่แล้ว
หากกด N กด Enter ก็จะไม่มีการเปลี่ยนแปลงใดๆเกิดขึ้น
ฟิล์ด OrderBuild จะใช้เป็นComboที่ใช้แหล่งข้อมูลจาก TzOrderBuild ที่มีเพียงฟิล์ดเดียว และมีเพียง2เรคคอร์ดคือ "บิลดี" และ "บิลเสีย" ครับ
ไม่ทราบว่าจะเขียนโค๊ตอย่างไรครับ เป็นโค๊ตที่ต้องการมากๆ รบกวนด้วยนะครับ
ขอบคุณครับ
7 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R04262
ขอบคุณครับอาจารย์
เบื้องต้นได้ลองดูแล้วครับ มี error ที่
db.execute "update TbOrderDetail set OrderBuild = 'บิลเสีย' where OrderID = '" & me.OrderID & "' "
db.execute "update TbOrder set OrderBuild = 'บิลเสีย' where OrderID = '" & me.OrderID & "' "
โดย OrderID ในเทเบิ้ล Order เป็น PrimaryKey เพียงฟิล์ดเดียวครับ และเป็นฟิล์ดประเภท AutoNumber
ส่วน OrderID ในเทเบิ้ล OrderDetail ไม่เป็นPrimary และเป็นฟิล์ดประเภท Number
(ตรงที่เป็น OrderIDที่เป็นAutoNumber และ Numberนั้น ผมได้ลองเปลี่ยนเป็น Text แล้วก็ยังerror อยุ่ครับ) แต่พึ่งกลับมาลองได้พักนุง เดี๋ยวจะทดสอบต่อไปครับ
ขอบคุณอาจารย์ สันติสุขมากครับ
เบื้องต้นได้ลองดูแล้วครับ มี error ที่
db.execute "update TbOrderDetail set OrderBuild = 'บิลเสีย' where OrderID = '" & me.OrderID & "' "
db.execute "update TbOrder set OrderBuild = 'บิลเสีย' where OrderID = '" & me.OrderID & "' "
โดย OrderID ในเทเบิ้ล Order เป็น PrimaryKey เพียงฟิล์ดเดียวครับ และเป็นฟิล์ดประเภท AutoNumber
ส่วน OrderID ในเทเบิ้ล OrderDetail ไม่เป็นPrimary และเป็นฟิล์ดประเภท Number
(ตรงที่เป็น OrderIDที่เป็นAutoNumber และ Numberนั้น ผมได้ลองเปลี่ยนเป็น Text แล้วก็ยังerror อยุ่ครับ) แต่พึ่งกลับมาลองได้พักนุง เดี๋ยวจะทดสอบต่อไปครับ
ขอบคุณอาจารย์ สันติสุขมากครับ
3 @R04263
ไม่รบกวนแล้วครับ อาจารย์สันติสุขครับ
พอดีคิดได้อีกแบบนึงครับ ถึงไม่ค่อยสะดวกนักแต่พอใช้ ใช้ไปก่อนครับ
ขอบคุณครับ
พอดีคิดได้อีกแบบนึงครับ ถึงไม่ค่อยสะดวกนักแต่พอใช้ ใช้ไปก่อนครับ
ขอบคุณครับ
4 @R04264
เปลี่ยนเป็น ... where OrderID = " & me.OrderID
5 @R04265
อ้างอิง
เปลี่ยนเป็น ... where OrderID = " & me.OrderID
-----------------------------------------------------------
เปลี่ยนแล้วครับอาจารย์ ไม่Errorแล้วครับ แต่ฟิล์ดไม่มีการเปลี่ยนแปลงเลยครับ ผมไม่ได้ให้ไฟล์ดอาจารย์ไปดู เลยอาจไม่ตรงกับที่ต้องการน่ะครับ ต้องขอโทษด้วยครับ
ตอนนี้ผมเอาโค๊ตของอาจารย์ไป เปลี่ยนดังนี้ครับ คือ มีลักษณะว่า ผมไปสร้าง TxtBadBill เอาไว้ก่อน แล้วพอผมกดปุ่มแล้ว ถ้ากดYes จะไปเปลี่ยนฟิล์ดOrderBuildของฟอร์มหลัก แล้วจึงRequeryทั้งฟอร์มผ่านQueryชื่อQCHOrder_Out_Hd_Cc_ExVอีกทีครับ
โค๊ตที่เปลี่ยนแปลงจากอาจารย์คือ
Private Sub Command208_Click()
If MsgBox("ท่านแน่ใจหรือว่า ต้องการยกเลิกบิลนี้ ให้เป็นบิลเสีย", vbQuestion + vbYesNo) = vbYes Then
Me.OrderBuild = TxtBadBill
On Error GoTo PersonID_AfterUpdate_Err
DoCmd.SetWarnings False
DoCmd.OpenQuery "QCHOrder_Out_Hd_Cc_ExV", acViewNormal, acEdit
PersonID_AfterUpdate_Exit:
Exit Sub
PersonID_AfterUpdate_Err:
MsgBox Error$
Resume PersonID_AfterUpdate_Exit
Exit Sub
End If
Me.Refresh
End Sub
ที่ให้รายละเอียดตรงนี้ เผื่อว่า เป็นไปได้ในแนวทางไหนบ้างเท่านั้นน่ะครับ เพราะโค๊ตน่าจะบอกอะไรได้ในส่วนหนึ่งน่ะครับ
ขอบคุณครับอาจารย์สันติสุขมากๆเลยครับ ที่เสียสละเว??าครับ
เปลี่ยนเป็น ... where OrderID = " & me.OrderID
-----------------------------------------------------------
เปลี่ยนแล้วครับอาจารย์ ไม่Errorแล้วครับ แต่ฟิล์ดไม่มีการเปลี่ยนแปลงเลยครับ ผมไม่ได้ให้ไฟล์ดอาจารย์ไปดู เลยอาจไม่ตรงกับที่ต้องการน่ะครับ ต้องขอโทษด้วยครับ
ตอนนี้ผมเอาโค๊ตของอาจารย์ไป เปลี่ยนดังนี้ครับ คือ มีลักษณะว่า ผมไปสร้าง TxtBadBill เอาไว้ก่อน แล้วพอผมกดปุ่มแล้ว ถ้ากดYes จะไปเปลี่ยนฟิล์ดOrderBuildของฟอร์มหลัก แล้วจึงRequeryทั้งฟอร์มผ่านQueryชื่อQCHOrder_Out_Hd_Cc_ExVอีกทีครับ
โค๊ตที่เปลี่ยนแปลงจากอาจารย์คือ
Private Sub Command208_Click()
If MsgBox("ท่านแน่ใจหรือว่า ต้องการยกเลิกบิลนี้ ให้เป็นบิลเสีย", vbQuestion + vbYesNo) = vbYes Then
Me.OrderBuild = TxtBadBill
On Error GoTo PersonID_AfterUpdate_Err
DoCmd.SetWarnings False
DoCmd.OpenQuery "QCHOrder_Out_Hd_Cc_ExV", acViewNormal, acEdit
PersonID_AfterUpdate_Exit:
Exit Sub
PersonID_AfterUpdate_Err:
MsgBox Error$
Resume PersonID_AfterUpdate_Exit
Exit Sub
End If
Me.Refresh
End Sub
ที่ให้รายละเอียดตรงนี้ เผื่อว่า เป็นไปได้ในแนวทางไหนบ้างเท่านั้นน่ะครับ เพราะโค๊ตน่าจะบอกอะไรได้ในส่วนหนึ่งน่ะครับ
ขอบคุณครับอาจารย์สันติสุขมากๆเลยครับ ที่เสียสละเว??าครับ
6 @R04266
ยิ่งบอก ยิ่งงง ยิ่งไม่เข้าใจเลย
แน่ใจนะว่าคุณไม่ลืมบรรทัด dbengine.committrans dbForceOSFlush เพราะถ้าลืมบรรทัดนี้ ค่าจะไม่เปลี่ยนแปลง หรือไม่ก็ ตัดออกทั้งบบรรทัด dbengine.begintrans และ dbengine.committrans dbForceOSFlush ออกไปก่อน แล้วทดลองดูครับ
แน่ใจนะว่าคุณไม่ลืมบรรทัด dbengine.committrans dbForceOSFlush เพราะถ้าลืมบรรทัดนี้ ค่าจะไม่เปลี่ยนแปลง หรือไม่ก็ ตัดออกทั้งบบรรทัด dbengine.begintrans และ dbengine.committrans dbForceOSFlush ออกไปก่อน แล้วทดลองดูครับ
7 @R04267
เย๋!!! ได้แล้วครับ อาจารย์ครับ
อตนนี้ใช้โค๊ตแบบนี้ครับ
Private Sub Command209_Click()
Dim db As dao.Database
If MsgBox("ท่านแน่ใจว่าต้องการยกเลิกรายการนี้เป็นบิลเสีย", vbQuestion + vbYesNo) = vbNo Then
Exit Sub
End If
DBEngine.BeginTrans
Set db = CurrentDb()
' ถ้า OrderID ไม่ใช่ฟิลด์เดียวที่เป็น PrimaryKey ของ TbOrder โค้ดข้างล่างก็ต้องปรับแก้ให้ส่วนของ Where clause ครอบคลุมทุกฟิลด์ที่เป็น PrimaryKey ด้วย
db.Execute "update TbOrderDetail set OrderBuild = 'ºÔÅàÊÕÂ' where OrderID = " & Me.OrderID
db.Execute "update TbOrder set OrderBuild = 'ºÔÅàÊÕÂ' where OrderID = " & Me.OrderID
DBEngine.CommitTrans dbForceOSFlush
Me.Refresh
End Sub
ตอนแรกผมลองแล้วมันไม่เปลี่ยนน่ะครับ ถ้าเขียนๆอยู่แล้วใช้เลย พอปิดแล้วเปิดใหม่ ก็ใช้ได้แล้วครับ
ผมเลยลองเปลี่ยนไปเปลี่ยนมา ระหว่างบิลดีบิลเสีย (ซึ่งจริงๆแล้วไม่ได้ทำให้เปลี่ยนได้ เพียงแต่ทดลองในตอนนี้เท่านั้นครับ) ปรากฏว่าบางทีก็ได้บ้าง ไม่ได้บ้าง และบางครั้ง ฟ้อง Error ที่ Me.Refresh แต่ไม่เป็นปัญหาครับ เพราะผมเปิดให้แก้ไขเพียงครั้งเดียว แล้วก็จะหายไปแล้วครับ
ผมว่าน่าจะสามารถ นำไปแปลงไปใช้อย่างอื่นได้อีกครับ เดี่ยวลองเล่ดูก่อนครับ
ขอบพระคุณอย่างสูงครับผม
อตนนี้ใช้โค๊ตแบบนี้ครับ
Private Sub Command209_Click()
Dim db As dao.Database
If MsgBox("ท่านแน่ใจว่าต้องการยกเลิกรายการนี้เป็นบิลเสีย", vbQuestion + vbYesNo) = vbNo Then
Exit Sub
End If
DBEngine.BeginTrans
Set db = CurrentDb()
' ถ้า OrderID ไม่ใช่ฟิลด์เดียวที่เป็น PrimaryKey ของ TbOrder โค้ดข้างล่างก็ต้องปรับแก้ให้ส่วนของ Where clause ครอบคลุมทุกฟิลด์ที่เป็น PrimaryKey ด้วย
db.Execute "update TbOrderDetail set OrderBuild = 'ºÔÅàÊÕÂ' where OrderID = " & Me.OrderID
db.Execute "update TbOrder set OrderBuild = 'ºÔÅàÊÕÂ' where OrderID = " & Me.OrderID
DBEngine.CommitTrans dbForceOSFlush
Me.Refresh
End Sub
ตอนแรกผมลองแล้วมันไม่เปลี่ยนน่ะครับ ถ้าเขียนๆอยู่แล้วใช้เลย พอปิดแล้วเปิดใหม่ ก็ใช้ได้แล้วครับ
ผมเลยลองเปลี่ยนไปเปลี่ยนมา ระหว่างบิลดีบิลเสีย (ซึ่งจริงๆแล้วไม่ได้ทำให้เปลี่ยนได้ เพียงแต่ทดลองในตอนนี้เท่านั้นครับ) ปรากฏว่าบางทีก็ได้บ้าง ไม่ได้บ้าง และบางครั้ง ฟ้อง Error ที่ Me.Refresh แต่ไม่เป็นปัญหาครับ เพราะผมเปิดให้แก้ไขเพียงครั้งเดียว แล้วก็จะหายไปแล้วครับ
ผมว่าน่าจะสามารถ นำไปแปลงไปใช้อย่างอื่นได้อีกครับ เดี่ยวลองเล่ดูก่อนครับ
ขอบพระคุณอย่างสูงครับผม
Time: 0.4125s
if msgbox("ท่านแน่ใจ...", vbQuestion + vbYesNo) = vbNo then
exit sub
end if
dbengine.begintrans
set db = currentdb( )
' ถ้า OrderID ไม่ใช่ฟิลด์เดียวที่เป็น PrimaryKey ของ TbOrder โค้ดข้างล่างก็ต้องปรับแก้ให้ส่วนของ Where clause ครอบคลุมทุกฟิลด์ที่เป็น PrimaryKey ด้วย
db.execute "update TbOrderDetail set OrderBuild = 'บิลเสีย' where OrderID = '" & me.OrderID & "' "
db.execute "update TbOrder set OrderBuild = 'บิลเสีย' where OrderID = '" & me.OrderID & "' "
dbengine.committrans dbForceOSFlush
me.refresh