กระทู้เก่าบอร์ด อ.Yeadram
2,728 10
URL.หัวข้อ /
URL
รบกวนถามเรื่อง เก็บข้อมูลทั้งหมดครับ
จากการค้นหาที่
http://www.thai-access.com/yeadram_view.php?topic_id=586
ซึ่งผมนำมาใช้แล้ว มันจะทำได้ทีละฟิล์ดที่ เรคคอร์ดในฟอร์ม(FmProduct)ที่โฟกัสอยู่
ภาพที่1.แสดงตัวอย่างที่ทำแล้ว เปลี่ยน1เรคคอร์ด
ภาพที่2.เข้าเปดูในเทเบิ้ลที่ให้เปลี่ยน ถูกเปลี่ยนไปจริง
โค๊ตที่ปุ่มที่ใช้
Dim sql As String
sql = "Update TbProduct Set BringPIS = " & Me.InStock & " where ProductID = '" & Me.ProductID & "';"
CurrentProject.Connection.Execute sql
หากผมต้องการแก้ให้เปลี่ยน หรือปรับปรุงใน Tabelชื่อTbProduct ฟิล์ดBringPIS(สินค้าคงเหลือยกมา)ทั้งหมด ตามProductIDทุกRecord โดยใช้ฟอร์ม หรือวิธีใดๆก็ได้ โปรดแนะนำด้วยนะครับ
-เพิ่มเติม ฟอร์มที่เปิดตามตัวอย่าง เป็นการใช้รวมผลลัพธ์จาก QrOrderDetailครับ คล้ายๆไฟล์ stocktest ที่เคยโฟลกในเว็บนี้ครับ
ขอบคุณครับ
http://www.thai-access.com/yeadram_view.php?topic_id=586
ซึ่งผมนำมาใช้แล้ว มันจะทำได้ทีละฟิล์ดที่ เรคคอร์ดในฟอร์ม(FmProduct)ที่โฟกัสอยู่
ภาพที่1.แสดงตัวอย่างที่ทำแล้ว เปลี่ยน1เรคคอร์ด
ภาพที่2.เข้าเปดูในเทเบิ้ลที่ให้เปลี่ยน ถูกเปลี่ยนไปจริง
โค๊ตที่ปุ่มที่ใช้
Dim sql As String
sql = "Update TbProduct Set BringPIS = " & Me.InStock & " where ProductID = '" & Me.ProductID & "';"
CurrentProject.Connection.Execute sql
หากผมต้องการแก้ให้เปลี่ยน หรือปรับปรุงใน Tabelชื่อTbProduct ฟิล์ดBringPIS(สินค้าคงเหลือยกมา)ทั้งหมด ตามProductIDทุกRecord โดยใช้ฟอร์ม หรือวิธีใดๆก็ได้ โปรดแนะนำด้วยนะครับ
-เพิ่มเติม ฟอร์มที่เปิดตามตัวอย่าง เป็นการใช้รวมผลลัพธ์จาก QrOrderDetailครับ คล้ายๆไฟล์ stocktest ที่เคยโฟลกในเว็บนี้ครับ
ขอบคุณครับ
10 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R04651
ขอบคุณครับผม
ตอนนี้ผมทำแล้ว แต่ปรากฏว่าไม่เปลี่ยนแปลงครับ ไม่ทราบว่าเกี่ยวกับว่า ผมไม่มีชื่อฟิลด์สินค้าขาเข้า และ ชื่อฟิลด์สินค้าขาออก ในTableProductหรือเปล่า เพราะฟอร์มที่แสดงในรูปที่1 ใช้Queryชื่อG_Qr_Product_Show_Stock_All
ซึ่งมีฟิล์ดคำนวนInBQuantity: (select sum(BQuantity) from TbOrderDetail where ProductID = TbProduct.ProductID And OrderBuild = 'บิลดี')
และฟิล์ดคำนวนOutQuantity: (select sum(Quantity) from TbOrderDetail where ProductID = TbProduct.ProductID And OrderBuild = 'บิลดี')
นำมาลบกันแล้วเท่ากับ ฟิล์ดคำนวนInStock: ([InBQuantity]-[OutQuantity])
ซึ่งฟิล์ดดังกล่าวเป็นฟิล์ดที่ดังผลรวมข้อมูลมาลบกันในQueryครับ ส่วนในTableProductไม่มีฟิล์ดเหล่านี้เลยครับ
ตอนนี้ผมใช้แบบนี้ครับ
Update TbProduct Set BringPIS = [InBQuantity] - [OutQuantity];
แล้วสั่งRun ขึ้นParameterตามรูปครับ
รูปที่1
รูปที่2
ผมเลยลองใหม่ ให้ไปดึงจากTbOrderDetailมาครับ
Update TbProduct Set BringPIS = (select sum(BQuantity) from TbOrderDetail where ProductID = TbProduct.ProductID And OrderBuild = 'บิลดี')-(select sum(Quantity) from TbOrderDetail where ProductID = TbProduct.ProductID And OrderBuild = 'บิลดี')
แล้วสั่งRun ขึ้นParameterตามรูปครับ
รูปที่3
ไม่ทราบว่าต้องแก้ไขอย่างไรครับอาจารย์
ตอนนี้ผมทำแล้ว แต่ปรากฏว่าไม่เปลี่ยนแปลงครับ ไม่ทราบว่าเกี่ยวกับว่า ผมไม่มีชื่อฟิลด์สินค้าขาเข้า และ ชื่อฟิลด์สินค้าขาออก ในTableProductหรือเปล่า เพราะฟอร์มที่แสดงในรูปที่1 ใช้Queryชื่อG_Qr_Product_Show_Stock_All
ซึ่งมีฟิล์ดคำนวนInBQuantity: (select sum(BQuantity) from TbOrderDetail where ProductID = TbProduct.ProductID And OrderBuild = 'บิลดี')
และฟิล์ดคำนวนOutQuantity: (select sum(Quantity) from TbOrderDetail where ProductID = TbProduct.ProductID And OrderBuild = 'บิลดี')
นำมาลบกันแล้วเท่ากับ ฟิล์ดคำนวนInStock: ([InBQuantity]-[OutQuantity])
ซึ่งฟิล์ดดังกล่าวเป็นฟิล์ดที่ดังผลรวมข้อมูลมาลบกันในQueryครับ ส่วนในTableProductไม่มีฟิล์ดเหล่านี้เลยครับ
ตอนนี้ผมใช้แบบนี้ครับ
Update TbProduct Set BringPIS = [InBQuantity] - [OutQuantity];
แล้วสั่งRun ขึ้นParameterตามรูปครับ
รูปที่1
รูปที่2
ผมเลยลองใหม่ ให้ไปดึงจากTbOrderDetailมาครับ
Update TbProduct Set BringPIS = (select sum(BQuantity) from TbOrderDetail where ProductID = TbProduct.ProductID And OrderBuild = 'บิลดี')-(select sum(Quantity) from TbOrderDetail where ProductID = TbProduct.ProductID And OrderBuild = 'บิลดี')
แล้วสั่งRun ขึ้นParameterตามรูปครับ
รูปที่3
ไม่ทราบว่าต้องแก้ไขอย่างไรครับอาจารย์
3 @R04657
มันอัพเดตโดยคิวรี่ไม่ได้แล้วละครับ ถ้าเป็นอย่างนี้ เพราะยอดรวมของขาเข้าหรือขาออก มันมาจากคิวรี่ ซึ่งมีการใช้ Group By
คิวรี่ที่มีการใช้ Group by หรือ Having มันจะเป็นคิวรี่ที่ไม่สามารถใช้ Update ได้ครับ ต้องเขียนเป็นฟังก์ชันเอาครับ เขียนไว้ในโมดูล เรียกใช้จากปุ่มคำสั่งหรือจากเมนูที่สร้างเอง
แต่ในเมื่อคุณ BenTen สามารถดูยอดคงเหลือได้จากคิวรี่แล้ว (G_Qr_Product_Show_Stock_All) ผมไม่เห็นความจำเป็นที่จะต้องมีฟิลด์ InStock ในตารางสินค้าอีกนะครับ แต่ก็เอาเถอะในเมื่ออยากสร้างก็ต้องลำบากมาคอย อัพเดตมันละครับ การอัพเดตแต่ละครั้งอาจใช้เวลาพอสมควรนะครับ คุณอาจะตั้งชื่อปุ่มหรือชื่อเมนูว่า "คำนวนยอดสินค้าคงเหลือใหม่"
คิวรี่ที่มีการใช้ Group by หรือ Having มันจะเป็นคิวรี่ที่ไม่สามารถใช้ Update ได้ครับ ต้องเขียนเป็นฟังก์ชันเอาครับ เขียนไว้ในโมดูล เรียกใช้จากปุ่มคำสั่งหรือจากเมนูที่สร้างเอง
แต่ในเมื่อคุณ BenTen สามารถดูยอดคงเหลือได้จากคิวรี่แล้ว (G_Qr_Product_Show_Stock_All) ผมไม่เห็นความจำเป็นที่จะต้องมีฟิลด์ InStock ในตารางสินค้าอีกนะครับ แต่ก็เอาเถอะในเมื่ออยากสร้างก็ต้องลำบากมาคอย อัพเดตมันละครับ การอัพเดตแต่ละครั้งอาจใช้เวลาพอสมควรนะครับ คุณอาจะตั้งชื่อปุ่มหรือชื่อเมนูว่า "คำนวนยอดสินค้าคงเหลือใหม่"
Function UpdateStockOnHand()
dim Rs as new adodb.recordset
dim Conn as new adodb.connection
screen.mousepointer=11
set Conn = Currentproject.connection
Rs.open "G_Qr_Product_Show_Stock_All",conn,1
if rs.eof and rs.bof then goto exx
do while not rs.eof
Conn.execute "Update TbProduct Set BringPIS = " & RS("InBQuantity") - RS("OutQuantity") & " Where tbProduct.ProductID ='" & RS("ProductID") & "';"
rs.movenext
loop
Msgbox "Update Stock Completed"
exx:
if rs.state<>0 then
rs.close
set rs=nothing
set Conn=nothing
end if
Screen.mousepointer=0
End Function
4 @R04659
ขอบคุณมากครับอาจารย์
ผมกำลังคิดว่าอยากจะลองหาวิธี เก็บงานก่อนจะ Backup น่ะครับ
แต่ไม่ทราบว่าจะสามารถทำได้หรือเปล่า จะได้สะดวกตอนเริ่มใช้ใหม่น่ะครับ
เดี๋ยวจะลองทำดูครับ ขอบพระคุณครับ
ผมกำลังคิดว่าอยากจะลองหาวิธี เก็บงานก่อนจะ Backup น่ะครับ
แต่ไม่ทราบว่าจะสามารถทำได้หรือเปล่า จะได้สะดวกตอนเริ่มใช้ใหม่น่ะครับ
เดี๋ยวจะลองทำดูครับ ขอบพระคุณครับ
5 @R04660
รบกวนอีกครั้งครับ
ผมสลับตรงเครื่องหมายฟันหนู และอื่นๆ อยู่นานครับ ไม่ทราบว่าผมพิมพ์ผิดตรงไหนหรือเปล่าครับ มันขึ้นตัวแดงตลอดเลย โดยเฉพาะ Where ครับ
ผมสลับตรงเครื่องหมายฟันหนู และอื่นๆ อยู่นานครับ ไม่ทราบว่าผมพิมพ์ผิดตรงไหนหรือเปล่าครับ มันขึ้นตัวแดงตลอดเลย โดยเฉพาะ Where ครับ
6 @R04665
ผมพิมพ์ผิดไปแต่แรก ครับ แก้ให้แล้วรอบหนึ่ง ลองดูอีกทีหรือยังครับ
7 @R04668
ขอบคุณมากครับ
โค๊ตนี้เป็นฟังชั่น ผมเลยไปเขียนไว่ใน Module ชื่อ Mod_Update_KeepPIS
ไม่ทราบว่าผมต้องเขียน Event Onclickที่ปุ่ม ว่าอย่างไรครับ
หอดีผมลองไปใส่ที่ปุ่มแล้วคลิ๊ก มันยังไม่ได้ครับ แต่ตัวหนังสือไม่แดงแล้วครับ
โค๊ตนี้เป็นฟังชั่น ผมเลยไปเขียนไว่ใน Module ชื่อ Mod_Update_KeepPIS
ไม่ทราบว่าผมต้องเขียน Event Onclickที่ปุ่ม ว่าอย่างไรครับ
หอดีผมลองไปใส่ที่ปุ่มแล้วคลิ๊ก มันยังไม่ได้ครับ แต่ตัวหนังสือไม่แดงแล้วครับ
8 @R04675
ลองไล่ Debug ดูครับ
- เบรคบรรทัดคำสั่ง Screen.Mouse.... ไว้ก่อนก็ดีครับ
- ใต้คำสั่ง Rs.Open... ลองให้มี msgbox เช็คจำนวนเรคคอร์ดว่ามีมาหรือไม่
- ตรวจสอบให้แน่ใจว่า ในคิวรี่ที่ดึงมา (G_Qr_Product_Show_Stock_All) มีฟิลด์ต่อไปนี้หรือไม่; InBQuantity, OutQuantity, ProductID
- ลอง Mark จุดให้โค๊ดมันเบรคตัวเองที่คำสั่ง RS.MoveNext เมื่อสั่งรันแล้ว ดูว่ามันเบรคตรงนั้นหรือไม่
ถ้าไม่ แสดงว่ามันไม่ได้เข้าทำงานในลูป ต้องย้อนเช็คเรื่อง จำนวนรายการในคิวรี่
ถ้ามันเบรค ให้ลองเอาเม้าส์พ้อยเตอร์วางแถวๆ ค่าตัวแปรแต่ละตัว ดูว่า VBA มันขึ้น Tooltips มาเป็นค่าที่ถูกต้องหรือไม่
หาสาเหตุที่แท้จริงให้เจอ แล้วแก้ไปทีละเปลาะครับ
- เบรคบรรทัดคำสั่ง Screen.Mouse.... ไว้ก่อนก็ดีครับ
- ใต้คำสั่ง Rs.Open... ลองให้มี msgbox เช็คจำนวนเรคคอร์ดว่ามีมาหรือไม่
- ตรวจสอบให้แน่ใจว่า ในคิวรี่ที่ดึงมา (G_Qr_Product_Show_Stock_All) มีฟิลด์ต่อไปนี้หรือไม่; InBQuantity, OutQuantity, ProductID
- ลอง Mark จุดให้โค๊ดมันเบรคตัวเองที่คำสั่ง RS.MoveNext เมื่อสั่งรันแล้ว ดูว่ามันเบรคตรงนั้นหรือไม่
ถ้าไม่ แสดงว่ามันไม่ได้เข้าทำงานในลูป ต้องย้อนเช็คเรื่อง จำนวนรายการในคิวรี่
ถ้ามันเบรค ให้ลองเอาเม้าส์พ้อยเตอร์วางแถวๆ ค่าตัวแปรแต่ละตัว ดูว่า VBA มันขึ้น Tooltips มาเป็นค่าที่ถูกต้องหรือไม่
หาสาเหตุที่แท้จริงให้เจอ แล้วแก้ไปทีละเปลาะครับ
9 @R04678
ครับเดี๋ยวผมลองไล่ดูครับ ขอบพระคุณอาจารย์มากครับ ที่สละเวลาเขียนโค๊ตตัวอย่างมาแนะนำครับผม
10 @R04686
ได้แล้วครับอาจารย์
เนื่องจากผมใช้ Access2007 จึงต้องไปเปิดใช้ ActiveXด้วยครับ รูปประมาณนี้ครับ
และโค๊ต
Private Sub Command152_Click()
Beep
On Error Resume Next
Dim Rs As New ADODB.Recordset
Dim Conn As New ADODB.Connection
Screen.MousePointer = 11
Set Conn = CurrentProject.Connection
Rs.Open "Qr_Product_Show_Stock_All", Conn, 1
If Rs.EOF And Rs.BOF Then GoTo exx
Do While Not Rs.EOF
Conn.Execute "Update TbProduct Set BringPIS = " & Rs("InBQuantity") - Rs("OutQuantity") & " Where TbProduct.ProductID ='" & Rs("ProductID") & "';"
Rs.MoveNext
Loop
MsgBox "Update Stock Completed"
exx:
If Rs.state <> 0 Then
Rs.Close
Set Rs = Nothing
Set Conn = Nothing
End If
Screen.MousePointer = 0
End Sub
ขอบพระคูรอาจารย์อีกครั้งครับ :-)
เนื่องจากผมใช้ Access2007 จึงต้องไปเปิดใช้ ActiveXด้วยครับ รูปประมาณนี้ครับ
และโค๊ต
Private Sub Command152_Click()
Beep
On Error Resume Next
Dim Rs As New ADODB.Recordset
Dim Conn As New ADODB.Connection
Screen.MousePointer = 11
Set Conn = CurrentProject.Connection
Rs.Open "Qr_Product_Show_Stock_All", Conn, 1
If Rs.EOF And Rs.BOF Then GoTo exx
Do While Not Rs.EOF
Conn.Execute "Update TbProduct Set BringPIS = " & Rs("InBQuantity") - Rs("OutQuantity") & " Where TbProduct.ProductID ='" & Rs("ProductID") & "';"
Rs.MoveNext
Loop
MsgBox "Update Stock Completed"
exx:
If Rs.state <> 0 Then
Rs.Close
Set Rs = Nothing
Set Conn = Nothing
End If
Screen.MousePointer = 0
End Sub
ขอบพระคูรอาจารย์อีกครั้งครับ :-)
Time: 0.3418s
ในคิวรี่อันใหม่ก็เขียนประมาณนีครับ แล้วสั่งรันได้เลย
Update TbProduct Set BringPIS = [ชื่อฟิลด์สินค้าขาเข้า] - [ชื่อฟิลด์สินค้าขาออก];