กระทู้เก่าบอร์ด อ.Yeadram
4,321 16
URL.หัวข้อ /
URL
รบกวนถามเรื่อง เปลี่ยนข้อความในฟิล์ดครับ
ใกล้ๆจะสมหวังแล้วครับอาจารย์ แหะๆ
คือผมต้องการถามว่า
ผมจะเปลี่ยนข้อความที่เคpลงไปว่า"เงินเชื่อ" ในฟิล์ดOrderType ไปเป็น"เงินสด" ได้อย่างไรในคลิ๊กเดียวครับ
โดยผมได้กรองโดยQuery ให้เป็นไป OrderTypeคือเงินเชื่อ, PersonIDคือใคร, OutOrderDateคือระหว่างวันที่เท่าไร จนได้ OrderIDที่ต้องการ และนำแสดงในฟอร์มที่จะใส่ปุ่ม เพื่อคลิ๊กแล้วเปลี่ยนข้อความ โดยมีรายละเอียดดังนี้
เทเบิ้ลมี ฟอร์มหลักชื่อ TbOrder
เทเบิ้ล ฟอร์มย่อยชื่อ TbOrderDetail
ทั้ง2เทเบิ้ล จะมีฟิล์ดชื่อ OrderType ที่มีการใส่ข้อความจากComboBox 3รายการคือ เงินเชื่อ, เงินสด, บัตรเครดิต
จากเทเบิ้ลดังกล่าว เมื่อผมแสดงฟอร์มหลักชื่อ FmOrder_Out_Hd_CashW2Cash_P_BDt จากการกรองข้างต้นแล้ว จะได้OrderID ที่ต้องการเปลี่ยน??ิล์ด OrderType มาแสดง
ผมต้องการสร้างปุ่มเมื่อกดแล้ว จะทำให้ OrderId ที่มีฟิล์ดOrderTypeเป็น "เงินเชื่อ" เปลี่ยนเป็น"เงินสด" ได้ด้วยโค๊ตไหนครับ
หากขาดรายละเอียดอื่นใด ผมจะมาเพิ่มเติมอีกครับ
ขอบคุณครับอาจารย์
คือผมต้องการถามว่า
ผมจะเปลี่ยนข้อความที่เคpลงไปว่า"เงินเชื่อ" ในฟิล์ดOrderType ไปเป็น"เงินสด" ได้อย่างไรในคลิ๊กเดียวครับ
โดยผมได้กรองโดยQuery ให้เป็นไป OrderTypeคือเงินเชื่อ, PersonIDคือใคร, OutOrderDateคือระหว่างวันที่เท่าไร จนได้ OrderIDที่ต้องการ และนำแสดงในฟอร์มที่จะใส่ปุ่ม เพื่อคลิ๊กแล้วเปลี่ยนข้อความ โดยมีรายละเอียดดังนี้
เทเบิ้ลมี ฟอร์มหลักชื่อ TbOrder
เทเบิ้ล ฟอร์มย่อยชื่อ TbOrderDetail
ทั้ง2เทเบิ้ล จะมีฟิล์ดชื่อ OrderType ที่มีการใส่ข้อความจากComboBox 3รายการคือ เงินเชื่อ, เงินสด, บัตรเครดิต
จากเทเบิ้ลดังกล่าว เมื่อผมแสดงฟอร์มหลักชื่อ FmOrder_Out_Hd_CashW2Cash_P_BDt จากการกรองข้างต้นแล้ว จะได้OrderID ที่ต้องการเปลี่ยน??ิล์ด OrderType มาแสดง
ผมต้องการสร้างปุ่มเมื่อกดแล้ว จะทำให้ OrderId ที่มีฟิล์ดOrderTypeเป็น "เงินเชื่อ" เปลี่ยนเป็น"เงินสด" ได้ด้วยโค๊ตไหนครับ
หากขาดรายละเอียดอื่นใด ผมจะมาเพิ่มเติมอีกครับ
ขอบคุณครับอาจารย์
16 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R04526
ก็สั่ง CurrentDB.Execute "UPDATE TbOrder SET OrderType = ค่าอะไรก็ว่าไป WHERE เงื่อนไข" และ CurrentDB.Execute "UPDATE TbOrderDetail SET OrderType = ค่าอะไรก็ว่าไป WHERE เงื่อนไข" เท่านั้นเองครับ
3 @R04527
ผมใช้โค๊ตนี้แล้ว ทำไม่ขึ้นตัวแดงที่บรรทัด CurrentDB.Excute ทุกทีเลยครับ ไม่ทราบผมใส่ผิดตรงไหนหรือเปล่าครับ
Private Sub Command488_Click()
Beep
db.Execute "update TbOrderDetail set Ordertype = 'เงินสด' where OrderID = " & Me.OrderID
db.Execute "update TbOrde set Ordertype = 'เงินสด' where OrderID = " & Me.OrderID
Me.Refresh
End Sub
และถ้าลองอีกแบบ โดยสร้างฟิล์ดใหม่ขึ้นมาในฟอร์ม ชื่อ txtCash ให้มีค่าเป็น เงินสด ผมต้องเขียนโค๊ตแบบนี้หรือเปล่าครับ เพราะมันก็Errorเหมือนกันครับ(โค๊ตด้านล่างที่ใช้ แต่โค๊ตนี้Errorตั้งแต่เขียนโค๊ตเลยครับ มันขึ้นสีแดงทั้งแถวขณะเขียน)
Private Sub Command488_Click()
Beep
CurrentDb.Execute "Update TbOrder Set OrderType = " & Me.txtCash Where OrderID = " & Me.OrderID
CurrentDb.Execute "Update TbOrderDetail Set OrderType = " & Me.txtCash Where OrderID = " & Me.OrderID
Me.Refresh
End Sub
ไม่ทราบว่าต้องแก้ไขอย่างไรครับ หรือผมเขียนอักขระผิดครับ
Private Sub Command488_Click()
Beep
db.Execute "update TbOrderDetail set Ordertype = 'เงินสด' where OrderID = " & Me.OrderID
db.Execute "update TbOrde set Ordertype = 'เงินสด' where OrderID = " & Me.OrderID
Me.Refresh
End Sub
และถ้าลองอีกแบบ โดยสร้างฟิล์ดใหม่ขึ้นมาในฟอร์ม ชื่อ txtCash ให้มีค่าเป็น เงินสด ผมต้องเขียนโค๊ตแบบนี้หรือเปล่าครับ เพราะมันก็Errorเหมือนกันครับ(โค๊ตด้านล่างที่ใช้ แต่โค๊ตนี้Errorตั้งแต่เขียนโค๊ตเลยครับ มันขึ้นสีแดงทั้งแถวขณะเขียน)
Private Sub Command488_Click()
Beep
CurrentDb.Execute "Update TbOrder Set OrderType = " & Me.txtCash Where OrderID = " & Me.OrderID
CurrentDb.Execute "Update TbOrderDetail Set OrderType = " & Me.txtCash Where OrderID = " & Me.OrderID
Me.Refresh
End Sub
ไม่ทราบว่าต้องแก้ไขอย่างไรครับ หรือผมเขียนอักขระผิดครับ
4 @R04528
โค้ดชุดบน คุณใช้ db ไม่ใช่ CurrentDB มันก็ต้อง error แน่ๆครับ เพราะมันไม่รู้จักว่า db คืออะไร
ส่วนโค้ดชุดล่าง แม้ใช้ CurrentDB แต่จำนวน double quote ตกหล่นไป มันก็ error เช่นกัน ที่ถูกมันควรเป็น
CurrentDb.Execute "Update TbOrder Set OrderType = '" & Me.txtCash & "' Where OrderID = " & Me.OrderID
ส่วนโค้ดชุดล่าง แม้ใช้ CurrentDB แต่จำนวน double quote ตกหล่นไป มันก็ error เช่นกัน ที่ถูกมันควรเป็น
CurrentDb.Execute "Update TbOrder Set OrderType = '" & Me.txtCash & "' Where OrderID = " & Me.OrderID
5 @R04530
ขอบคุณครับอาจารย์
ยังไม่ได้เลยครับ ผมสงสัยว่า Tools->References->Microsoft Dao 3.6 Object Library (มันไม่ถูกติ๊ก แต่ก็ไม่แน่ใจว่าเกี่ยวกันหรือเปล่า ผมคงต้องตรวจอีกทีครับ)
ขอขอบคุณอาจารย์มากครับ ที่สละเวลามาตอบผมครับ
ยังไม่ได้เลยครับ ผมสงสัยว่า Tools->References->Microsoft Dao 3.6 Object Library (มันไม่ถูกติ๊ก แต่ก็ไม่แน่ใจว่าเกี่ยวกันหรือเปล่า ผมคงต้องตรวจอีกทีครับ)
ขอขอบคุณอาจารย์มากครับ ที่สละเวลามาตอบผมครับ
6 @R04533
เกี่ยวที่สุด
7 @R04535
ตอนนี้ได้แล้วครับ ใช้โค๊ด
Private Sub BOCToCash_Click()
Dim db As dao.Database
'CurrentDb.Execute "Update TbOrderDetail Set OrderType = '" & Me.txtCash & "' Where OrderID = " & Me.OrderID
'CurrentDb.Execute "Update TbOrder Set OrderType = '" & Me.txtCash & "' Where OrderID = " & Me.OrderID
If MsgBox("¤Ø³µéͧ¡ÒÃà»ÅÕè¹à»ç¹ºÔÅà§Ô¹Ê´ ãªèËÃ×ÍäÁè", vbQuestion + vbYesNo) = vbNo Then
Exit Sub
End If
DBEngine.BeginTrans
Set db = CurrentDb()
db.Execute "update TbOrderDetail set OrderType = 'à§Ô¹Ê´' where ID = " & Me.ID
db.Execute "update TbOrder set OrderType = 'à§Ô¹Ê´' where ID = " & Me.ID
DBEngine.CommitTrans dbForceOSFlush
Me.Refresh
End Sub
********แต่ว่าตอนนี้ มันเปลี่ยนเฉพาะ ID ที่เป็น Primary ที่ Focusอยู่ขณะนั้นครับ
ไม่ทราบว่า หากผมต้องการเปลี่ยนทั้งหมด ที่กรองมาได้นั้นซึ่งมีหลายID ต้องเพิ่มเติมอย่างไรครับ
Private Sub BOCToCash_Click()
Dim db As dao.Database
'CurrentDb.Execute "Update TbOrderDetail Set OrderType = '" & Me.txtCash & "' Where OrderID = " & Me.OrderID
'CurrentDb.Execute "Update TbOrder Set OrderType = '" & Me.txtCash & "' Where OrderID = " & Me.OrderID
If MsgBox("¤Ø³µéͧ¡ÒÃà»ÅÕè¹à»ç¹ºÔÅà§Ô¹Ê´ ãªèËÃ×ÍäÁè", vbQuestion + vbYesNo) = vbNo Then
Exit Sub
End If
DBEngine.BeginTrans
Set db = CurrentDb()
db.Execute "update TbOrderDetail set OrderType = 'à§Ô¹Ê´' where ID = " & Me.ID
db.Execute "update TbOrder set OrderType = 'à§Ô¹Ê´' where ID = " & Me.ID
DBEngine.CommitTrans dbForceOSFlush
Me.Refresh
End Sub
********แต่ว่าตอนนี้ มันเปลี่ยนเฉพาะ ID ที่เป็น Primary ที่ Focusอยู่ขณะนั้นครับ
ไม่ทราบว่า หากผมต้องการเปลี่ยนทั้งหมด ที่กรองมาได้นั้นซึ่งมีหลายID ต้องเพิ่มเติมอย่างไรครับ
8 @R04536
ก็ต้องใช้ WHERE clause ให้เหมือนกับในคิวรี่ นั่นคือมีเงื่อนไขทั้ง OrderType, PersonID และ OutOrderDate ไม่ใช่ใช้ WHERE clause ที่ไปอ้างอิงกับ Me.ID
9 @R04537
รบกวน ขอตัวอย่างสักหน่อยนะครับอาจารย์ ผมหาแบบนี้ยังไม่เจอเลยครับ
ขอบคุณครับ
ขอบคุณครับ
10 @R04538
หลักๆก็คือ CurrentDb.Execute "Update TbOrder Set OrderType = 'เงินสด' Where (OrderType = 'เงินเชื่อ') And (PersonID = ใครก็ว่าไป) And (OutOrderDate = วันไหนก็ว่าไป)"
11 @R04539
สวัสดีปีใหม่ ขอให้ อาจารย์สันติสุข และอาจารย์สุภาพ และเพื่อนร่วมบอร์ด มีความสุขมากๆ รับเงินจนล้นมือกันถ้วนทั่วนะครับ
12 @R04540
รบกวนถามอีกนิดนึงครับ ใกล้ๆแล้วครับ
ถ้าผมต้องการ ให้ถ้ามัน=ฟิล์ดที่แสดงจากการกรองมาแสดง เช่น ให้OrderType=OrderType และ PersonID=PersonID และ OutOrderDate=OutOrderDate ในขณะนั้นเลย ต้องเว้นหรือใส่อักขระอย่างไรให้ถูกต้องครับ ผมลองเขียนแบบนี้ที่ว่าน่าจะได้ แต่ก็ไม่ได้
CurrentDb.Execute "Update TbOrder Set OrderType = 'OrderType' Where (OrderType = 'OrderType') And (PersonID = 'PersonID') And (OutOrderDate = 'OutOrderDate')"
ไม่ทราบว่าต้องแก้ไขอย่างไรครับ
ขอบคุณครับ
ถ้าผมต้องการ ให้ถ้ามัน=ฟิล์ดที่แสดงจากการกรองมาแสดง เช่น ให้OrderType=OrderType และ PersonID=PersonID และ OutOrderDate=OutOrderDate ในขณะนั้นเลย ต้องเว้นหรือใส่อักขระอย่างไรให้ถูกต้องครับ ผมลองเขียนแบบนี้ที่ว่าน่าจะได้ แต่ก็ไม่ได้
CurrentDb.Execute "Update TbOrder Set OrderType = 'OrderType' Where (OrderType = 'OrderType') And (PersonID = 'PersonID') And (OutOrderDate = 'OutOrderDate')"
ไม่ทราบว่าต้องแก้ไขอย่างไรครับ
ขอบคุณครับ
13 @R04541
ผมไม่แน่ใจว่าคุณมีพื้นฐานแค่ไหนนะครับ จาก SQL Statement ก่อนหน้าที่คุณเขียนมา ก็ดูเหมือนคุณจะเข้าใจในการสร้าง SQL Statement แต่พอมาเจอที่คุณเขียนในคำตอบหลังสุดอีกครั้ง ก็เหมือนว่าคุณกลับไม่เข้าใจซะงั้น ?!?
ก็ขออธิบายว่า SQL Statement นั้นต้องการเป็น String Expression ที่จะส่งคำสั่งไปให้ DAO จัดการ ซึ่ง DAO จะรู้จักแต่ชื่อฟิลด์, ชื่อเทเบิล, ชื่อฟังก์ชั่น และค่าคงที่ (ย้ำตัวหนาแล้วนะครับ)
แต่อย่างที่คุณเขียน Where (OrderType = 'OrderType') มันคือค่าคงที่ประเภท string ที่มีค่าเป็น 'OrderType' ซึ่งมันไม่ใช่ มันไม่ถูกต้อง ที่เราต้องการคือ Where (OrderType = ค่าอะไรสักค่า) ปัญหาคือ ผมไม่รู้ว่าค่านั้นคืออะไร คุณเอามาจากไหน มันอยู่บนหน้าจอ หรือมันอยู่ที่ไหน ?
ถ้าอยู่ที่ textbox บนหน้าจอ สมมุติว่าชื่อ txtOrderType ก็แล้วกัน คุณก็ต้องสร้างเป็น ...Where (OrderType = '" & Me.txtOrderType ) & "' and ... เห็นไหมครับว่ามันก็คล้ายกับที่คุณเขียนมาก่อนหน้า่แล้ว ซึ่งทำให้ผมงงว่า ตกลงแล้วคุณเข้าใจหรือไม่เข้าใจกันแน่
ก็ขออธิบายว่า SQL Statement นั้นต้องการเป็น String Expression ที่จะส่งคำสั่งไปให้ DAO จัดการ ซึ่ง DAO จะรู้จักแต่ชื่อฟิลด์, ชื่อเทเบิล, ชื่อฟังก์ชั่น และค่าคงที่ (ย้ำตัวหนาแล้วนะครับ)
แต่อย่างที่คุณเขียน Where (OrderType = 'OrderType') มันคือค่าคงที่ประเภท string ที่มีค่าเป็น 'OrderType' ซึ่งมันไม่ใช่ มันไม่ถูกต้อง ที่เราต้องการคือ Where (OrderType = ค่าอะไรสักค่า) ปัญหาคือ ผมไม่รู้ว่าค่านั้นคืออะไร คุณเอามาจากไหน มันอยู่บนหน้าจอ หรือมันอยู่ที่ไหน ?
ถ้าอยู่ที่ textbox บนหน้าจอ สมมุติว่าชื่อ txtOrderType ก็แล้วกัน คุณก็ต้องสร้างเป็น ...Where (OrderType = '" & Me.txtOrderType ) & "' and ... เห็นไหมครับว่ามันก็คล้ายกับที่คุณเขียนมาก่อนหน้า่แล้ว ซึ่งทำให้ผมงงว่า ตกลงแล้วคุณเข้าใจหรือไม่เข้าใจกันแน่
14 @R04542
ขอบคุณครับอาจารย์ คือพื้นฐานไม่ค่อยมีเลยครับ ใช้วิธีศึกษาจากตัวอย่าง แล้วค่อยๆแกะเอาอ่ะครับ เลยดูได้บ้าง ไม่ได้บ้าง
คือ เวลามีคำว่า And เข้าไปแล้ว ผมไม่เข้าใจว่า ต้องใส่ เครื่องหมายที่ฟิล์ดอื่นๆเพิ่มเข้าไปด้วยหรือเปล่านะครับ เพราะผมหาตัวอย่างที่มี And ไม่เจอเลยครับ ผมไม่รู้ว่าแบบนี้เค้าเรียกว่า วิธีอะไรน่ะครับ ส่วนใหญ่ก็ลองจนกว่าจะได้เอาครับ จากตัวอย่างล่าสุด ก่อนน่านี้ห็ใกล้เครียงที่ผมลอง แต่ไม่ได้ใส่ &ปิดท้าย เดี๋ยวผมลองดูอีกทีครับ
คิดว่าน่าจะเป็น
CurrentDb.Execute "Update TbOrder Set OrderType = 'เงินสด' Where (OrderType = '"OrderType"') And (PersonID = '"PersonID"') And (OutOrderDate = '"OutOrderDate"')"
ขอบคุณมากครับอาจารย์
คือ เวลามีคำว่า And เข้าไปแล้ว ผมไม่เข้าใจว่า ต้องใส่ เครื่องหมายที่ฟิล์ดอื่นๆเพิ่มเข้าไปด้วยหรือเปล่านะครับ เพราะผมหาตัวอย่างที่มี And ไม่เจอเลยครับ ผมไม่รู้ว่าแบบนี้เค้าเรียกว่า วิธีอะไรน่ะครับ ส่วนใหญ่ก็ลองจนกว่าจะได้เอาครับ จากตัวอย่างล่าสุด ก่อนน่านี้ห็ใกล้เครียงที่ผมลอง แต่ไม่ได้ใส่ &ปิดท้าย เดี๋ยวผมลองดูอีกทีครับ
คิดว่าน่าจะเป็น
CurrentDb.Execute "Update TbOrder Set OrderType = 'เงินสด' Where (OrderType = '"OrderType"') And (PersonID = '"PersonID"') And (OutOrderDate = '"OutOrderDate"')"
ขอบคุณมากครับอาจารย์
15 @R04543
เย้!!! ได้แล้วครับอาจารย์
ตอนนี้ใช้แบบนี้แล้วครับ ต้องใช้ Me.Refresh ต่อท้ายอีกที ผมดันเอามันออกตอนแรก ลองเท่าไรก็เหมือนเดิม แต่เอะใจเข้าไปดูในTable เอ๊ะ! มันเปลี่ยนไปแล้ว แต่หน้าฟอร์มไม่เปลี่ยน แล้วก็ถึงบางอ้อแล้วครับ โค๊ตที่ใช้คือ
Private Sub BcCash_Click()
Beep
CurrentDb.Execute "Update TbOrderDetail Set OrderType = 'เงินสด' Where OrderType = '" & Me.OrderType & "' And PersonID = '" & Me.PersonID & "' And OutOrderMonth = '" & Me.OutOrderMonth & "'"
CurrentDb.Execute "Update TbOrder Set OrderType = 'เงินสด' Where OrderType = '" & Me.OrderType & "' And PersonID = '" & Me.PersonID & "' And OutOrderMonth = '" & Me.OutOrderMonth & "'"
Me.Refresh
End Sub
ตอนนี้ใช้แบบนี้แล้วครับ ต้องใช้ Me.Refresh ต่อท้ายอีกที ผมดันเอามันออกตอนแรก ลองเท่าไรก็เหมือนเดิม แต่เอะใจเข้าไปดูในTable เอ๊ะ! มันเปลี่ยนไปแล้ว แต่หน้าฟอร์มไม่เปลี่ยน แล้วก็ถึงบางอ้อแล้วครับ โค๊ตที่ใช้คือ
Private Sub BcCash_Click()
Beep
CurrentDb.Execute "Update TbOrderDetail Set OrderType = 'เงินสด' Where OrderType = '" & Me.OrderType & "' And PersonID = '" & Me.PersonID & "' And OutOrderMonth = '" & Me.OutOrderMonth & "'"
CurrentDb.Execute "Update TbOrder Set OrderType = 'เงินสด' Where OrderType = '" & Me.OrderType & "' And PersonID = '" & Me.PersonID & "' And OutOrderMonth = '" & Me.OutOrderMonth & "'"
Me.Refresh
End Sub
16 @R04544
ขอขอบคุณอาจารย์สันติสุข ที่ช่วยอธิบาย และสละเวลามาช่วยตอบอยู่เสมอมากครับ
Time: 0.3281s
เมื่อเปลี่ยน ให้เปลี่ยนทั้ง TbOrder และ TbOrderDetail เลยนะครับ