กระทู้เก่าบอร์ด อ.Yeadram
6,870 9
URL.หัวข้อ /
URL
ช่วยดูCode ตัด Stock ให้หน่อยค่ะ
คือว่าต้องการเขียน Code ตัด Stock นะค่ะ อันนี้คือ Code ที่เขียนนะค่ะ
Dim a As Integer
Dim b As Integer
Dim s As Integer
a = [Forms]![CC-StockRemove].[Form]![qty]
b = [inv_products]![qty]
If a > b Then
If MsgBox("Stock Over", vbOKOnly, "StockOver") = vbOK Then
a = [Forms]![CC-StockRemove].[Form]![qty]
a = [Forms]![CC-StockRemove].qty
Else
s = b - a
[inv_products]![qty] = s
End If
/////////////////////////////////////////////////
****[cc-stockremove] คือหน้าฟอร์มที่กรอกข้อมูล
****[inv_products] คือตารางเก็บข้อมูลจำนวนสินค้านะค่ะ
//////////////////////////////////////////////////
มันติดตรงที่ว่า text box [qty] มันเป็น ฟอร์มย่อยที่ดึงมาจากหน้า inv_stockremove ตอนนี้ก็เลยงงว่าจะทำยังไงแถมCodeที่เขียนก็ผิดอีกค่ะ จะแก้ยังไงค่ะช่วยด้วยค่ะ
Dim a As Integer
Dim b As Integer
Dim s As Integer
a = [Forms]![CC-StockRemove].[Form]![qty]
b = [inv_products]![qty]
If a > b Then
If MsgBox("Stock Over", vbOKOnly, "StockOver") = vbOK Then
a = [Forms]![CC-StockRemove].[Form]![qty]
a = [Forms]![CC-StockRemove].qty
Else
s = b - a
[inv_products]![qty] = s
End If
/////////////////////////////////////////////////
****[cc-stockremove] คือหน้าฟอร์มที่กรอกข้อมูล
****[inv_products] คือตารางเก็บข้อมูลจำนวนสินค้านะค่ะ
//////////////////////////////////////////////////
มันติดตรงที่ว่า text box [qty] มันเป็น ฟอร์มย่อยที่ดึงมาจากหน้า inv_stockremove ตอนนี้ก็เลยงงว่าจะทำยังไงแถมCodeที่เขียนก็ผิดอีกค่ะ จะแก้ยังไงค่ะช่วยด้วยค่ะ
9 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R02609
Dim a As Integer
Dim b As Integer
Dim s As Integer
a = [Forms]![CC-StockRemove].[Form]![qty]
b = [inv_products]![qty]
If a > b Then
MsgBox("Stock Over", vbOKOnly, "StockOver") = vbOK Then
a = [Forms]![CC-StockRemove].[Form]![qty]
a = [Forms]![CC-StockRemove].qty
Else
s = b - a
[inv_products]![qty] = s
End If
//////////
***Code เขียนไว้ที่ cc-stockremove
***qty คือฟิลด์ที่เก็บจำนวนสินค้าใน Stock ของตาราง inv_products
***ค่าของ b ก็คือค่าของจำนวนสินค้าใน Stock ของตาราง inv_products
***ค่าของ a ก็คือจำนวนสินค้าที่เรากรอกในหน้าฟอร์มที่มี Textbox ชื่อ qty และดึง control source [qty]
***[qty] เป็น control ที่อยู่ในฟอร์มย่อย ชื่อ inv_Stockremove
Dim b As Integer
Dim s As Integer
a = [Forms]![CC-StockRemove].[Form]![qty]
b = [inv_products]![qty]
If a > b Then
MsgBox("Stock Over", vbOKOnly, "StockOver") = vbOK Then
a = [Forms]![CC-StockRemove].[Form]![qty]
a = [Forms]![CC-StockRemove].qty
Else
s = b - a
[inv_products]![qty] = s
End If
//////////
***Code เขียนไว้ที่ cc-stockremove
***qty คือฟิลด์ที่เก็บจำนวนสินค้าใน Stock ของตาราง inv_products
***ค่าของ b ก็คือค่าของจำนวนสินค้าใน Stock ของตาราง inv_products
***ค่าของ a ก็คือจำนวนสินค้าที่เรากรอกในหน้าฟอร์มที่มี Textbox ชื่อ qty และดึง control source [qty]
***[qty] เป็น control ที่อยู่ในฟอร์มย่อย ชื่อ inv_Stockremove
3 @R02610
////////แก้ไข Code นิดหน่อยค่ะ ผิดพลาด
Dim a As Integer
Dim b As Integer
Dim s As Integer
a = [Forms]![CC-StockRemove].[Form]![qty]
b = [inv_products]![qty]
If a > b Then
MsgBox("Stock Over", vbOKOnly, "StockOver") = vbOK Then
a = [Forms]![CC-StockRemove].[Form]![qty]
Else
s = b - a
[inv_products]![qty] = s
End If
//////////
***Code เขียนไว้ที่ cc-stockremove
***qty คือฟิลด์ที่เก็บจำนวนสินค้าใน Stock ของตาราง inv_products
***ค่าของ b ก็คือค่าของจำนวนสินค้าใน Stock ของตาราง inv_products
***ค่าของ a ก็คือจำนวนสินค้าที่เรากรอกในหน้าฟอร์มที่มี Textbox ชื่อ qty และดึง control source [qty]
***[qty] เป็น control ที่อยู่ในฟอร์มย่อย ชื่อ inv_Stockremove
Dim a As Integer
Dim b As Integer
Dim s As Integer
a = [Forms]![CC-StockRemove].[Form]![qty]
b = [inv_products]![qty]
If a > b Then
MsgBox("Stock Over", vbOKOnly, "StockOver") = vbOK Then
a = [Forms]![CC-StockRemove].[Form]![qty]
Else
s = b - a
[inv_products]![qty] = s
End If
//////////
***Code เขียนไว้ที่ cc-stockremove
***qty คือฟิลด์ที่เก็บจำนวนสินค้าใน Stock ของตาราง inv_products
***ค่าของ b ก็คือค่าของจำนวนสินค้าใน Stock ของตาราง inv_products
***ค่าของ a ก็คือจำนวนสินค้าที่เรากรอกในหน้าฟอร์มที่มี Textbox ชื่อ qty และดึง control source [qty]
***[qty] เป็น control ที่อยู่ในฟอร์มย่อย ชื่อ inv_Stockremove
4 @R02614
ถามอีกครับ
- ตาราง inv_products มีกี่เรคคอร์ด ค่าของ b จะเป็นค่าของ เรคคอร์ดใด หรือเรคคอร์ดที่เท่าไหร่
- บรรทัดคำสั่งนี้เขียนขึ้นมาเพื่อจะตรวจสอบอะไรครับ
MsgBox("Stock Over", vbOKOnly, "StockOver") = vbOK Then
ก่อนบรรทัดนี้ มี Then แล้ว มาบรรทัดนี้มี Then อีกมันผิดแน่ๆ ครับ
คำว่าตัดสต็อกหมายถึง......
มีของเก่าอยู่แล้ว 100 (ค่านี้เก็บในตาราง)
เราบันทึกขายไป 5 ชิ้น (ค่านั้นบันทึกในฟอร์ม)
เราก็ทำการปรับปรุงข้อมูลในตารางให้เหลือ 95 โดยใช้ 100 - 5 (เอาค่าในตารางตั้ง ลบด้วยค่าในฟอร์ม)
....ใช่หรือเปล่าครับ
แต่ที่คุณเขียนมา ไม่เห็นมีเครื่องหมายลบเลยครับ หรือเครื่องหมายบวกก็ไม่มี คำว่าตัดสต็อกของคุณ มีความหมายเป็นอย่างอื่นหรือเปล่า หรือใช้คำผิดครับ
- ตาราง inv_products มีกี่เรคคอร์ด ค่าของ b จะเป็นค่าของ เรคคอร์ดใด หรือเรคคอร์ดที่เท่าไหร่
- บรรทัดคำสั่งนี้เขียนขึ้นมาเพื่อจะตรวจสอบอะไรครับ
MsgBox("Stock Over", vbOKOnly, "StockOver") = vbOK Then
ก่อนบรรทัดนี้ มี Then แล้ว มาบรรทัดนี้มี Then อีกมันผิดแน่ๆ ครับ
คำว่าตัดสต็อกหมายถึง......
มีของเก่าอยู่แล้ว 100 (ค่านี้เก็บในตาราง)
เราบันทึกขายไป 5 ชิ้น (ค่านั้นบันทึกในฟอร์ม)
เราก็ทำการปรับปรุงข้อมูลในตารางให้เหลือ 95 โดยใช้ 100 - 5 (เอาค่าในตารางตั้ง ลบด้วยค่าในฟอร์ม)
....ใช่หรือเปล่าครับ
แต่ที่คุณเขียนมา ไม่เห็นมีเครื่องหมายลบเลยครับ หรือเครื่องหมายบวกก็ไม่มี คำว่าตัดสต็อกของคุณ มีความหมายเป็นอย่างอื่นหรือเปล่า หรือใช้คำผิดครับ
5 @R02616
ตาราง inv_products มี 24 เรคคอร์ด
- ค่าของ b จะเป็นค่าของ เรคคอร์ด [qty] ในตาราง inv_products เก็บจำนวนสินค้าคงเหลือ
- MsgBox("Stock Over", vbOKOnly, "StockOver") = vbOK ไม่มีThen ค่ะ
อันนี้จะให้โชว์ ข้อความว่าจำนวนที่ซื้อเกินจำนวนในสต๊อกค่ะ แล้วให้แทนค่า a จากตาราง inv_products เรคคอร์ด [qty] แต่เขียนไม่ค่อยจะถูกนะค่ะ
- ใช่ตัดสต็อกค่ะ s = b - a /// ตัวแปร s เก็บค่าของ b-a
ปล.ถ้ามั่วไปก็ขออภัยด้วยนะค่ะ รู้น้อยไปเยอะ!!!
ปล.2 รบกวนช่วยอธิบายอันนี้หน่อยนะค่ะ
sql ="Update tblProducts Set จำนวนในคลัง = จำนวนในคลัง เครื่องหมายตัวกระทำ " & [อ้างอิงลงไปตามลำดับขั้นจนกว่าจะถึง คอนโทรลทีแสดงจำนวนการซื้อ] & " where รหัสสินค้า(ชื่อฟิลด์จริงในตาราง) = '" & [อ้างอิงลงไปตามลำดับขั้นจนกว่าจะถึง คอนโทรลทีแสดงรหัสสินค้าที่ต้องการอัพเดต] & "';"
อยากทราบว่า [อ้างอิงลงไปตามลำดับขั้นจนกว่าจะถึงคอนโทรลที่แสดงจำนวนการซื้อ] มันลำดับขั้นยังไงค่ะ ??????
- ค่าของ b จะเป็นค่าของ เรคคอร์ด [qty] ในตาราง inv_products เก็บจำนวนสินค้าคงเหลือ
- MsgBox("Stock Over", vbOKOnly, "StockOver") = vbOK ไม่มีThen ค่ะ
อันนี้จะให้โชว์ ข้อความว่าจำนวนที่ซื้อเกินจำนวนในสต๊อกค่ะ แล้วให้แทนค่า a จากตาราง inv_products เรคคอร์ด [qty] แต่เขียนไม่ค่อยจะถูกนะค่ะ
- ใช่ตัดสต็อกค่ะ s = b - a /// ตัวแปร s เก็บค่าของ b-a
ปล.ถ้ามั่วไปก็ขออภัยด้วยนะค่ะ รู้น้อยไปเยอะ!!!
ปล.2 รบกวนช่วยอธิบายอันนี้หน่อยนะค่ะ
sql ="Update tblProducts Set จำนวนในคลัง = จำนวนในคลัง เครื่องหมายตัวกระทำ " & [อ้างอิงลงไปตามลำดับขั้นจนกว่าจะถึง คอนโทรลทีแสดงจำนวนการซื้อ] & " where รหัสสินค้า(ชื่อฟิลด์จริงในตาราง) = '" & [อ้างอิงลงไปตามลำดับขั้นจนกว่าจะถึง คอนโทรลทีแสดงรหัสสินค้าที่ต้องการอัพเดต] & "';"
อยากทราบว่า [อ้างอิงลงไปตามลำดับขั้นจนกว่าจะถึงคอนโทรลที่แสดงจำนวนการซื้อ] มันลำดับขั้นยังไงค่ะ ??????
6 @R02617
Dim a As Integer
Dim b As Integer
Dim s As Integer
'***ค่าของ a ก็คือจำนวนสินค้าที่เรากรอกในหน้าฟอร์มที่มี Textbox ชื่อ qty และดึง control source [qty]
'***[qty] เป็น control ที่อยู่ในฟอร์มย่อย ชื่อ inv_Stockremove
'***อยากทราบว่า [อ้างอิงลงไปตามลำดับขั้นจนกว่าจะถึงคอนโทรลที่แสดงจำนวนการซื้อ] มันลำดับขั้นยังไงค่ะ ??????
a = cint(me.inv_Stockremove.form.controls("qty"))
'***- ตาราง inv_products มีกี่เรคคอร์ด ค่าของ b จะเป็นค่าของเรคคอร์ดใด
'***ตาราง inv_products มี 24 เรคคอร์ด
'***- ค่าของ b จะเป็นค่าของ เรคคอร์ด [qty] ในตาราง inv_products เก็บจำนวนสินค้าคงเหลือ
'*** ถ้าคุณยังไม่บอกว่าต้องการอัพเดตเรคคอร์ดใด ค่าของ b มันจะไปเอามาจาก เรคคอร์ดแรกในตารางเท่านั้น มันจะไม่สนใจอ่านค่าจากเรคคอร์ดอื่นเลย
b = cint(Dlookup("qty","inv_products"))
If a > b Then MsgBox "Stock Over", vbOKOnly, "StockOver"
'**** มันจะอัพเดตทุกๆ เรคคอร์ด ทั้ง 24 เรคคอร์ด มันจะเป็นเลขเดียวกันหมดเลย คือ ค่าของ b-a ตามใจละกัน
sql ="Update inv_products set qty=" & b - a
currentproject.connection.execute sql
Dim b As Integer
Dim s As Integer
'***ค่าของ a ก็คือจำนวนสินค้าที่เรากรอกในหน้าฟอร์มที่มี Textbox ชื่อ qty และดึง control source [qty]
'***[qty] เป็น control ที่อยู่ในฟอร์มย่อย ชื่อ inv_Stockremove
'***อยากทราบว่า [อ้างอิงลงไปตามลำดับขั้นจนกว่าจะถึงคอนโทรลที่แสดงจำนวนการซื้อ] มันลำดับขั้นยังไงค่ะ ??????
a = cint(me.inv_Stockremove.form.controls("qty"))
'***- ตาราง inv_products มีกี่เรคคอร์ด ค่าของ b จะเป็นค่าของเรคคอร์ดใด
'***ตาราง inv_products มี 24 เรคคอร์ด
'***- ค่าของ b จะเป็นค่าของ เรคคอร์ด [qty] ในตาราง inv_products เก็บจำนวนสินค้าคงเหลือ
'*** ถ้าคุณยังไม่บอกว่าต้องการอัพเดตเรคคอร์ดใด ค่าของ b มันจะไปเอามาจาก เรคคอร์ดแรกในตารางเท่านั้น มันจะไม่สนใจอ่านค่าจากเรคคอร์ดอื่นเลย
b = cint(Dlookup("qty","inv_products"))
If a > b Then MsgBox "Stock Over", vbOKOnly, "StockOver"
'**** มันจะอัพเดตทุกๆ เรคคอร์ด ทั้ง 24 เรคคอร์ด มันจะเป็นเลขเดียวกันหมดเลย คือ ค่าของ b-a ตามใจละกัน
sql ="Update inv_products set qty=" & b - a
currentproject.connection.execute sql
7 @R02618
ตามใจละกัน หมายความว่าไงค่ะ
***qty คือฟิลด์ที่เก็บจำนวนสินค้าใน Stock ของตาราง inv_products
ที่ต้องการอัพเดทก็เรคคอร์ด qty ไงค่ะ หรือว่าตีความหมายคำว่าเรคคอร์ดผิดไปจนทำให้คนตอบงง
แล้วสรุปต้องเขียน Code ยังไงค่ะเนี่ย ช่วยบอกหน่อยนะค่ะ
***qty คือฟิลด์ที่เก็บจำนวนสินค้าใน Stock ของตาราง inv_products
ที่ต้องการอัพเดทก็เรคคอร์ด qty ไงค่ะ หรือว่าตีความหมายคำว่าเรคคอร์ดผิดไปจนทำให้คนตอบงง
แล้วสรุปต้องเขียน Code ยังไงค่ะเนี่ย ช่วยบอกหน่อยนะค่ะ
8 @R02619
ลองเอาตัวอย่างส่งมาให้ดูหน่อยได้ไหมถ้าไม่โตมาก และช่วย Print Screen Form เป็นรูปและแต่งเขียนอธิบายว่าต้องการตรงจุดไหน
อยากช่วยตอบเท่าที่จะทำได้ครับ
อยากช่วยตอบเท่าที่จะทำได้ครับ
9 @R02633
b = [inv_products]![qty] ' บอกว่า [qty] เอามาจาก form ย่อย
b ไม่มีตรงไหนที่บอกว่าค่าที่ได้ เอามาจาก record ไหนในตาราง โปรแกรมมันจะรู้ได้ยังไงว่าต้องไป ตรวจสอบกับสต๊อกสินค้าตัวไหน อันนี้ยืนยันเหมือนที่คุณ yedram บอกครับ
ผมลองแบบง่ายๆนะครับ คุณต้องคีย์
1.รหัสสินค้าลง Form ผมสมมุติเป็น Text box Name : TxtProduct
2.จำนวนที่ต้องการ
ดังนั้นค่า b ซึ่งเป็นจำนวนสินค้าในตาราง inv_product ที่ได้ควรเป็น
b = cint(Dlookup("qty","inv_products","ProductID = '" & Me![TxtProductID] & "'"))
'ProductID (หรือชื่อField ตามที่คุณสร้าง) : หมายถึง รหัสสินค้าที่เก็บข้อมูลในตาราง inv_products
'TxtProductID : หมายถึง รหัสสินค้าที่คุณคีย์ลง Text box
ดูๆ แล้วเรื่องยาวครับ แต่เอาใจช่วยครับ
b ไม่มีตรงไหนที่บอกว่าค่าที่ได้ เอามาจาก record ไหนในตาราง โปรแกรมมันจะรู้ได้ยังไงว่าต้องไป ตรวจสอบกับสต๊อกสินค้าตัวไหน อันนี้ยืนยันเหมือนที่คุณ yedram บอกครับ
ผมลองแบบง่ายๆนะครับ คุณต้องคีย์
1.รหัสสินค้าลง Form ผมสมมุติเป็น Text box Name : TxtProduct
2.จำนวนที่ต้องการ
ดังนั้นค่า b ซึ่งเป็นจำนวนสินค้าในตาราง inv_product ที่ได้ควรเป็น
b = cint(Dlookup("qty","inv_products","ProductID = '" & Me![TxtProductID] & "'"))
'ProductID (หรือชื่อField ตามที่คุณสร้าง) : หมายถึง รหัสสินค้าที่เก็บข้อมูลในตาราง inv_products
'TxtProductID : หมายถึง รหัสสินค้าที่คุณคีย์ลง Text box
ดูๆ แล้วเรื่องยาวครับ แต่เอาใจช่วยครับ
Time: 0.2868s
- If ถูกเปิดสองครั้ง แต่ปิดแค่ครั้งเดียว และเท่าที่อ่าน ไม่ทรายว่าจุดประสงค์ของ if ตัวที่สองคืออะไร
- โค้ดนี้เขียนไว้ที่ไหน (ในโมดูล, หรือในฟอร์ม cc-stockremove, หรือในฟอร์มอื่น)
- ตาราง inv_products มีกี่เรคคอร์ด ค่าของ b จะเป็นค่าของเรคคอร์ดใด