แสดงกระทู้

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 - สันติสุข

หน้า: 1 2 3 4 [5] 6 7 8 ... 29
73
งั้นก็ไม่เกี่ยวกับ Access แล้วมั้งครับ  ถ้าเกี่ยวกับ DLL จริงตามข้อความใน Error   คุณไปเช็คในโปรแกรมว่าเรียกใช้ DLL ตัวไหนบ้าง เครื่องนั้นอาจไม่ได้มี DLL ตัวนั้นครับ

74
ให้ทำการ Compile โค้ดถ้ายังไม่ได้ทำ  Access อาจจะแสดง error ที่แฝงอยู่  ถ้าไม่มี error แล้ว ต่อไปก็ให้เช็คดูที่ Before Update property ของฟอร์มหรือคอนโทรลตัวไหนสักอัน โดยเฉพาะฟอร์มหรือคอนโทรลที่ทำงานเป็นตัวแรกๆเมื่อเริ่มโปรแกรม ให้ดูว่าเรียกแมคโครผิด หรือใส่อะไรผิดหรือไม่ หรือโค้ดภายในของ Before Update event นั้นมีอะไรที่เกี่ยวกับ DLL หรือไม่ และ DLL นั้นทำงานได้จริงหรือเปล่า Declare DLL แบบ 32 หรือ 64 bit ตามรุ่นของ Runtime Access ที่ใช้หรือไม่

75
ถ้าต้องการสั่งให้ Action Query ไม่ต้องถามยืนยันทุกครั้งที่ทำงาน ก็ใช้โค้ด application.SetOption "Confirm Action Queries", False ใส่ไว้ในส่วนต้นๆของโค้ดที่ทำงานทุกครั้งที่เปิดแอปพลิเคชั่นก็ได้

76
ใส่ function procedure ที่ตรวจข้อความ T (ในที่นี้หมายถึง รหัสผ่าน) ข้างล่างนี้ ลงใน Module ที่มีอยู่แล้ว หรือสร้างใหม่ก็ได้  ถ้าตรวจสอบผ่าน ก็แปลว่า รหัสผ่านนั้นครบเงื่อนไข 4 ข้อดังนี้ 1.ความยาว 8 ตัวอักษร 2.มีตัวเลข 0-9 3.มีตัวอักษร a-z, A-Z 4.มีตัวอักษรพิเศษ
โค๊ด: [Select]
Public Function IsValidPSW(T As String) As Boolean

Dim II As Integer
Dim IsNum As Boolean, IsChr As Boolean, IsSpc As Boolean

If Len(์T) <> 8 Then IsValidPSW = False: Exit Function

IsNum = False: IsChr = False: IsSpc = False
For II = 1 To 8
    Select Case Asc(Mid(T, II, 1))
        Case 48 To 57: IsNum = True
        Case 65 To 90, 97 To 122: IsChr = True
        Case 33 To 47, 58 To 64, 91 To 96, 123 To 126: IsSpc = True
        Case Else: IsValidPSW = False: Exit Function
    End Select
Next II
IsValidPSW = IsNum And IsChr And IsSpc
End Function

เวลาจะตรวจสอบก็เขียนว่า
If Not IsValidPSW(nz(Me.ชื่อเท็กซ์บ็อกซ์รหัสผ่าน)) then
   Cancel = True
   MsgBox "รหัสผ่านต้องเป็นตัวอักษรภาษาอังกฤษผสมตัวเลขและอักขระพิเศษให้ได้ความยาว 8 ตัวอักษร"
End If

77
ทุกฟิลด์ที่เป็นตัวเชื่อมระหว่างเทเบิลต้องมีค่า แต่ฟิลด์ Place, Lot จาก 2 รูปสุดท้ายไม่มีค่า จึงไม่สามารถเชื่อมไปหาเทเบิลอื่นเพื่อเอาฟิลด์มาแสดงได้ครับ

78
คลิกในกรอบสีเขียวครับ

79
ในรูปจากโพสคำตอบ#2ที่ส่งมา ด้านล่างตัวหนาๆที่เขียนว่า group on voucher_s_id ให้คลิกที่นั่น แล้วคลิกคำว่า expression ที่อยู่ด้านล่าง  แล้วจะมีกรอบขึ้นมาให้ใส่ expression  ก็ใส่ตามที่ผมบอก

80
แทนที่เราจะ group on voucher_s_id  เราต้อง group on expression โดยใส่ left(voucher_s_id, 2) ในกรอบที่สร้าง expression ครับ ส่วน Running Sum ก็เลือกเป็น No หมดครับ

81
ตรวจสอบว่า Running Sum property ของฟิลด์ผลรวม เป็น No หรือไม่

82
ขนาดที่ใหญ่ขึ้นทุกครั้งที่มีการแก้ไข ไม่ได้เกี่ยวอะไรกับการทำ Linked-Table ครับ แต่เพราะ Access ไม่ได้เคลียร์พื้นที่ของเก่าของส่วนต่างๆ(ฟอร์ม,รายงาน,...)คืนให้ OS  ถ้าทำอัตโนมัติ(ซึ่งก็ทำได้)อาจจะเสียเวลาทุกครั้งที่ปิดไฟล์ เราสั่งให้ Access กระชับขนาดไฟล์ได้ด้วยปุ่ม Compact and Repair ครับ  ส่วนทำอัตโนมัติ ให้คลิกเลือก Compact on Close ใน Access Option  แต่จากขนาดไฟล์ที่แสดงมาให้ดู ถือว่าเล็กมากๆนะครับ

สำหรับการเปิดไฟล์โดยไม่ใช้ Linked-Table ก็ทำได้โดยใช้ ADO object model (ตัวนี้ผมไม่ได้ใช้)  แทนการใช้ DAO object model ที่ใช้เป็นส่วนใหญ่ใน Access  แต่ทำไปทำไมครับ มีเหตุผลไหม

83
ในส่วน Group On expression ที่ 2  ให้คลิกที่ More และเปลี่ยนจาก without a footer section ไปเป็น with a footer section  แต่ถ้าเป็น Access 2003 จะมีหน้า interface ที่ต่างออกไป ลองดูใน  http://www.teacherclick.com/access2003/t_12_6.htm

84
- บันทึกการ login และ logout ก็เขียนคำสั่งเพื่อบันทึกเรคอร์ดลงเทเบิลที่สร้างใหม่ โดยใส่ไว้ใน Form_Load และ Form_Unload event procedure ของทั้งฟอร์ม frm_Setup และ frm_MainMenu ครับ

- บันทึกการเปิดฟอร์ม ก็เขียนคำสั่งโดยใส่ไว้ก่อนคำสั่ง DoCmd.OpenForm ต่างๆใน frm_MainMenu

- บันทึกการเปิดฟอร์มอัพเดตล่าสุด ไม่แน่ใจว่าหมายถึงบันทึกการแก้ไขเรคอร์ดในฟอร์มนั้นๆหรือไม่ ถ้าใช่ ก็เขียนคำสั่งไว้ใน Form_AfterUpdate event procedure ของฟอร์มนั้นๆ

85
ที่ BeforeUpdate event procedure ของเท็กซ์บ็อกซ์ที่ใส่รหัสผ่าน ให้ใส่โค้ด

If     Not(nz(Me.ชื่อเท็กซ์บ็อกซ์รหัสผ่าน) like "[A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]") _
Or   Not(nz(Me.ชื่อเท็กซ์บ็อกซ์รหัสผ่าน) like "*[A-Z]*") _
Or   Not(nz(Me.ชื่อเท็กซ์บ็อกซ์รหัสผ่าน) like "*[0-9]*") Then
   Cancel = True
   MsgBox "รหัสผ่านต้องเป็นตัวอักษรภาษาอังกฤษผสมตัวเลขให้ได้ความยาว 8 ตัวอักษร"
End If

87
ห้อง MS Access / : Error : Could not delete from specified tables
« เมื่อ: 16 เม.ย. 63 , 18:54:02 »
ตอนทำ Linked Table เข้ามาใน Access เขาจะถามหา Primary Key ของแต่ละเทเบิล ซึ่งก็กำหนดให้เหมือนกับ Primary Key ของเทเบิลนั้นๆที่อยู่ใน MySQL ตรงนี้ไม่ทราบได้กำหนดไว้หรือไม่

88
ห้อง MS Access / : Error : Could not delete from specified tables
« เมื่อ: 16 เม.ย. 63 , 12:27:57 »
ลองเปลี่ยนเป็น .... modifieddate = #"  & format$(now(), "dd/mmm/yyyy hh:mm:ss") & "# " & _

89
แนะนำว่าหลังจากเพิ่มเรคอร์ดใหม่แล้ว ให้ไปเปิดดูเรคอร์ดนั้นด้วยโปรแกรม MySQL โดยตรงทันที หาดูว่ามีฟิลด์อะไรที่ค่าเปลี่ยนแปลงไปจากหน้าฟอร์มหรือไม่  ถ้ามี ก็เป็นไปได้ว่าน่ามีความไม่ compatible กันระหว่าง data type บนหน้าฟอร์มกับ data type บนฟิลด์ในเทเบิล ทำให้ ODBC แปลงข้อมูลโดยอัตโนมัติเพื่อให้สามารถเก็บลงเทเบิลได้ ซึ่ง Access จะมองว่านั่นคือ ข้อมูลที่เพิ่งป้อนถูกแก้ไขไปอีกทีแล้ว สิ่งที่อยู่บนหน้าฟอร์มกับเทเบิลไม่เหมือนกันแล้วนะ ดังนั้นก่อนการบันทึกข้อมูลที่เราแก้ไขด้วยตัวเราเองอีกครั้งบนเรคอร์ดที่เพิ่งเพิ่มเข้าไป   Access ก็เลยเตือนออกมาอย่างที่เห็น   สำหรับ data type อะไรใน Access ควรแปลงไปเป็น data type อะไรใน MySQL  ให้ลองหาในเวปดูนะครับ  ส่วนสาเหตุอื่นๆนี่ อาจมี แต่ผมไม่รู้แล้วครับ


หน้า: 1 2 3 4 [5] 6 7 8 ... 29