กระทู้เก่าบอร์ด อ.Yeadram
1,796 8
URL.หัวข้อ /
URL
อยากให้จำนวนบวกทีละ 1
เรียนท่านผู้รู้ครับ ผมคีย์ข้อมูลที่หน้า Form ดังนี้ครับ
Item Description Qty
0001 ยาแก้ไข 1
0002 ยาธาตุน้ำขาว 1
ผมคีย์แค่ช่อง Item เท่านั้นครับ ช่องอื่น ผมดึงข้อมูลมา
คือผมอยากจะให้ Qty บวกขื้นทีละ 1 ในกรณีถ้าเราคีย์ข้อมูล Item ซ้าครับ เช่นถ้าผมใส่ 0001 อีกก็ให้ Qty เป็น 2 เลย ไม่ทราบว่าจะต้องทำอย่างไรหรือเขียนโค๊ดว่าอย่างไรครับ
Item Description Qty
0001 ยาแก้ไข 1
0002 ยาธาตุน้ำขาว 1
ผมคีย์แค่ช่อง Item เท่านั้นครับ ช่องอื่น ผมดึงข้อมูลมา
คือผมอยากจะให้ Qty บวกขื้นทีละ 1 ในกรณีถ้าเราคีย์ข้อมูล Item ซ้าครับ เช่นถ้าผมใส่ 0001 อีกก็ให้ Qty เป็น 2 เลย ไม่ทราบว่าจะต้องทำอย่างไรหรือเขียนโค๊ดว่าอย่างไรครับ
8 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R05464
ฟอร์มทำเป็น continuous form ใช่ไหมครับ คุณป้อน item 001 ที่บรรทัดที่ 1 แล้วก็อาจป้อน item 001 ที่บรรทัดที่ 5 อีก เป็นอย่างนี้ใช่ไหม
2 @R05465
ใช่ครับ คือ ถ้าเป็น รหัสสินค้าเดียวกันก็ให้รวม Item และ Qty บวกเพิ่มขึ้นทีละ 1 ครับ
3 @R05469
สมมุติว่า ฟิลด์ในเทเบิลของคุณชื่อ fitem และ fqty ส่วนเท็กซ์บ็อกส์บนหน้าจอชื่อ titem และ tqty ให้นำโค้ดนี้ไปใส่ไว้ที่ AfterUpdate event procedure ของ titem นะครับ
Dim RS As DAO.Recordset
Dim MaxQty As Integer
If Me.titem = Me.titem.OldValue Then Exit Sub
MaxQty = 0
Set RS = Me.RecordsetClone
If RS.RecordCount > 0 Then
RS.MoveFirst
Do
If (Me.titem = RS!fitem) And (RS!fqty > MaxQty) Then MaxQty = RS!fqty
RS.MoveNext
Loop Until RS.EOF
End If
RS.Close: Set RS = Nothing
Me.tqty = MaxQty + 1
End Sub
4 @R05471
เรียนท่านอาจารย์สันติสุขครับ ผมอยากจะขอ Mail ของท่านอาจารย์ครับผมจะได้แนบไฟล์ตัวอย่างมาให้ดูครับผม เพราะผมลองดูแล้วแต่มันยังไม่ได้อ่ะครับ
5 @R05472
ส่งไปที่ accboard@gmail.com แต่ตอนนี้ผมต้องไปธุระข้างนอกก่อน แล้วจะดูให้ตอนดึกๆครับ
6 @R05475
สิ่งที่คุณต้องการ ผิดไปจากที่คุณได้เล่ามาให้ฟัง ขอทบทวนสักนิดเพื่อให้คนอื่นได้ฟังด้วย สิ่งที่คุณออกแบบไว้ก็คือ ฟอร์มทำเป็น Continuous Form มีช่อง รหัสสินค้า (txtBar), ชื่อสินค้า (txtItem) และ จำนวน (txtQty) ซึ่งทุกฟิลด์ผูกเข้ากับเทเบิล TBLPremiumSample (ซึ่งยังมีฟิลด์ txtNo อีก1ฟิลด์เพื่อเก็บเลขเอกสาร) รหัสสินค้าจะถูกป้อนหรือสแกนเข้ามา จากนั้นชื่อสินค้าก็ให้แสดงอัตโนมัติ เมื่อได้รับการป้อนรหัสสินค้าซ้ำกับที่มีอยู่แล้ว จำนวนในบรรทัดเดิมจะถูกเพิ่มขึ้นอีก 1 ชิ้นโดยอัตโนมัติ แต่ถ้ายังไม่มี ก็เริ่มต้นสร้างเป็น 1 ชิ้นในบรรทัดใหม่ ในหน้าจอที่คุณออกแแบบมาก็เป็นไปตามรูป แต่ผมได้เพิ่มส่วนที่อยู่ในกรอบสีแดงเพิ่มเติมเข้าไป เพราะสิ่งที่คุณออกมาแบบมามันไม่เพียงพอกับความต้องการของคุณ เพราะถ้าคุณป้อนหรือสแกนโดยตรงเข้าไปที่ช่อง รหัสสินค้า (ซึ่งมันผูกกับฟิลด์ในเทเบิล) มันจะเริ่มเข้าไปในโหมดของการ เพิ่มเติมเรคอร์ดใหม่ทันที แต่เมื่อเจอเงื่อนไขว่ารหัสสินค้าซ้ำกับบรรทัดก่อนหน้าที่มีอยู่แล้ว เรากลับไม่ต้องการเพิ่ม แต่ต้องการแก้ไขให้เพิ่มจำนวนที่บรรทัดเดิมแทน การจัดการตรงนี้ก็จะยุ่งยาก เพราะมันขัดแย้งกัน มันเป็นการออกแบบการทำงานของหน้าจอที่ไม่เป็นไปตามธรรมชาติของพฤติกรรมของ Access
ดังนั้นเพื่อให้ง่าย จึงควรสร้างช่องสำหรับการ สแกนรหัสสินค้า (สมมุติว่าชื่อ txtScanBar) แยกไว้ต่างหาก และช่องนี้ก็เป็น unbound textbox ซึ่งหมายถึงไม่ได้ผูกกับฟิลด์อะไรในเทเบิลทั้งสิ้น ดังนั้นมันจึงแยกออกจากตัวเรคอร์ด การป้อนก็ไม่กระทบเรคอร์ดโดยตรง โค้ดการตรวจสอบ ก็ใส่ไว้ที่ AfterUpdate event procedure ของ txtScanBar นี้ ซึ่งโค้ดก็จะต้องปรับปรุงให้เป็นทั้งตัวเพิ่มเรคอร์ดในเทเบิล ทั้งตัวแก้ไขเรคอร์ดเพื่อปรับปรุงจำนวน และอัพเดตให้ continuous form แสดงข้อมูลที่ปรับปรุงไปแล้ว
อัลกอรึธึมก็จะเป็นดังนี้ คุณไปเติมรายละเอียดเองนะครับ
คิดว่ารูปยังโพสเข้าบอร์ดนี้ม่ได้เพราะปัญหาเรื่องเนื้อที่นะครับ ดังนั้นจะขอไปแปะไว้ที่อื่นก่อนแล้วกัน http://img543.imageshack.us/img543/2107/form.jpg
ดังนั้นเพื่อให้ง่าย จึงควรสร้างช่องสำหรับการ สแกนรหัสสินค้า (สมมุติว่าชื่อ txtScanBar) แยกไว้ต่างหาก และช่องนี้ก็เป็น unbound textbox ซึ่งหมายถึงไม่ได้ผูกกับฟิลด์อะไรในเทเบิลทั้งสิ้น ดังนั้นมันจึงแยกออกจากตัวเรคอร์ด การป้อนก็ไม่กระทบเรคอร์ดโดยตรง โค้ดการตรวจสอบ ก็ใส่ไว้ที่ AfterUpdate event procedure ของ txtScanBar นี้ ซึ่งโค้ดก็จะต้องปรับปรุงให้เป็นทั้งตัวเพิ่มเรคอร์ดในเทเบิล ทั้งตัวแก้ไขเรคอร์ดเพื่อปรับปรุงจำนวน และอัพเดตให้ continuous form แสดงข้อมูลที่ปรับปรุงไปแล้ว
อัลกอรึธึมก็จะเป็นดังนี้ คุณไปเติมรายละเอียดเองนะครับ
Dim OldQty As Variant
Dim NewQty As Integer
Dim ItemName As Variant
If Nz(Me.txtScanBar, "") = "" then Exit Sub
OldQty = DLookup("txtQty", "TBLPremiumSample", "(TxtNo = หาค่ามาใส่) AND (TxtBar = Me!txtScanBar)")
NewQty = Nz(OldQty, 0) + 1
If IsNull(OldQty) Then ' แปลว่ายังไม่มีเรคอร์ดตามเงื่อนไขมาก่อน
ItemName = Dlookup("txtDesc", "TBLMasterItem", "txtCode = Me!txtScanBar")
If IsNull(ItemName) Then
MsgBox "ไม่มีรายการสินค้ารหัสนี้"
Exit Sub
End If
DoCmd.RunSQL "INSERT เรคอร์ดลงใน TBLPremiumSample ให้ TxtNo = หาค่ามาใส่, TxtBar = Me!txtScanBar, TxtItem = ค่าของ ItemName, TxtQty = ค่าของ NewQty"
Me.Requery
Else
DoCmd.RunSQL "UPDATE TBLPremiumSample ให้ TxtQty = ค่าของ NewQty WHERE TxtNo = หาค่ามาใส่"
Me.Refresh
End If
คิดว่ารูปยังโพสเข้าบอร์ดนี้ม่ได้เพราะปัญหาเรื่องเนื้อที่นะครับ ดังนั้นจะขอไปแปะไว้ที่อื่นก่อนแล้วกัน http://img543.imageshack.us/img543/2107/form.jpg
7 @R05476
เรียนท่านอาจารย์ครับ คือ ผมขอเรียนท่านอาจารย์ก่อนครับว่า ผมไม่ค่อยเก่งเรื่องโค๊ดครับ ผมอ่านโค๊ดของท่านอาจารย์แล้วยังงงๆอยู่ตรง "หาค่ามาใส่" อ่ะครับผม ถ้าไม่เป็นการรบกวนท่านอาจารย์เกินไป ผมอยากได้เป็นไฟล์ครับ เพื่อจะได้นำไปศึกษาหรือนำไปประยุกต์ใช้กับโปรแกรมอื่นอีกครับผม ขอความกรุณาท่านอาจารย์ช่วยส่งเป็นไฟล์ที่ทำเสร็จแล้วได้มั๊ยครับผม ส่งที่ Piyaphan@Se-ed.com ครับผม ขอขอบพระคุณท่านอาจารย์สันติสุขอย่างสูงครับ
8 @R05478
ที่ผมทำเป็นอัลกอริธึมให้เพราะเห็นว่า คุณก็มีโค้ดของตัวเองอยู่แล้ว และ "หาค่ามาใส่" ก็คือค่าของ txtNo นั่นเอง จากที่ดูโค้ดของคุณคร่าวๆ คุณมีการสร้างเลข txtNo เลขถัดไป ด้วยการเขียนโปรแกรม คุณก็เอาค่า ค่านั้นแหล่ะ มาแทนที่ครับ ค่าของ ItemName ก็เช่นเดียวกัน ส่วนคำสั่ง DoCmd.RunSQL "INSERT ... หรือ UPDATE ผมก็เห็นว่าคุณก็มีเขียนอยู่แล้ว ก็สามารถลอกแบบมาได้นี่ครับ
เรื่องทำให้เป็นไฟล์ ผมคงไม่ทำให้นะครับ เพราะัมันไม่มีอะไรมากไปกว่า การสร้าง txtScanBar แล้วก็เติมโค้ดที่ผมว่าไปนั่นแหล่ะ มีเท่านั้นจริงๆ ส่วนโค้ดที่แนะนำไปในคำตอบ R05469 ก็ไม่ต้องใช้แล้ว เอาออกเสีย
ถ้ายังติดปัญหาตรงไหนก็มาถามได้ครับ ต้องบอกตามตรงว่า ผมไม่ค่อยมีเวลาช่วงนี้ แล้วผมก็ไม่นิยมการสอนแบบ ทำสำเร็จรูป เสียเท่าไหร่ ผมชอบให้แนวคิดและทางเดินมากกว่าครับ
เรื่องทำให้เป็นไฟล์ ผมคงไม่ทำให้นะครับ เพราะัมันไม่มีอะไรมากไปกว่า การสร้าง txtScanBar แล้วก็เติมโค้ดที่ผมว่าไปนั่นแหล่ะ มีเท่านั้นจริงๆ ส่วนโค้ดที่แนะนำไปในคำตอบ R05469 ก็ไม่ต้องใช้แล้ว เอาออกเสีย
ถ้ายังติดปัญหาตรงไหนก็มาถามได้ครับ ต้องบอกตามตรงว่า ผมไม่ค่อยมีเวลาช่วงนี้ แล้วผมก็ไม่นิยมการสอนแบบ ทำสำเร็จรูป เสียเท่าไหร่ ผมชอบให้แนวคิดและทางเดินมากกว่าครับ
Time: 0.4134s