ขอทราบวิธีกำหนด/ตรวจสอบวันเดือนปีเป็นไทย
กระทู้เก่าบอร์ด อ.Yeadram

 2,568   14
URL.หัวข้อ / URL
ขอทราบวิธีกำหนด/ตรวจสอบวันเดือนปีเป็นไทย

ขอความช่วยเหลือจากอาจารย์ทุกท่าน

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


14 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R21615
ลองหาจาก regional setting อื่นๆดูครับ แล้วดัดแปลงเอาครับ http://www.thai-access.com/yeadram_view.php?topic_id=337&page=1
2 @R21617
ถ้าใช้ Access 2003 จะมีปัญหาเรื่องการตั้งค่า Regional Setting ซึ่งแต่ละเครื่องอาจตั้งไว้ไม่เหมือนกัน ทำให้ข้อมูลผิดเพี้ยน ถ้าใช้ Access 2007 ขึ้นไป หากออกแบบฟวิด์วันที่โดยกำหนด DataType ไว้เป็น DateTime เมื่อชี้ไปที่ฟิวด์ จะมีรูปปฏิทินขึ้นให้ ถ้าให้ User เลือกจากปฎิทิน ข้อมูลจะไม่ผิดเพี้ยนครับ โดยไม่ต้องไปสนใจว่าแต่ละเครื่องจะตั้งค่า Regional Setting ไว้อย่างไร
3 @R21620
ขออภัยด้วยค่ะ
ติดธุระเสียหลานวัน ไม่ได้เข้ามาเปิดดูโพสเลย

หนูลองทำแล้ว มันยังไม่ตรงตามที่หนูต้องการค่ะ หนูอาจอธิบายไม่เข้าใจเท่าที่ควร
เป็นแบบนี้นะคะ โปรแกรมที่หนูทำ จะมีช่องให้ผู้ใช้กรอกวันเดือนปีเกิด และวันที่เริ่มเข้าทำงาน ของพนักงานลงไป เช่น 15/01/2550 เป็นต้น จากนั้นก็จะใช้ข้อมูลนี้ ไปคำนวณอายุตัว และอายุงานของผู้นั้น (ภายใต้การทำงานของโค้ดคำนวณอายุ)
ปัญหาคือ เมื่อผู้ใช้กรอกข้อมูลดังกล่าวลงไป หากเครื่องนั้นตั้งเป็นปี พ.ศ. มันก็ไม่เป็นปัญหาอะไร สามารถแสดงผลออกมาได้ถูกต้อง แต่หากไปเจอเครื่องที่ถูกตั้งเป็นปี ค.ศ. มันก็จะ Error เพราะเลขของปีที่กรอกมันจะกลายเป็นล้ำหน้าไปในอนาคต 535 ปี เพราะปี ค.ศ. 2550 มันยังมาไม่ถึง
นี่เป็นปัญหาเฉพาะหน้าขณะที่ผู้ใช้กรอกข้อมูล ฝ่ายผู้ใช้ก็มั่นใจว่ากรอกไปไม่ผิดตามเอกสารทุกอย่าง หารู้ไม่ว่าเครื่องนั้นมันถูกตั้งค่าเป็นปี ค.ศ. อยู่
ตรงนี้แหละ คือประเด็นที่หนูอยากหาทางแก้ ว่าจะทำอย่างไรที่จะแจ้งเตือนให้ผู้ใช้ทราบก่อนว่า เครื่องที่กำลังทำงานอยู่นั้นยังไม่ได้ตั้งเป็นปี พศ.
ประมาณนี้แหละค่ะอาจารย์
4 @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
5 @R21622
ขอบคุณค่ะอาจารย์
หนูจะลองทำตามที่ท่านแนะนำดูนะคะ ได้เรื่องประการใดจะเข้ามารายงานให้ทราบค่ะ
6 @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

ไม่ทราบว่าหนูทำผิดตรงไหน รบกวนท่านช่วยแนะนำด้วยนะคะ
ขอบคุณค่ะ
7 @R21624
ลอง Compile แล้วขึ้น Error ตามในรูปค่ะอาจารย์

8 @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 เพื่อนำบรรทัดด้านล่าง ขึ้นมาต่อกัน
9 @R21629
ได้แล้วค่ะ แก้ไข Error ในโมดูลตามที่ท่านแนะนำได้แล้ว และตั้งชื่อโมดูลว่า Calender Type

ขอเรียนถามต่อไปว่าแล้วเราจะนำไปใช้งานอย่างไรคะ
ที่ฟิลด์ Text1สำหรับกรอกข้อมูลวันเดือนปีเกิด และ Text2 สำหรับกรอกข้อมูลวันเริ่มทำงาน ของพนักงาน ซึ่งเป็นแบบ Date/Time ในฟอร์ม1
ซึ่งแต่เดิมเจอปัญหาตามที่หนูได้ตั้งกระทู้ไว้ข้างต้น ตอนนี้ทำโมดูลดังกล่าวแล้ว
จะทำอย่างไรให้ผู้ใช้สามารถกรอกข้อมูล เช่น 15/01/2550 ได้โดยไม่ขึ้น Error
แม้เครื่องนั้นจะตั้งเป็นปี คศ. และอื่นๆที่ไม่ใช่ปี พศ.
หนูยังไม่เข้าใจวิธีนำไปใช้เลยค่ะอาจาร์
10 @R21632
แนะนำแนวคิดเหมือนในเว็บที่ลงทะเบียนทั่วๆไปของไทย คือใช้เป็น Combo Box ให้เลือกแทนการให้ใส่เป็นตัวเลข กันความผิดพลาดและเราคุมเรื่องเครื่องกำหนดปีไม่เหมือนกันได้ง่ายกว่าครับ
ตัวอย่างไฟล์
ปรับใช้ดูครับ
11 @R21633
ว้าว..

เปลี่ยนใช้แนวคิด Combo Box ดีกว่า/สะดวกกว่า

หนูสามารถปรับแก้ไขไฟล์ตัวอย่างของท่านให้ตรงตามที่หนูต้องการได้แล้ว.........
ขอบคุณมากเลยค่ะอาจารย์
12 @R21634
อื่ม! แก้ไขไฟล์ที่ให้ไปหน่อยนะครับ มันผิดพลาดตรงที่ว่า หากเครื่องเป็น พุทธศักราช วันที่สุดท้ายเดือนกุมภาจะผิด เช่น 2556 เดือนกุมภา ปีนี้มี 29 วัน มันจะแสดงแค่ 28 วัน
ให้โหลดที่ลิ้งค์เดิมใหม่อีกครับ จะเป็นไฟล์ใหม่ที่แก้แล้วครับ
หรือที่นี่ก็ได้
ตัวอย่างแก้ไขไฟล์เดิม
13 @R21635
edit: เช่น 2559 เดือนกุมภา ปีนี้มี 29 วัน
14 @R21637
ขอบคุณมากค่ะอาจารย์
ไฟล์ใหม่ ยังแถมการแสดงอายุให้ด้วย เยี่ยมไปเลยค่ะอาจารย์...
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3020s