Access : จุดเริ่มต้นที่ง่ายที่สุดสำหรับการเรียนรู้ ระบบฐานข้อมูล
Access : จุดเริ่มต้นที่ง่ายที่สุดสำหรับการเรียนรู้ การเขียนโปรแกรม
Access : เป็นได้ทั้งตัวเก็บฐานข้อมูล และตัวจัดการฐานข้อมูล
Thai Access : บอร์ดเสริมการเรียนรู้ Access ด้วยภาษาไทย

น้อมรำลึกในพระมหากรุณาธิคุณอันหาที่สุดมิได้ พระบาทสมเด็จพระปรมินทรมหาภูมิพลอดุลยเดชฯ พระผู้เสด็จสู่สวรรคาลัย

Back to Board : Relation Knowledge New Topic    Reply
ฟังก์ชั่น Barcode (39, 128, EAN-8, EAN-13)

Topic by Message Posted : on : 21/10/2557 21:13:38
TTT  ฟังก์ชั่น Barcode (39, 128, EAN-8, EAN-13)

Barcode39

- เป็น Barcode แบบมาตรฐานธรรมดา ไม่มีการบีบข้อมูลให้แคบลง ทำให้บาร์โค๊ตที่ได้จะมีความยาวมาก
- ลักษณะการแปลงข้อมูลจะเป็นการแปลงแบบตรงๆ โดยใส่เครื่องหมาย * คร่อมที่หัวและท้ายข้อมูลเพียงเท่านั้น เช่น ABC123 = *ABC123*
- อักษรที่รองรับได้แก่: 0-9, A-Z, - + . $ % / SPACE

<วิธีการทำ>

1. ติดตั้งฟอนต์ชื่อ free3of9.ttf ลงในส่วนของ MS Windows โดยคลิ๊กขวาที่ตัวไฟล์ฟอนต์ แล้วเลือกหัวข้อ Install (โหลดไฟล์ฟอนต์ที่นี่ Barcode39.zip)

2. ใส่โค๊ดลงใน Module ดังนี้:

'----------------Function Start----------------
Public Function Code39(c39 As String)
    Dim Counter As Integer    
    If Len(c39) > 0 Then
        c39 = UCase(c39)
        For Counter = 1 To Len(c39)
            Select Case Asc(Mid(c39, Counter, 1))
               Case 32, 36, 37, 43, 45 To 57, 65 To 90
               Case Else
                    MsgBox "Invalid character in barcode string." & vbCrLf & vbCrLf & "Only use 0-9, A-Z, - + . $ % / and the SPACE character", vbCritical
                    Code39 = ""
                    Exit Function
            End Select
        Next
    End If
    Code39 = "*" & c39 & "*"
End Function
'-----------------Function End-----------------

3. บนฟอร์ม หรือ รายงาน ให้สร้าง Textbox ที่ต้องการแสดง Barcode39 โดยกำหนดฟอนต์ให้เป็นชื่อ Free 3 of 9 (ที่ได้ทำไว้ตามข้อ 1 โดยหากไม่พบชื่อให้ปิดโปรแกรม MS Access แล้วเปิดใหม่อีกครั้ง)

4. กรณีใช้งานฟังก์ชั่นโดยการกำหนด Property > Control Source: =Code39([txtCode])
- หรือ หากใช้เป็นแบบเขียนใน VBA: Text1 = Code39("ABC1234567890")
-----------------------------------------------------------------------------------------------

Barcode128 Auto

- Code128 สามารถเข้ารหัสทำให้ข้อมูลแคบลงกว่า Code39 ซึ่งเป็นแบบไม่เข้ารหัส ได้ประมาณ 30%
- Code128 แบ่งเป็น 3 ประเภทดังนี้:

Code128A - ASCII without lowercase characters
Code128B - ASCII without the initial ASCII special characters
Code128C - Numeric

- ส่วนของ Code128 Auto คือ โค๊ดที่รองรับทั้ง Code128 A และ B และ C (ดังนั้นจึงแนะนำให้ใช้ เพราะมีความยืดหยุ่นสูง)
Code128 Auto - Support Code 128 A/B/C characters. Automatically switch between the different code sets and performs characters optimization

<วิธีการทำ>

1. ติดตั้งฟอนต์ชื่อ code128.ttf ลงในส่วนของ MS Windows โดยคลิ๊กขวาที่ตัวไฟล์ฟอนต์ แล้วเลือกหัวข้อ Install (โหลดไฟล์ฟอนต์ที่นี่ Barcode128.zip)

2. ใส่โค๊ดลงใน Module ดังนี้:
'----------------Function Start----------------
Option Explicit

Public Function Code128(SourceString As String)
    Dim Counter As Integer
    Dim CheckSum As Long
    Dim mini As Integer
    Dim dummy As Integer
    Dim UseTableB As Boolean
    Dim Code128_Barcode As String
   
    If Len(SourceString) > 0 Then
        For Counter = 1 To Len(SourceString)
            Select Case Asc(Mid(SourceString, Counter, 1))
               Case 32 To 126, 203
               Case Else
                    MsgBox "Invalid character in barcode string." & vbCrLf & vbCrLf & "Please only use standard ASCII characters", vbCritical
                    Code128 = ""
                    Exit Function
            End Select
        Next
        Code128_Barcode = ""
        UseTableB = True
        Counter = 1
        Do While Counter <= Len(SourceString)
            If UseTableB Then
               mini = IIf(Counter = 1 Or Counter + 3 = Len(SourceString), 4, 6)
               GoSub testnum
               If mini% < 0 Then 'Use Table C
                    If Counter = 1 Then
                        Code128_Barcode = Chr(205)
                    Else 'Switch to table C
                        Code128_Barcode = Code128_Barcode & Chr(199)
                    End If
                    UseTableB = False
               Else
                    If Counter = 1 Then Code128_Barcode = Chr(204) 'Starting with table B
               End If
            End If
            If Not UseTableB Then
               mini% = 2
               GoSub testnum
               If mini% < 0 Then 'OK for 2 digits, process it
                    dummy% = Val(Mid(SourceString, Counter, 2))
                    dummy% = IIf(dummy% < 95, dummy% + 32, dummy% + 100)
                    Code128_Barcode = Code128_Barcode & Chr(dummy%)
                    Counter = Counter + 2
               Else
                    Code128_Barcode = Code128_Barcode & Chr(200)
                    UseTableB = True
               End If
            End If
            If UseTableB Then
               Code128_Barcode = Code128_Barcode & Mid(SourceString, Counter, 1)
               Counter = Counter + 1
            End If
        Loop
        For Counter = 1 To Len(Code128_Barcode)
            dummy% = Asc(Mid(Code128_Barcode, Counter, 1))
            dummy% = IIf(dummy% < 127, dummy% - 32, dummy% - 100)
            If Counter = 1 Then CheckSum& = dummy%
            CheckSum& = (CheckSum& + (Counter - 1) * dummy%) Mod 103
        Next
        CheckSum& = IIf(CheckSum& < 95, CheckSum& + 32, CheckSum& + 100)
        Code128_Barcode = Code128_Barcode & Chr(CheckSum&) & Chr$(206)
    End If
    Code128 = Code128_Barcode
    Exit Function
     
testnum:
        mini% = mini% - 1
        If Counter + mini% <= Len(SourceString) Then
            Do While mini% >= 0
               If Asc(Mid(SourceString, Counter + mini%, 1)) < 48 Or Asc(Mid(SourceString, Counter + mini%, 1)) > 57 Then Exit Do
               mini% = mini% - 1
            Loop
        End If
        Return
End Function
'-----------------Function End-----------------

3. บนฟอร์ม หรือ รายงาน ให้สร้าง Textbox ที่ต้องการแสดง Barcode128 โดยกำหนดฟอนต์ให้เป็นชื่อ Code 128 (ที่ได้ทำไว้ตามข้อ 1 โดยหากไม่พบชื่อให้ปิดโปรแกรมแล้วเรียกใหม่อีกครั้ง)

4. กรณีใช้งานฟังก์ชั่นโดยการกำหนด Property > Control Source: (txtCode คือ รหัสที่ต้องการจะแปลงเป็น Barcode128)
=Code128([txtCode])
หรือ หากใช้เป็นแบบเขียนใน VBA:
Text1 = Code128("ABC-1234567890")



19 Reply in this Topic. Dispaly 2 pages and you are on page number 2

Reply by Message on : 29/5/2560 11:54:43
ekkaphon
(R23446)
สุดยอดมากครับคุณ TTT แนวทางที่ผมใช้มันคนละเรื่องกันเลยครับ ที่ผ่านมาผมเข้าใจหลักของบาร์โค้ดผิดมาตลอดเลยครับ วันนี้ผมได้ข้อมูลที่แจ่มแจ้งเลยครับ
Back to Top
Reply by Message on : 29/5/2560 15:49:32
TTT
(R23448)
เลขบัตรประชาชน 13 หลัก ที่เราใช้ หลักสุดท้ายก็ใช้หลักการณ์นี้เหมือนกันครับ

นอกเรื่องนิด:
ยินดีครับ อยากให้ทุกคนใช้ MS Access พัฒนางานของตัวเองให้ได้ประโยชน์สูงสุด ทำให้เห็นว่าทุกคนสามารถใช้ประโยชน์จากมันได้ง่ายๆ ไม่ยุ่งยาก ไม่ว่าคุณมีของสะสมมากจนอยากเก็บฐานข้อมูล ถึงการทำมาค้าขาย ธุรกิจขนาดกลาง ศึกษาได้ด้วยตัวเอง เพียงแค่มีคนคอยแนะนำบ้าง บางกรณี

ผมยังมีวิธีการทำ QR Code อยู่อีก หลักการณ์คล้ายแบบ EAN-13 แต่ยังไม่มีเวลาทำให้ดู เพราะอยากทำคลิปอีกหลายอย่างในลิสทั้งเรื่อง
- Ribbon Menu ก็ยังไม่ได้ทำ
- การเขียน ER-Diagram จนถึงการทำฐานข้อมูลใน MS Access ก็ยังไม่ได้ทำ งานหินมาก
- QR-Code และ อื่นๆอีกมาก

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

ยังไงก็ฝากติดตาม YouTube กันไปนะครับ อาจได้มีโอกาสทำเนื้อหาที่อยากให้ทุกคนได้ประโยชน์จากมันมากที่สุด เข้าสู่ยุค 4.0 ที่ฝันกัน (คงเป็นจริงซักวัน) พัฒนาตัวเอง พัฒนางาน ชาติก็พัฒนาครับ ใครมีความรู้อะไรก็ช่วยๆกันแบ่งปันกัน ยุคใหม่คงต้องใช้สื่อวีดีโอจะได้ประโยชน์มากกว่า แต่ที่นี่ผมก็ยังแวะมาอ่านและช่วยตอบเท่าที่ผมพอจะรู้อยู่เสมอนะครับ



Back to Top
Reply by Message on : 2/6/2560 16:33:06
prattrick
(R23512)
รอฟังก์ชั่นของ QR Code ครับ
Back to Top
Reply by Message on : 16/6/2560 5:21:23
ทวีชัย
(R23603)
ผมประสบปัญหา ไม่ทราบว่าจะแก้ไขอย่างไร copy โดยตรง EAN13

    If Asc(Mid$(chaine$, i%, 1)) < 48 Or Asc(Mid$(chaine$, i%, 1)) > 57 Then

ตรง Mid$ ขึ้น compile error cannot file project libary
Back to Top
Reply by Message on : 16/6/2560 5:34:27
ทวีชัย
(R23604)

ตามนี้ครับ

Back to Top
Reply by Message on : 16/6/2560 5:38:15
ทวีชัย
(R23605)
[/IMG]
Back to Top
Reply by Message on : 17/6/2560 5:03:03
wanida
(R23618)
ลองทำตาม กลับมองไม่เห็น barcode เลย แม้ visible is ok ช่วยแนะนำด้วยค่ะ
Back to Top
Reply by Message on : 17/6/2560 5:04:22
Wanida
(R23619)
ลืมบอก EAN13 ค่ะ
Back to Top
Reply by Message on : 23/6/2560 13:13:55
TTT
(R23657)
@ทวีชัย โค๊ดไม่น่าผิดนะครับ ลอง Copy โค๊ดใต้ลิงด์วีดีโอดีกว่าครับ เพราะหากคุณเปิด IE Edge แล้ว copy โค๊ดในเว็บนี้ แล้วไปวางมันจะมีอัขระแปลกๆซ่อนอยู่ทำให้โค๊ด Error ได้ครับ

@Wanida ลองดู VDO ที่ผมแนะนำดูครับ ผมว่ามันน่าจะได้แล้วนะ ไม่ยากเลยนะครับการทำ

https://youtu.be/3KRFAZmrlHk
Back to Top
Page:   << Prev 1 2

Reply

 *Indicates required fields
Format:
Bold Under Line Italic Add Hyperlink Add Email Link Italic List Indent Add Image Emoticons Insert code Mode:
Message:*
Your Name*:
Normal word*: Please input : ไทยแอ็คเซส
+++ webboard source: ASPThai.Net Webboard 6.0 webbord +++++++ admin : yeadram +++