รบกวนถามครับ รับค่าช่องเดียว เก็บสองเรคคอร์ด ได้ไห
กระทู้เก่าบอร์ด อ.Yeadram

 2,560   15
URL.หัวข้อ / URL
รบกวนถามครับ รับค่าช่องเดียว เก็บสองเรคคอร์ด ได้ไห

รบกวนถามครับ รับค่าช่องเดียว เก็บสองเรคคอร์ด ได้ไหมครับ
เช่น ผมจะยิงบาร์โค๊ด มันจะเป็นแถวเดียวกัน แต่อยากให้มันแยกเก็บเป็นสองเรคคอร์ด
1 เป็นรหัสสินค้า
2 เป็นพาทนัมเบอร์

อะไรแบบนี้ครับ

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

1 @R20150
อะไรแบบนั้นได้นะคะ รอท่านผู้รู้มาตอบดีกว่า
2 @R20153
ขอบคุณมากครับ ตอนนี้ผมติดปัญหา ยิงข้อมูลเป็นแถวเดียวแต่แยกเก็บไม่ได้ครับ - -*
3 @R20154
ปกติก็จะใช้ฟังก์ชั่น Mid() ในการแบ่งนะครับ เช่น
- แบ่งโดยนับจำนวนหลัก เช่น 1234567890 จะแบ่งเป็น 12345 และ 67890
1. Mid("1234567890", 1, 5)
2. Mid("1234567890", 6, 10) หรือ Mid("1234567890", 6) ก็ได้

- แบ่งโดยหาจากอักษร เช่น 123ST001 จะแบ่งเป็น 123 และ ST001
1. Mid("1234567890", 1, InStr(1, "123ST001", "ST") - 1)
2, Mid("1234567890", InStr(1, "123ST001", "ST"))

ประมาณนี้ ปรับใช้ดูครับ
4 @R20171
ขอบคุณ TTT มากๆครับ
ไม่ทราบว่าเอา ไปตั้งค่าตรงไหนหรือครับ พอดีมือใหม่จริงๆครับผม
5 @R20172
คือผมหมายถึง การยิงบาร์โค้ดช่องเดียว แต่แยกส่วนไปเก็บคนละฟิลนะครับ ไม่ได้คิวรี่
เช่น A00199999001
A001
99999
001

แยะเก็บคนละฟิลแบบนี้ครับผมลงเทเบิลครับ
6 @R20174
เข้าใจว่าหลังจากรับค่ามาแล้วครับ
ตอนยิงมาตอนแรกจะได้ค่านี้มาใช่มั้ยครับ A00199999001 ให้เกบค่าที่ได้ไว้ในตัวแปรหรือไว้ในคอนโทรลก่อน
จากนั้นใช้ฟังก์ชันตามอาจารย์ TTT มาใช้เพื่อแยกส่วนครับ

เอาตามที่ต้องการก็ประมาณนี้ครับ
dim strAll as string
dim str1 as string
dim str2 as string
dim str3 as string

'เมื่อยิงบาร์โค้ดเกบค่าที่ได้ไว้ที่ strAll
strAll = ข้อมูลตามที่เก็บได้ (A00199999001)

จากนั้นให้เอาข้อมูลที่ได้มาตัดออก
str1 = Mid(strAll , 1, 4) จะได้ A001

str2 = Mid(strAll , 5, 9) จะได้ 99999

str3 = Mid(strAll , 10) จะได้ตัวที่นับจากลำดับที่ 10 ไปทั้งหมดคือ 001

เมื่อได้แล้วจึงค่อยไปบันทึกลงตารางตามแต่ละฟิลครับ
7 @R20175
ขอบคุณมากๆครับ ตอนนี้เข้าใจหลักการแล้วครับผม จะลองดูครับ

แต่เวลาเราเอาของเข้าทีมันหลายๆชิ้นนะครับ ผมคิดว่าถ้ายิงแล้วต้องคอยมากดบันทึกแล้วกดเพิ่มข้อมูลใหม่ผมว่าช้าแน่ๆเลยครับง

มีวิธีที่ทำให้มันบันทึกเองเลย ลองนึกภาพตามนะครับ เมื่อเรายิงบาร์โค้ด เสร็จตัวเลขในช่องจะหายไป มันไปบันทึกตามที่เรากำหนดไว้แล้ว และเริ่มรับค่าใหม่ทันที
อะไรแบบนี้ครับผม

รบกวนด้วยนะครับ
8 @R20176
คืองี้นะครับ สมมุติปกติ คุณยิงบาร์โค๊ดแล้วข้อมูล A00199999001 จะปรากฎขึ้นที่คอนโทรลชื่อ text1 บนฟอร์ม ใช่ป้าวครับ ถ้าใช่
- ให้คุณเข้าใส่โค๊ดลงใน Event > On Change ของ text1 ดังนี้ครับ

'Private Sub text1_Change()
    If Len(Me.text1.Text) = 12 Then ' ตรวจสอบจำนวนข้อมูลก่อนว่าครบ 12 หลักก่อนแล้วค่อยทำคำสั่งต่อไป กันไว้กรณีต้องคีย์ตัวเลขเอง
        Me.text2 = Mid(Me.text1.Text, 1, 4) ' text2 คือ คอนโทรลที่ใช้รับค่าช่วงแรก
        Me.text3 = Mid(Me.text1.Text, 5, 9) ' text3 คือ คอนโทรลที่ใช้รับค่าช่วงกลาง
        Me.text4 = Mid(Me.text1.Text, 10) ' text4 คือ คอนโทรลที่ใช้รับค่าช่วงท้าย
        Me.text1 = "" ' จากนั้นลบค่าในคอนโทรล text1
        DoCmd.GoToRecord , , acNewRec ' คำสั่งขึ้นเรคคอร์ดใหม่
    End If
'End Sub

อะไรประมาณนี้ครับ ปรับใช้ดู
9 @R20177
แก้ไขโค๊ด

'Private Sub text1_Change()
    If Len(Me.text1.Text) = 12 Then ' ตรวจสอบจำนวนข้อมูลก่อนว่าครบ 12 หลักก่อนแล้วค่อยทำคำสั่งต่อไป กันไว้กรณีต้องคีย์ตัวเลขเอง
        Me.Recalc ' กรณีอยู่ที่เรคคอร์ดใหม่ต้องมีการสั่งบันทึกก่อน
        Me.text2 = Mid(Me.text1.Text, 1, 4) ' text2 คือ คอนโทรลที่ใช้รับค่าช่วงแรก
        Me.text3 = Mid(Me.text1.Text, 5, 9) ' text3 คือ คอนโทรลที่ใช้รับค่าช่วงกลาง
        Me.text4 = Mid(Me.text1.Text, 10) ' text4 คือ คอนโทรลที่ใช้รับค่าช่วงท้าย
        DoEvents ' Make sure
        Me.text1 = "" ' จากนั้นลบค่าในคอนโทรล text1
        DoCmd.GoToRecord , , acNewRec ' คำสั่งขึ้นเรคคอร์ดใหม่
    End If
'End Sub

ประมาณนี้ครับ น่าจะได้นะ ปรับใช้ดูครับ
10 @R20180
ขอบคุณอาจารย์ TTT มากๆเลยครับ
มันติดปัญหาตรงที หน้าฟอร์มที่เรียกดูสินค้า เวลากดดรอปเมนูของ ID สินค้า
มันซ้ำกันทุกันที่ยิงบาร์โค้ดไปครับเช่น ยิงโค้ด

A00199999001
A00199999002
A00199999003
A00199999004
A00199999005

A001 คือรหัสสินค้า ส่วนด้านหลังจะเป็น Partnumber แต่พอกดเมนูลงมามันมีทุกอันที่ยิงเลยครับแบบนี้

A001
A001
A001
A001
A001

ทำยังไงให้เมนูที่กดดรอปลงมาให้ไม่มีค่าซ้ำมาครับ
ส่วนการเลือกใช้งานมันใช้ได้นะครับ คือเลือก A001 มันจะเลือก Partnumber เรียงออกมาครบทุกอัน ติดเพียงแต่ A001 มันออกมาทุกอันแทนที่จะมีแค่อันเดียวครับผม
11 @R20181
ขอบคุณครับผม ตอนนี้หาทางทำได้แล้วครับผม
12 @R20183
ขออีกนิดครับอาจารย์

จากโค้ดของอาจารย์ อยากให้มันไปเก็บค่าก่อนแล้วแยกได้ไหมครับ คือตอนนี้ผมสร้างฟิวขึ้นมาอีกอันคือ barcode กำว่าจะให้มันมาเก็บก่อนแล้วค่อยแยก มันไม่เก็บเลยครับคือไม่มีข้อมูลมาเก็บเลย

ทำยังไงครับให้มันมาเก็บก่อนแล้วค่อยเรียกไปแยก เพราะผมจะทำตัวเช็คค่าซ้ำ ไม่งั้นเวลายิงโค้ดเบิล มันก็จะกลายเป็นสินค้าซ้ำทั้นทีครับผม

รบกวนอีกรอบครับ
13 @R20184
ถ้าจะแก้ปัญหาเรื่องยิงซ้ำกัน อาจไม่ต้องสร้างฟิลด์เพิ่มก็ได้นะครับ แค่เพิ่มตัวแปร Static เข้าไปเช็คค่าก่อนหน้าว่าเหมือนกับค่าใหม่หรือเปล่าก็น่าจะพอแล้วครับ

    Static iSame As String
    If iSame <> Me.text1.Text Then

        If Len(Me.text1.Text) = 12 Then
            Me.Recalc
            Me.text2 = Mid(Me.text1.Text, 1, 4)
            Me.text3 = Mid(Me.text1.Text, 5, 5)
            Me.text4 = Mid(Me.text1.Text, 10)
            iSame = Me.text1.Text
            Me.text1 = ""
            DoCmd.GoToRecord , , acNewRec
        End If
    Else
        MsgBox iSame & "ซ้ำ"
        Me.txt1 = ""
    End If


อะไรประมาณนี้ครับ ปรับใช้ดู
14 @R20185
ขอกราบขอบพระคุณอาจารย์ มากๆเลยครับ ตอนนี้ใช้ตามที่บอกแก้ไขไม่ให้ซ้ำได้แล้วครับผม

พอดีผมมือใหม่จริงๆครับ การที่อาจารย์ตอบและอธิบายอย่างที่ให้มา ทำให้มือใหม่ๆสามารถเข้าใจได้ง่ายๆ สอนแบบนี้ดีมากๆเลยครับผม
15 @R20227
แหม ๆ ท่าน TTT เยี่ยมไปเรยค๊า เอาใจช่วยคึณมือใหม่ด้วยนะคะ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2563s