|
ขอทราบวิธีกำหนด/ตรวจสอบวันเดือนปีเป็นไทย
|
Topic by |
Message
Posted : on : 28/12/2558 7:20:05
|
มาลี
|
ขอความช่วยเหลือจากอาจารย์ทุกท่าน
หนูต้องการให้เครื่องที่เอาโปรแกรมไปเปิดใช้ ต้องใช้ระบบปฏิทินเป็นแบบไทยเท่านั้น
หากเครื่องไหนถูกตั้งค่าปฏิทินเป็นแบบอื่น(ไม่ใช่ไทย) ก็ให้มี msg.แจ้งให้ผู้ใช้ทราบ
หรือไม่ก็ทำคำสั่งให้ปรับตั้งค่าเป็นไทยโดยอัตโนมัตไปเลยก็ได้ค่ะ
|
|
|
14 Reply in this Topic. Dispaly 1 pages and you are on page number 1
Reply by |
Message
on : 29/12/2558 13:56:42
|
สมชาย (R21617)
|
ถ้าใช้ Access 2003 จะมีปัญหาเรื่องการตั้งค่า Regional Setting ซึ่งแต่ละเครื่องอาจตั้งไว้ไม่เหมือนกัน ทำให้ข้อมูลผิดเพี้ยน ถ้าใช้ Access 2007 ขึ้นไป หากออกแบบฟวิด์วันที่โดยกำหนด DataType ไว้เป็น DateTime เมื่อชี้ไปที่ฟิวด์ จะมีรูปปฏิทินขึ้นให้ ถ้าให้ User เลือกจากปฎิทิน ข้อมูลจะไม่ผิดเพี้ยนครับ โดยไม่ต้องไปสนใจว่าแต่ละเครื่องจะตั้งค่า Regional Setting ไว้อย่างไร
|
Back to Top |
|
|
Reply by |
Message
on : 1/1/2559 13:59:50
|
มาลี (R21620)
|
ขออภัยด้วยค่ะ
ติดธุระเสียหลานวัน ไม่ได้เข้ามาเปิดดูโพสเลย
หนูลองทำแล้ว มันยังไม่ตรงตามที่หนูต้องการค่ะ หนูอาจอธิบายไม่เข้าใจเท่าที่ควร
เป็นแบบนี้นะคะ โปรแกรมที่หนูทำ จะมีช่องให้ผู้ใช้กรอกวันเดือนปีเกิด และวันที่เริ่มเข้าทำงาน ของพนักงานลงไป เช่น 15/01/2550 เป็นต้น จากนั้นก็จะใช้ข้อมูลนี้ ไปคำนวณอายุตัว และอายุงานของผู้นั้น (ภายใต้การทำงานของโค้ดคำนวณอายุ)
ปัญหาคือ เมื่อผู้ใช้กรอกข้อมูลดังกล่าวลงไป หากเครื่องนั้นตั้งเป็นปี พ.ศ. มันก็ไม่เป็นปัญหาอะไร สามารถแสดงผลออกมาได้ถูกต้อง แต่หากไปเจอเครื่องที่ถูกตั้งเป็นปี ค.ศ. มันก็จะ Error เพราะเลขของปีที่กรอกมันจะกลายเป็นล้ำหน้าไปในอนาคต 535 ปี เพราะปี ค.ศ. 2550 มันยังมาไม่ถึง
นี่เป็นปัญหาเฉพาะหน้าขณะที่ผู้ใช้กรอกข้อมูล ฝ่ายผู้ใช้ก็มั่นใจว่ากรอกไปไม่ผิดตามเอกสารทุกอย่าง หารู้ไม่ว่าเครื่องนั้นมันถูกตั้งค่าเป็นปี ค.ศ. อยู่
ตรงนี้แหละ คือประเด็นที่หนูอยากหาทางแก้ ว่าจะทำอย่างไรที่จะแจ้งเตือนให้ผู้ใช้ทราบก่อนว่า เครื่องที่กำลังทำงานอยู่นั้นยังไม่ได้ตั้งเป็นปี พศ.
ประมาณนี้แหละค่ะอาจารย์
|
Back to Top |
|
|
Reply by |
Message
on : 1/1/2559 15:32:30
|
ditasilk (R21621)
|
ดูจาก link ที่ให้ไว้ครับ
Public Function bYear(ByVal yourDate As Date) As Long
bYear = Year(yourDate)
'ถ้า GetUserLocaleInfo(GetSystemDefaultLCID(), &H1009) ให้ค่า เป็น 7
'แสดงว่า เป็นวันที่และ ปีไทย (พ.ศ.) ก็ไม่ต้องทำอะไรกับวันที่และปี แต่ถ้า ไม่
'เท่ากับ 7 ต้อง บวก ปี ด้วย 543
If GetUserLocaleInfo(GetSystemDefaultLCID(), &H1009) <> 7 Then
bYear = Year(yourDate) + 543
End If
End Function
|
Back to Top |
|
|
Reply by |
Message
on : 1/1/2559 16:31:17
|
มาลี (R21622)
|
ขอบคุณค่ะอาจารย์
หนูจะลองทำตามที่ท่านแนะนำดูนะคะ ได้เรื่องประการใดจะเข้ามารายงานให้ทราบค่ะ
|
Back to Top |
|
|
Reply by |
Message
on : 1/1/2559 17:01:36
|
มาลี (R21623)
|
ทดลองสร้างโมดูลแล้วไม่ผ่าน ติด Error แดงเลยค่ะ
Option Compare Database
Option Explicit
Public Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Public Declare Function GetLocaleInfo Lib "kernel32" _
()
Alias "GetLocaleInfoA" _
(ByVal Locale As Long, _
ByVal LCType As Long, _
ByVal lpLCData As String, _
ByVal cchData As Long) As Long
Public Function GetUserLocaleInfo(ByVal dwLocaleID As Long, ByVal dwLCType As Long) As String
Dim sReturn As String
Dim r As Long
r = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
If r Then
sReturn = Space$(r)
r = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
If r Then GetUserLocaleInfo = Left$(sReturn, r - 1)
End If
End Function
Public Function mYear(ByVal yourDate As Date) As Long
mYear = Year(yourDate)
If GetUserLocaleInfo(GetSystemDefaultLCID(), &H1009) = 7 Then mYear = Year(yourDate) - 543
End Function
Public Function bYear(ByVal yourDate As Date) As Long
bYear = Year(yourDate)
If GetUserLocaleInfo(GetSystemDefaultLCID(), &H1009) <> 7 Then bYear = Year(yourDate) + 543
End Function
ไม่ทราบว่าหนูทำผิดตรงไหน รบกวนท่านช่วยแนะนำด้วยนะคะ
ขอบคุณค่ะ
|
Back to Top |
|
|
Reply by |
Message
on : 1/1/2559 17:24:24
|
มาลี (R21624)
|
ลอง Compile แล้วขึ้น Error ตามในรูปค่ะอาจารย์

|
Back to Top |
|
|
Reply by |
Message
on : 2/1/2559 9:48:05
|
ditasilk (R21628)
|
ใช้แก้ไขตามนี้ครับ
Public Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" _
(ByVal Locale As Long, _
ByVal LCType As Long, _
ByVal lpLCData As String, _
ByVal cchData As Long) As Long
ให้สังเกตุ ขีด ( _ ) ต่อท้าย หมายถึง บอกให้รู้ว่า ยังมีข้อความต่อ แต่ต้องการให้ขึ้นบรรทัดใหม่ จะไม่ error แต่ถ้า ไม่มี ขีด เราต้อง ใช้backspace หรือ delete space เพื่อนำบรรทัดด้านล่าง ขึ้นมาต่อกัน
|
Back to Top |
|
|
Reply by |
Message
on : 2/1/2559 10:59:29
|
มาลี (R21629)
|
ได้แล้วค่ะ แก้ไข Error ในโมดูลตามที่ท่านแนะนำได้แล้ว และตั้งชื่อโมดูลว่า Calender Type
ขอเรียนถามต่อไปว่าแล้วเราจะนำไปใช้งานอย่างไรคะ
ที่ฟิลด์ Text1สำหรับกรอกข้อมูลวันเดือนปีเกิด และ Text2 สำหรับกรอกข้อมูลวันเริ่มทำงาน ของพนักงาน ซึ่งเป็นแบบ Date/Time ในฟอร์ม1
ซึ่งแต่เดิมเจอปัญหาตามที่หนูได้ตั้งกระทู้ไว้ข้างต้น ตอนนี้ทำโมดูลดังกล่าวแล้ว
จะทำอย่างไรให้ผู้ใช้สามารถกรอกข้อมูล เช่น 15/01/2550 ได้โดยไม่ขึ้น Error
แม้เครื่องนั้นจะตั้งเป็นปี คศ. และอื่นๆที่ไม่ใช่ปี พศ.
หนูยังไม่เข้าใจวิธีนำไปใช้เลยค่ะอาจาร์
|
Back to Top |
|
|
Reply by |
Message
on : 3/1/2559 1:27:15
|
TTT (R21632)
|
แนะนำแนวคิดเหมือนในเว็บที่ลงทะเบียนทั่วๆไปของไทย คือใช้เป็น Combo Box ให้เลือกแทนการให้ใส่เป็นตัวเลข กันความผิดพลาดและเราคุมเรื่องเครื่องกำหนดปีไม่เหมือนกันได้ง่ายกว่าครับ
ตัวอย่างไฟล์
ปรับใช้ดูครับ
|
Back to Top |
|
|
Reply by |
Message
on : 3/1/2559 7:20:05
|
มาลี (R21633)
|
ว้าว..
เปลี่ยนใช้แนวคิด Combo Box ดีกว่า/สะดวกกว่า
หนูสามารถปรับแก้ไขไฟล์ตัวอย่างของท่านให้ตรงตามที่หนูต้องการได้แล้ว.........
ขอบคุณมากเลยค่ะอาจารย์
|
Back to Top |
|
|
Reply by |
Message
on : 3/1/2559 14:46:54
|
TTT (R21634)
|
อื่ม! แก้ไขไฟล์ที่ให้ไปหน่อยนะครับ มันผิดพลาดตรงที่ว่า หากเครื่องเป็น พุทธศักราช วันที่สุดท้ายเดือนกุมภาจะผิด เช่น 2556 เดือนกุมภา ปีนี้มี 29 วัน มันจะแสดงแค่ 28 วัน
ให้โหลดที่ลิ้งค์เดิมใหม่อีกครับ จะเป็นไฟล์ใหม่ที่แก้แล้วครับ
หรือที่นี่ก็ได้
ตัวอย่างแก้ไขไฟล์เดิม
|
Back to Top |
|
|
Reply by |
Message
on : 3/1/2559 14:48:28
|
TTT (R21635)
|
edit: เช่น 2559 เดือนกุมภา ปีนี้มี 29 วัน
|
Back to Top |
|
|
Reply by |
Message
on : 3/1/2559 17:34:50
|
มาลี (R21637)
|
ขอบคุณมากค่ะอาจารย์
ไฟล์ใหม่ ยังแถมการแสดงอายุให้ด้วย เยี่ยมไปเลยค่ะอาจารย์...
|
Back to Top |
|
|
|
Sorry, you can NOT post a reply.
|
|