อยากให้จำนวนบวกทีละ 1
กระทู้เก่าบอร์ด อ.Yeadram

 1,796   8
URL.หัวข้อ / URL
อยากให้จำนวนบวกทีละ 1

เรียนท่านผู้รู้ครับ ผมคีย์ข้อมูลที่หน้า Form ดังนี้ครับ

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 แสดงข้อมูลที่ปรับปรุงไปแล้ว

อัลกอรึธึมก็จะเป็นดังนี้ คุณไปเติมรายละเอียดเองนะครับ

     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 ก็ไม่ต้องใช้แล้ว เอาออกเสีย

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