ขอความช่วยเหลือเรื่องการสแกน barcode เพื่อเพิ่มสินค้าหน่อยครับ


0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

12 มี.ค. 67 , 10:40:35
อ่าน 1029 ครั้ง

prajak


รบกวนสอบถามอาจารย์ทุกท่านนะครับ คือผมจะทำฟอร์มโปรแกรมขาย โดยมีลักษณะเป็นฟอร์มที่มี main form และ subform โดยที่บน main form จะมี text box เพื่อรับค่า barcode เวลาเราสแกนบาร์โค้ดบนสินค้า1ครั้ง ก็ให้เพิ่มสินค้า item นั้นๆลงบน subform ยิงแต่ละอันก็เพิ่มลง subform ไปเรื่อยๆครับ

ปล.เคยมีอาจารย์ OddyWriter แนะนำไว้ก่อนหน้านี้ให้ใช้การ append query โดยใส่คำสั่ง append query บน event after update ของ text box scan barcode ผมทำได้แล้วครับ แต่อันนั้นเป็น form ที่ไม่มี subform พอมาเป็นแบบมี subform เลยทำไม่เป็นครับ

ทั้งนีผมได้แนบตัวอย่างฟอร์มมาให้ดูด้วยครับ รบกวนด้วยนะครับ

ปล.แล้วเป็นไปได้ไหมครับ หากสแกนแล้วเป็นบาร์โค้ดเดียวกัน คือสินค้าเป็นitemเดียวกัน ก็ให้นับจำนวนเพิ่มเข้าไปเลย
เช่นยิงครั้งที่1 สินค้าitem A = 1 ชิ้น พอยิงสินค้าA อีก จำนวนก็จะเพิ่มเป็น2ชิ้น โดยที่บรรทัดไม่เพิ่ม

 

12 มี.ค. 67 , 14:13:46
ตอบกลับ #1

ศรี-นคร

สามารถทำได้ครับ โดยใช้ DAO ช่วยจะทำให้ง่ายขี้น
แต่เนื่องจากไฟล์ตัวอย่างที่ให้มานั้นเป็นเวอร์ชั่นใหม่ รบกวน Convert ลงเป็น Access2002
ที่มีนามสกุล mdb แล้ว Upload เข้ามาใหม่ครับ เพราะผมใช้เวอร์ชั่นเก่า เลยไม่สามารถทำเป็นตัวอย่างให้ได้ครับ

 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

12 มี.ค. 67 , 14:36:35
ตอบกลับ #2

prajak

สามารถทำได้ครับ โดยใช้ DAO ช่วยจะทำให้ง่ายขี้น
แต่เนื่องจากไฟล์ตัวอย่างที่ให้มานั้นเป็นเวอร์ชั่นใหม่ รบกวน Convert ลงเป็น Access2002
ที่มีนามสกุล mdb แล้ว Upload เข้ามาใหม่ครับ เพราะผมใช้เวอร์ชั่นเก่า เลยไม่สามารถทำเป็นตัวอย่างให้ได้ครับ
แปลง version ให้แล้ว ขอบพระคุณล่วงหน้านะครับ

 

13 มี.ค. 67 , 09:36:49
ตอบกลับ #3

ศรี-นคร

ได้ทำตัวอย่างมาให้ศึกษาเป็นแนวทางแล้วนะครับ
โดยมีการแก้ไขซื่อฟิลด์ที่ซื่อ ID ในบาง Table เพื่อให้มือใหม่ได้ตามถูก
เนื่องจากตัวอย่างต้นฉบับที่ได้มาใช้ฟิลด์ ชื่อ ID เหมือนกันหลาย Table อาจจะทำให้เกิดความสับสนได้

โดยตัวอย่างที่ทำให้มีทำตัวอย่างฟังค์ชั่นอื่นเพิ่มให้นิดหน่อย เพื่อ่ให้มองเห็นภาพได้เร็วขี้น
« แก้ไขครั้งสุดท้าย: 13 มี.ค. 67 , 11:38:25 โดย ศรี-นคร »

 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

13 มี.ค. 67 , 12:01:23
ตอบกลับ #4

prajak

ได้ทำตัวอย่างมาให้ศึกษาเป็นแนวทางแล้วนะครับ
โดยมีการแก้ไขซื่อฟิลด์ที่ซื่อ ID ในบาง Table เพื่อให้มือใหม่ได้ตามถูก
เนื่องจากตัวอย่างต้นฉบับที่ได้มาใช้ฟิลด์ ชื่อ ID เหมือนกันหลาย Table อาจจะทำให้เกิดความสับสนได้

โดยตัวอย่างที่ทำให้มีทำตัวอย่างฟังค์ชั่นอื่นเพิ่มให้นิดหน่อย เพื่อ่ให้มองเห็นภาพได้เร็วขี้น


ขอบพระคุณมากๆนะครับ ผมมีคำถามครับ
1.เวลา Ad Record ใหม่ พิมพ์เลข barcode แล้วกด enter หรือกด tab จะไม่มีอะไรเกิดขึ้นครับ หรือบางครั้งก็ขึ้น error ตามรูป
2.กรณีเรายิง barcode เกิน เราจะลบยอดนั้นได้อย่างไรครับ เช่น item A ยิงไป4 แต่ของจริงแค่3 อยากลบออก1

ขอบคุณมากครับ

 

13 มี.ค. 67 , 12:28:11
ตอบกลับ #5

ศรี-นคร

ให้ Download ตัวอย่างไฟล์อีกครั้งครับ
ผมมีการปรับให้ใหม่แล้ว
« แก้ไขครั้งสุดท้าย: 13 มี.ค. 67 , 13:32:29 โดย ศรี-นคร »

 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

13 มี.ค. 67 , 13:08:57
ตอบกลับ #6

prajak

ให้ Download ตัวอย่างไฟล์อีกครั้งครับ
ผมมีการปรับให้ใหม่แล้ว
ได้แล้วครับ ไม่พบปัญหาดังกล่าวแล้ว
ปล.แล้วหากยิงรายการนั้นๆเกิน เราจะลบออกยังไงครับ

 

13 มี.ค. 67 , 13:38:10
ตอบกลับ #7

ศรี-นคร

ผมมีปรับตัวอย่างเพิ่ม เป็น Sample3.Zip
หากต้องการลบ รายการไหนให้คลิ๊เลือกแบบนี้แล้วกด Del

« แก้ไขครั้งสุดท้าย: 14 มี.ค. 67 , 17:51:26 โดย ศรี-นคร »

 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

13 มี.ค. 67 , 13:54:37
ตอบกลับ #8

prajak

ผมมีปรับตัวอย่างเพิ่ม เป็น Sample3.Zip
หากต้องการลบ รายการไหนให้คลิ๊เลือกแบบนี้แล้วกด Del


อ๋อ ป่าวครับ หมายถึงว่ารายการเดียวกันที่ยิงแล้วเพิ่มจำนวนเป็น 1 2 3 หากเราต้องการลบยอดเหลือ2 ต้องทำยังไงครับ ถ้าลบทั้งแถวทำได้ครับ

 

13 มี.ค. 67 , 14:29:54
ตอบกลับ #9

ศรี-นคร

อันนี้ต้องทำหน้าแยกเพิ่มขี้นมาอีกอันในการยกเลิกรายการ โดยอาศัยหลักการเดียวกัน เพียงแต่จากบวกเพิ่มเป็นลบ

      rst2.Edit
      rst2!Qty = rst2!Qty - 1
      rst2.Update

หรือจะไปกำหนดให้ User ไปแก้จำนวนเอาก็ได้ที่ SubForm โดยไปดูที่ Property ของ SubForm : Editting แต่มีความเสี่ยงตรงแก้ผิด
วิธีที่ปลอดภัยสุดคือ ยิงด้วยเลขที InvNo --> ยิงบาร์โค๊ต เพื่อให้ระบบวิ่งไปตรวจสอบความถูกต้องแล้ว ค่อยลดจำนวน

ลองฝึกทำครับ แค่ประสบการณ์จะบังเกิด

 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

13 มี.ค. 67 , 14:36:35
ตอบกลับ #10

prajak

อันนี้ต้องทำหน้าแยกเพิ่มขี้นมาอีกอันในการยกเลิกรายการ โดยอาศัยหลักการเดียวกัน เพียงแต่จากบวกเพิ่มเป็นลบ

      rst2.Edit
      rst2!Qty = rst2!Qty - 1
      rst2.Update

หรือจะไปกำหนดให้ User ไปแก้จำนวนเอาก็ได้ที่ SubForm โดยไปดูที่ Property ของ SubForm : Editting แต่มีความเสี่ยงตรงแก้ผิด
วิธีที่ปลอดภัยสุดคือ ยิงด้วยเลขที InvNo --> ยิงบาร์โค๊ต เพื่อให้ระบบวิ่งไปตรวจสอบความถูกต้องแล้ว ค่อยลดจำนวน

ลองฝึกทำครับ แค่ประสบการณ์จะบังเกิด
ขอบพระคุณมากๆเลยนะครับ เดี๋ยวผมลองทำดูครับ

 

14 มี.ค. 67 , 09:31:17
ตอบกลับ #11

prajak

ขอรบกวนอีกนิดนะครับ ถ้าผมต้องการลบ main form แล้วให้ ข้อมูลใน subform ลบไปด้วย ต้องเขียน code ยังไงครับ ตอนนี้ลบที่ main form แล้ว subform ไม่ลบตามครับ

 

14 มี.ค. 67 , 10:21:06
ตอบกลับ #12

prajak

ทำได้แล้วนะครับ
Private Sub Command33_Click()
If MsgBox("R U sure?", vbYesNo + vbDefaultButton2) = vbYes Then
DoCmd.SetWarnings False
DoCmd.RunSQL "delete from tbl_sub where ID_main= " & MainID
DoCmd.RunCommand acCmdDeleteRecord
End If
End Sub

 

15 มี.ค. 67 , 10:42:03
ตอบกลับ #13

prajak

รบกวนสอบถามเพิ่มเติมเกี่ยวกับรูปแบบเลขที่ Invoice ถ้าต้องการเพิ่มเดือนเข้าไปด้วยต่อจากปี ต้องแก้ตรงไหนบ้างครับ
Function GenInvNo()
    Dim rst1, rst2, rst3 As DAO.Recordset
    Dim vStkID, vInvID, vInv1, vInv2, IntMax, vValRef As Long
    Dim vStkNo, vInvNo, vInv As String
   
    Dim dbs As Database
    Set dbs = CurrentDb()
   
    If IsNull(Me.InvNo) Or (Me.InvNo = "") Then
        'สร้างเลขที่ Inv ใบใหม่
        vInv = "IV" & Format(Date, "yy")
        If DCount("Val(Right([InvNo],6))", "[tbl_main]", "Mid([InvNo],1,4) = '" & vInv & "'") = 0 Then
            vInvNo = vInv & "000001"
           
        Else
            IntMax = DMax("Val(Right([InvNo],6))", "[tbl_main]", "Mid([InvNo],1,4) = '" & vInv & "'")
            vInvNo = vInv & Format(IntMax + 1, "000000")
           
        End If
       
        'ใส่ค่าลงไป»
        Me.InvNo = vInvNo
   
    End If
   
End Function

 

15 มี.ค. 67 , 11:09:03
ตอบกลับ #14

ศรี-นคร

Function GenInvNo()
    Dim rst1, rst2, rst3 As DAO.Recordset
    Dim vStkID, vInvID, vInv1, vInv2, IntMax, vValRef As Long
    Dim vStkNo, vInvNo, vInv As String
   
    Dim dbs As Database
    Set dbs = CurrentDb()
   
    If IsNull(Me.INvNo) Or (Me.INvNo = "") Then
        'สร้างเลขที่ Inv ใบใหม่
        vInv = "IV" & Format(Date, "yy") & Format(Date, "MM")
        If DCount("Val(Right([InvNo],4))", "[tbl_main]", "Mid([InvNo],1,6) = '" & vInv & "'") = 0 Then
            vInvNo = vInv & "0001"
           
        Else
            IntMax = DMax("Val(Right([InvNo],4))", "[tbl_main]", "Mid([InvNo],1,6) = '" & vInv & "'")
            vInvNo = vInv & Format(IntMax + 1, "0000")
           
        End If
       
        'ใส่ค่าลงไป
        Me.INvNo = vInvNo
   
    End If
   
End Function


 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

15 มี.ค. 67 , 14:42:18
ตอบกลับ #15

prajak

Function GenInvNo()
    Dim rst1, rst2, rst3 As DAO.Recordset
    Dim vStkID, vInvID, vInv1, vInv2, IntMax, vValRef As Long
    Dim vStkNo, vInvNo, vInv As String
   
    Dim dbs As Database
    Set dbs = CurrentDb()
   
    If IsNull(Me.INvNo) Or (Me.INvNo = "") Then
        'สร้างเลขที่ Inv ใบใหม่
        vInv = "IV" & Format(Date, "yy") & Format(Date, "MM")
        If DCount("Val(Right([InvNo],4))", "[tbl_main]", "Mid([InvNo],1,6) = '" & vInv & "'") = 0 Then
            vInvNo = vInv & "0001"
           
        Else
            IntMax = DMax("Val(Right([InvNo],4))", "[tbl_main]", "Mid([InvNo],1,6) = '" & vInv & "'")
            vInvNo = vInv & Format(IntMax + 1, "0000")
           
        End If
       
        'ใส่ค่าลงไป
        Me.INvNo = vInvNo
   
    End If
   
End Function


ได้แล้วครับ ขอบคุณมากนะครับ

 

15 มี.ค. 67 , 15:51:37
ตอบกลับ #16

ศรี-นคร

มีน้องอีกคน ไม่ทราบวิธี Save As ไฟล์จาก accdb --> mdb
ผมรบกวนเข้าไปแนะนำหน่อยครับ
https://www.thai-access.com/index.php?topic=2436.msg16060#new

 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

18 มี.ค. 67 , 15:19:12
ตอบกลับ #17

prajak

มีน้องอีกคน ไม่ทราบวิธี Save As ไฟล์จาก accdb --> mdb
ผมรบกวนเข้าไปแนะนำหน่อยครับ
https://www.thai-access.com/index.php?topic=2436.msg16060#new
ได้ครับ

 


บอร์ดเรียนรู้ Access สำหรับคนไทย


 

Sitemap 1 2 3 4 5