แสดงกระทู้

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.


Messages - kitisak

หน้า: 1 [2] 3 4 5
19
ห้อง MS Access / : Code ใช้งานไม่ได้
« เมื่อ: 21 มี.ค. 64 , 13:57:53 »
ไฟล์ใหญ่ไหมครับส่งมาผมลองเปิดดู error หน่อย
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

20
ห้อง MS Access / : ลบ Code เราเฉยเลย
« เมื่อ: 20 มี.ค. 64 , 12:17:37 »
ปัญหานี้เรียก corruption (เป็นปัญหาร้ายแรงเหมือนการเมืองเลย 555)
ผมเจอมาหลายครั้ง
สาเหตุ ทั้งหมดเกิดจาก network error คือ ผมเก็บ back-end กับ front-end (accde) ไว้คนละที่ พอ network ใช้งานไม่ได้ /หรือช้ามาก โปรแกรมค้างเลย (ไม่ได้เกิดทุกครั้ง) โดยเฉพาะตอนแก้ไข code vba
ส่วนสาเหตุอื่นที่เคยอ่านเจอ ก็เปลี่ยน versions MS 32-64 bit
เมื่อเกิดปัญหาแล้วแก้ไม่ได้
ดังนั้น ทุกครั้ง ก่อนแก้ไขโปรแกรมควร Backup ก่อนทุกครั้ง

ลองศึกษาจากนี่ดูครับ

http://allenbrowne.com/ser-25.html (prevent corruption)
http://allenbrowne.com/ser-47.html (fix corruption)


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

21
ห้อง MS Access / : ลบ Code เราเฉยเลย
« เมื่อ: 19 มี.ค. 64 , 15:14:42 »
เรื่องนี้มักเกิดจากไฟล์ข้ามเวอร์ชั่น หรือข้ามแพลตฟอร์ม (เช่นจาก 64 บิตเป็น 32 บิต) ซึ่งถ้า Code ไหนที่ Access เวอร์ชั่นที่เปิดล่าสุดไม่รู้จัก มันจะลบให้เลย (เกลียดมันก็ตรงนี้แหละ) เคยเจอมาตอน เปลี่ยน Access 2003 เป็น 2016
วิธีการแก้ไข ไม่มีครับ เพราะมันหายแล้วหายเลย

แนะนำว่าให้เปิดด้วยเครื่องที่ไม่มีปัญหา แล้ว Save ตัว VBA ออกมาก่อน จากนั้นค่อยๆ ใส่กลับเข้าไปในเครื่องใหม่ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

22
ห้อง MS Access / : ลบ Code เราเฉยเลย
« เมื่อ: 19 มี.ค. 64 , 12:53:11 »
ต้องมีอะไรเปลี่ยนไปเช่น windows หรือ Office
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

23
ท่านไปจับ Event Before Update ก็ไม่ได้อยู่แล้วครับ
เพราะตัวแปรที่เก็บค่าไว้จะถูกให้รับค่าใหม่ก่อนที่จะได้แสดงผล
ตรงที่ท่านเรียกใช้ NameDocinSu นั้นท่านจะมาใส่ไว้ใน beforupdate ไม่ได้ครับ
ควรจะให้ทำงานที่ event อื่นแล้วค่อยมาเรียกใช้ OldItem ใน BeforeUpdate เอา
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

24
ห้อง MS Access / : ตรวจสอบนามสกุลไฟล์
« เมื่อ: 18 มี.ค. 64 , 08:24:22 »
โค๊ด: [Select]
Private Sub Command6_Click()
Dim extensionName As String
extensionName = Dir(Me.txtPath & (Me.txtFileName & "*"))
extensionName = Right$(extensionName, Len(extensionName) - InStrRev(extensionName, "."))
Me.txtExtensionName = extensionName
End Sub

ลองดูตัวอย่างเอานะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

25
ห้อง MS Access / : ตรวจสอบนามสกุลไฟล์
« เมื่อ: 17 มี.ค. 64 , 14:54:11 »
ใน textbox มีแต่ชื่อไฟล์ ไม่มีนามสกุลไฟล์ เราจะตรวจสอบได้อย่างไรครับ

ใน textbox มี path และ ชื่อไฟล์ หรือเปล่าครับ
เพราะถ้าจะระบุชื่อไฟล์แล้วต้องค้นหาไฟล์นั้นมาเพื่อจะดูนามสกุลไฟล์
ที่ต้องระบุตำแหน่งไฟล์เพราะ ไฟล์ในเครื่องทั้งหมดต้องมีชื่อซ้ำกันอยู่แล้วครับ
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

26
เราจะเก็บค่า text box ไว้ในตัวแปรก่อนมีการเปลี่ยนแปลงได้อย่างไร
ลองในเหตุการณ์ before update แล้วไม่ได้ครับ

ให้ประกาศตัวแปรไว้บนสุดของคำสั่งจะทำใน Module ก็ได้ครับ หรือทำใน โค้ดของ Form ก็แล้วแต่
เช่น

Public getstring As String

Private Sub Command0_Click()
getstring = Nz(Me.textboxName)
------คำสั่งอื่นๆที่มี------
End Sub

เมื่อกดคลิ๊กคำสั่ง ของ Command0
ค่าจาก  textboxName จะประกาศเก็บไว้ในตัวแปร getstring ครับ
โดยตัวแปรอยู่บนสุดของคำสั่งอื่นๆ เพื่อให้มีการกำหนดเก็บค่าไว้ในตัวแปรก่อนที่จะทำขั้นตอนการเปลี่ยนแปลงต่อๆไป

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

27
ห้อง MS Access / : ตรวจสอบนามสกุลไฟล์
« เมื่อ: 16 มี.ค. 64 , 12:53:25 »
เราจะตรวจสอบนามสกุลไฟล์
จากชื่อไฟล์ที่กำหนดใน text box ได้อย่างไรครับ

สร้างตัวแปรขึ้นมาแล้วใช้การกำหนดแบบนี้
สมมุติ textbox ชื่อ textboxName ไว้ระบุชื่อไฟล์

Dim getExtensionName As String
getExtensionName = Right$(textboxName, Len(textboxName) - InStrRev(textboxName, "."))
MsgBox getExtensionName

ในส่วนของ getExtensionName ก็จะได้นามสกุลไฟล์สามารถนำไปตรวจสอบขั้นต่อไปได้แล้วครับ
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

28
วิธีทำ
1.กำหนดแหล่งข้อมูลแถวของ Combobox TruckNO เป็น
โค๊ด: [Select]
SELECT tblTruck.TruckNO, tblTruck.TruckBrand, tblTruck.DriverName
FROM tblTruck
WHERE ((Not (tblTruck.TruckNO) Is Null));
1.1 กำหนด BoundColumn(หรือ คอลั่มที่ผู้ไว้ เท่ากับ 1)
1.2 กำหนดจำนวนคอลัมน์ 3
1.3 กำหนดความกว้างคอลัมน์ 5ซม.;0ซม.;0ซม.

2.กำหนดแหล่งข้อมูลแถวของ Combobox TruckBrand เป็น
โค๊ด: [Select]
SELECT [tblTruck].TruckBrand FROM tblTruck GROUP BY [tblTruck].TruckBrand HAVING ((Not ([tblTruck].TruckBrand) Is Null)); 2.1 กำหนด BoundColumn(หรือ คอลั่มที่ผู้ไว้ เท่ากับ 1)
2.2 กำหนดจำนวนคอลัมน์ 1
2.3 กำหนดความกว้างคอลัมน์ 5ซม.

3.กำหนดแหล่งข้อมูลแถวของ Combobox DriverName เป็น
โค๊ด: [Select]
SELECT [tblTruck].DriverName FROM tblTruck GROUP BY [tblTruck].DriverName HAVING ((Not ([tblTruck].DriverName) Is Null)); 3.1 กำหนด BoundColumn(หรือ คอลั่มที่ผู้ไว้ เท่ากับ 1)
3.2 กำหนดจำนวนคอลัมน์ 1
3.3 กำหนดความกว้างคอลัมน์ 5ซม.


4.เขียนโค้ด Event เมื่ออัพเดท ของcombobox TruckNO เป็น
โค๊ด: [Select]
Private Sub TruckNO_AfterUpdate()
If Not IsNull(Me.TruckNO) Then
Me.TruckBrand = Me.TruckNO.Column(1)
Me.DriverName = Me.TruckNO.Column(2)
Else
Me.TruckBrand = Null
Me.DriverName = Null
End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

29
ห้อง MS Access / : Invalid procedure call or argument
« เมื่อ: 03 ส.ค. 63 , 17:32:14 »
เหมือนว่าต้องใช้ Access 2007 เปิดเท่านั้น ผมมีแต่ Access 2010 เปิดมา ก็มีปัญหาแต่ต่างออกไปเลย ทำอะไรไม่ได้ ผมแนะนำว่าให้คุณสร้างฐานข้อมูลเปล่าสักตัว แล้ว import ทุกอย่างจากโปรแกรมตัวนี้เข้ามาใหม่ อาจจะช่วยให้ทำการ compile ได้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

30
ห้อง MS Access / : Invalid procedure call or argument
« เมื่อ: 03 ส.ค. 63 , 09:00:11 »
มีสั่งรันแมโคร Autoexec หรือสั่งให้ฟอร์มทำงานทันทีเมื่อเข้า Access หรือไม่ ถ้ามี ก่อนเข้า Access ให้กดคีย์ SHIFT ค้างไว้จนกว่าหน้าต่างของ Access จะแสดงเรียบร้อยแล้ว แล้วลอง compile อีกครั้งครับ หรือถ้าโปรแกรมและข้อมูลไม่เป็นความลับ ลองโหลดขึ้นเวปบอร์ดนี้เพื่อให้ตรวจสอบครับ
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

31
ห้อง MS Access / : Invalid procedure call or argument
« เมื่อ: 01 ส.ค. 63 , 18:28:43 »
ลอง compile แล้วดูว่ามีแจ้งที่ผิดที่ไหนในโค้ดหรือไม่ ถ้าไม่มี อาจเป็นไปได้ว่ามีการแก้ procedure ที่จุดไหนแล้วมีจำนวน/ประเภทของ argument ที่ส่งไป procedure นั้น แตกต่างจากเดิม
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

32
ห้อง MS Access / : Combo box Date picker
« เมื่อ: 03 ก.ค. 63 , 22:37:11 »
ผมได้ทำฟอร์มตัวอย่างแสดงการเลือก Date Picker ตามลักษณะที่ต้องการ โดยมีการตรวจสอบความถูกต้องของวันที่ระหว่างการเลือก แต่ผมไม่การันตีว่าจะตรวจสอบได้ถูกต้อง 100% หรือมีที่ผิดพลาดที่ไหนหรือไม่นะครับ ลองดูรายละเอียดการทำงานใน comment ภายในโค้ดที่ผมได้เขียนอธิบายไว้แล้วครับ

แก้บัก : ใน Private Sub cbMonth_AfterUpdate() บรรทัดต่อจาก Case 2 ให้แก้เป็น If Me.cbDay >= 29 Then
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

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

จังหวัด: Replace(Replace([province],"จ.",""),"จังหวัด","")
อำเภอ: Replace(Replace([district],"อ.",""),"อำเภอ","")
ตำบล: Replace(Replace([Sub-district],"ต.",""),"ตำบล","")

เมื่อใช้ Replace แล้วก็นำคิวรี่นี้แหละไป Join Table ให้ได้เลขไปรษณีย์
ถ้าข้อมูล File Address มีคำว่าอำเภอก็ตัดคำที่ไม่ต้องการออกไปให้เหมือนกัน ก็ใช้ได้แล้วครับ

ผมมีตัวอย่าง อีกวิธี

โดยต้องตัดคำว่าแขวง ตัดคำว่าเขต ตัดคำว่าอำเภอ ตัดคำว่าจังหวัดออกไป
โดยการค้นหาคือ ค้นจาก ตำบล อำเภอ จังหวัด เรียงกันแบบนี้ แล้วจะได้รหัสไปรษณีย์นะครับ
เช่น ทุ่งพญาไท ราชเทวี กรุงเทพมหานคร จะได้ 10400
      บางรัก บางรัก กรุงเทพมหานคร จะได้ 10500 เป็นต้น
วิธีนี้ก็ใช้ประยุกต์กับชุดข้อมูลที่อยู่จาก เครื่องแสกนได้ลองไปทดสอบดูครับไม่รู้จะใช้ได้หรือเปล่า
โดยให้ดูการเชื่อมข้อมูลจาก Query DATA
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

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

โดยปกติเครื่องอ่านบัตรประชาชนจะแสกนได้รายละเอียด ของที่อยู่แยกเป็นฟิลล์ๆไป (แต่บางตัว รายละเอียดจะติดกันเป็น ข้อความยาว เราจะทำวิธีนี้ไม่ได้)
สำหรับเครื่องตัวที่แยกฟิลล์มาให้เราสามารถนำไป Join Table เพื่อหารหัสไปรษณีย์ได้ครับ
โดยไฟล์ access ที่มีรายละเอียด เกี่ยวกับ จังหวัด อำเภอ ตำบล จนถึงรหัสไปรษณีย์ ดูได้จากไฟล์ที่ลิ้งด้านล่างครับ
https://www.thai-access.com/index.php?action=dlattach;topic=571.0;attach=481           
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

35
ใช้ Function Replace ช่วยครับ

Private Sub TextboxName_AfterUpdate()
Dim strWord As String
If Not IsNull(Me.TextboxName) Then
strWord = Me.TextboxName
Me.TextboxName1 = Replace(Replace(Replace(strWord, "*", ""), "/", ""), "?", "")
End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

36
ถ้าต้องการให้กรอกเฉพาะภาษาไทย หรือ กรอกเฉพาะภาษาอังกฤษ  ครับ

ทำแบบข้างบนละครับ ว่าเราต้องการคีย์ไหนบ้าง ถ้ามันอยู่เรียงกันก็ใช้ >= and <=  เพื่อลดจำนวนโค้ดได้ ถ้าอยู่ห่างๆกันใช้ Or มาช่วย
ถ้าอยากรู้ว่าตัวอักษรภาษาไทย ที่เรากดนั้น KeyAscii เลขอะไรก็ใส่โค้ดแบบนี้

Private Sub TextBoxName_KeyPress(KeyAscii As Integer)
     MsgBox KeyAscii
End Sub

แล้วจดไว้เพื่อนำมาเข้าเงื่อนไข ที่ต้องการ
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

หน้า: 1 [2] 3 4 5