ช่วยดูCode ตัด Stock ให้หน่อยค่ะ
กระทู้เก่าบอร์ด อ.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ที่เขียนก็ผิดอีกค่ะ จะแก้ยังไงค่ะช่วยด้วยค่ะ

9 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R02607
ถามกลับก่อนครับ..
- If ถูกเปิดสองครั้ง แต่ปิดแค่ครั้งเดียว และเท่าที่อ่าน ไม่ทรายว่าจุดประสงค์ของ if ตัวที่สองคืออะไร
- โค้ดนี้เขียนไว้ที่ไหน (ในโมดูล, หรือในฟอร์ม cc-stockremove, หรือในฟอร์มอื่น)
- ตาราง inv_products มีกี่เรคคอร์ด   ค่าของ b จะเป็นค่าของเรคคอร์ดใด
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
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
4 @R02614
ถามอีกครับ
- ตาราง 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 รหัสสินค้า(ชื่อฟิลด์จริงในตาราง) = '" & [อ้างอิงลงไปตามลำดับขั้นจนกว่าจะถึง คอนโทรลทีแสดงรหัสสินค้าที่ต้องการอัพเดต] & "';"

อยากทราบว่า [อ้างอิงลงไปตามลำดับขั้นจนกว่าจะถึงคอนโทรลที่แสดงจำนวนการซื้อ] มันลำดับขั้นยังไงค่ะ ??????
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
7 @R02618
ตามใจละกัน หมายความว่าไงค่ะ
***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

ดูๆ แล้วเรื่องยาวครับ แต่เอาใจช่วยครับ



@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2868s