73
ห้อง MS Access / : การแสดงรหัสไปรษณีย์ จากการใช้เครื่องอ่านบัตรประชาชน
« เมื่อ: 29 มิ.ย. 63 , 10:11:13 »
ทำได้แล้วค่ะ ขอบคุณมากๆนะคะ
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
ลองดูตัวอย่างนี้นะครับโค๊ด: [Select]Private Sub txt_district_AfterUpdate()
ผมใช้การสร้างตัวแปรมา Replace ให้เหมือนกับข้อมูลในฐาน แล้ว Dlookup กับคิวรี่ชื่อ DATA ครับ
Dim Strprovince, Stramphur, Strdistrict As String
Strprovince = Replace(Replace(Replace(Me.txt_province, "จังหวัด", ""), "จ.", ""), "กรุงเทพฯ", "กรุงเทพมหานคร")
Stramphur = Replace(Replace(Replace(Me.txt_amphur, "อำเภอ", ""), "เขต", ""), "อ.", "")
Strdistrict = Replace(Replace(Replace(Me.txt_district, "แขวง", ""), "ตำบล", ""), "ต.", "")
Me.txt_zipcode = DLookup("post_code", "DATA", "district_th= '" & Strdistrict & "' AND amphur_TH = '" & Stramphur & "' and Province_th = '" & Strprovince & "'")
End Sub
ถ้ามีแบบไหนผิดพลาดเพิ่มเติมอีกก็บอกได้นะครับทำกันจนจะสำเร็จละครับ สู้ๆ
น้องไปแก้ Event ของ คอมโบบ๊อก cb_district AfterUpdate เป็นแบบนี้นะครับ
Private Sub cb_district_AfterUpdate()
Me.txt_zipcode = DLookup("post_code", "tb_district", "district_th= '" & Replace(Me.cb_district, "แขวง", "") & "' AND amphur_id = " & Me.cb_amphur.Column(0, Me.cb_amphur.ListIndex))
End Sub
โดยเครื่องแสกนถ้าได้คำว่าแขวงติดมา แต่ตอนจะแสดงข้อมูลเราใช้ Replace ตัดแขวงออกให้ก็จะแสดงข้อมูลได้ปกติ
ไม่แน่ใจนะครับ ลองสร้าง Database Instance อีกตัวเพื่อทดลองก่อน ด้วยการ Clone จาก Instance ที่มีอยู่ แล้วแก้ให้ Collation ของ Instance ตัวใหม่ให้รองรับภาษาไทย
https://langisser.wordpress.com/2013/05/28/แก้ปัญหาไม่แสดงลภาษาไท/ แล้วก็ลิงค์มาเป็น Linked Table ใน Access จากนั้นทดลองเขียน SQL โดยมีเงื่อนไขหาข้อมูลภาษาไทย ทำทั้งใน SQL Server และใน Access ดู นอกจากนี้ เมื่อเปลี่ยน Collation แล้ว น่าจะทำให้ไม่ต้องใส่ Prefix N แม้จะเขียน SQL ในตัว SQL Server เองก็ตาม
ถ้าทำแล้วยังไม่ได้ ต้องรอผู้รู้ท่านอื่นมาให้คำแนะนำต่อไป
ข้อมูลใน Table แสดงภาษาไทยปรกตินะคะ ไม่ได้แสดง ???? แต่เวลาค้นหาด้วยภาษาไทย ไม่เจอ ถ้าใส่ N'สม' แบบนี้เจอ
อยากรู้ว่าตอนนี้ Server Collation, Database Collation มีค่าเป็นอะไรครับ
มันเป็นลักษณะคำสงวนของ MS Access (Wildcard Characters) ลองเพิ่ม single quote เป็นสองตัวดูครับว่าเจอป่าว
SQL = "SELECT Title, Name, Surname " _
& "FROM Employee " _
& "WHERE Name = N''" & Me.txtSearchName & "''"
ลองแล้ว ยังไม่ได้ค่ะ
รบกวนสอบถามนะครับว่าทำไมต้องใช้ datatype แบบ Nvarchar ใช้ Varchar ไม่ได้หรือครับ แบบไม่ใช่ข้อมูล Unicode
เพราะเก็บพวกชื่อ นามสกุลพนักงาน Varchar จะไม่มีปัญหาเรื่องพวกนี้เลย
เพราะถ้าเก็บชื่อพนักงาน Varchar สามารถเก็บ ชื่อภาษาไทย และ อังกฤษได้อยู่แล้ว
ผมสอบถามนะครับพอดีไม่ได้ใช้ SQL SERVER
ปล เปลี่ยนเป็น Varchar ได้ไหม
สร้างคิวรี่ขึ้นมาใช้ Replace เพื่อ ตัดคำออกเอาเฉพาะชื่อจังหวัดเช่น จ.ขอนแก่น หรือ จังหวัดขอนแก่น จะเหลือ ขอนแก่น ครับ
ส่วนอำเภอกับตำบลใช้วิธีเดี่ยวกันครับ
ในแต่ละฟิลล์ใส่โค้ดตัดคำแบบนี้เข้าไปนะครับ
จังหวัด: Replace(Replace([province],"จ.",""),"จังหวัด","")
อำเภอ: Replace(Replace([district],"อ.",""),"อำเภอ","")
ตำบล: Replace(Replace([Sub-district],"ต.",""),"ตำบล","")
เมื่อใช้ Replace แล้วก็นำคิวรี่นี้แหละไป Join Table ให้ได้เลขไปรษณีย์
ถ้าข้อมูล File Address มีคำว่าอำเภอก็ตัดคำที่ไม่ต้องการออกไปให้เหมือนกัน ก็ใช้ได้แล้วครับ
ผมมีตัวอย่าง อีกวิธี
โดยต้องตัดคำว่าแขวง ตัดคำว่าเขต ตัดคำว่าอำเภอ ตัดคำว่าจังหวัดออกไป
โดยการค้นหาคือ ค้นจาก ตำบล อำเภอ จังหวัด เรียงกันแบบนี้ แล้วจะได้รหัสไปรษณีย์นะครับ
เช่น ทุ่งพญาไท ราชเทวี กรุงเทพมหานคร จะได้ 10400
บางรัก บางรัก กรุงเทพมหานคร จะได้ 10500 เป็นต้น
วิธีนี้ก็ใช้ประยุกต์กับชุดข้อมูลที่อยู่จาก เครื่องแสกนได้ลองไปทดสอบดูครับไม่รู้จะใช้ได้หรือเปล่า
โดยให้ดูการเชื่อมข้อมูลจาก Query DATA
มันเป็นลักษณะคำสงวนของ MS Access (Wildcard Characters) ลองเพิ่ม single quote เป็นสองตัวดูครับว่าเจอป่าว
SQL = "SELECT Title, Name, Surname " _
& "FROM Employee " _
& "WHERE Name = N''" & Me.txtSearchName & "''"
ขอดูข้อมูลในตารางเบื้องต้นหน่อยครับ
1.ผมไม่เข้าใจ Criteria ว่า N ด้านหน้านั้นคือต้องการทำอะไร
2.N'สม' คือต้องการหาชื่อพนักงานชื่อ สม ใช่หรือไม่
เพราะโดยปกติ จะใส่แบบนี้
SQL = "SELECT Title, Name, Surname " _
& "FROM Employee " _
& "WHERE Name = '" & Me.txtSearchName & "' "
Me.RecordSource = SQL
หรือแบบนี้
Forms![ชื่อฟอร์ม].Form.Filter = "[name] = '" & Me.txtSearchName & "'"
Forms![ชื่อฟอร์ม].Form.FilterOn = True
ไม่แน่ใจนะครับ ลองสร้าง Database Instance อีกตัวเพื่อทดลองก่อน ด้วยการ Clone จาก Instance ที่มีอยู่ แล้วแก้ให้ Collation ของ Instance ตัวใหม่ให้รองรับภาษาไทย
https://langisser.wordpress.com/2013/05/28/แก้ปัญหาไม่แสดงลภาษาไท/ แล้วก็ลิงค์มาเป็น Linked Table ใน Access จากนั้นทดลองเขียน SQL โดยมีเงื่อนไขหาข้อมูลภาษาไทย ทำทั้งใน SQL Server และใน Access ดู นอกจากนี้ เมื่อเปลี่ยน Collation แล้ว น่าจะทำให้ไม่ต้องใส่ Prefix N แม้จะเขียน SQL ในตัว SQL Server เองก็ตาม
ถ้าทำแล้วยังไม่ได้ ต้องรอผู้รู้ท่านอื่นมาให้คำแนะนำต่อไป
SQL = "SELECT Title, Name, Surname " _
& "FROM Employee " _
& "WHERE Name = N'" & Me.txtSearchName & "' "
หลังตำแหน่ง 8 ในช่อง Text Qualifier ให้เลือกเป็น {none} เสร็จแล้วบันทึกเป็น Specification ตัวใหม่ พอเวลาจะ export ก็ให้อ้าง Specification ตัวใหม่นี้ครับ
ถามผมกลับอย่างนี้นี่ผมงงเลย ตกลงคุณไม่ได้เป็นคนสร้าง spec เองเหรอ แล้วคุณไปเอาชื่อ spec จากไหนมาใส่ในคำสั่ง DoCmd.TransferText ?
เอาอย่างงี้ เปิดคิวรี่แล้วกดตามลำดับ 1 - 6 ที่แสดงครับ สำหรับตำแหน่งที่ 8 ถ้าเลือกเป็น Fixed Width ก่อนกดตำแหน่งที่4 หลังจากเลือก Specification แล้ว ตารางของฟิลด์ (ตำแหน่งที่ 7) จะแสดงตำแหน่งเริ่มต้นและความยาวของฟิลด์ออกมาด้วย ที่นี้ก็ขึ้นกับคุณออกแบบว่าจะให้ export เป็นแบบไหน ออกแบบแบบไหน ในคำสั่ง DoCmd.TransferText ก็ให้ใช้ตัวเลือกเพื่อ export แบบนั้นด้วยนะครับ
ตำแหน่งที่ 4 หมายถึงคลิกที่ปุ่ม Spec... นะครับ
หรือไม่ก็ ลอง export โดยไม่ใช้ spec ด้วยคำสั่ง
DoCmd.TransferText acExportDelim, , qry, myPath, True
ดูว่าได้ผลตามต้องการหรือไม่