access 2003 to windows 10 64 bit


0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

21 ก.ย. 62 , 13:22:57
อ่าน 1826 ครั้ง

M2M

access 2003 to windows 10 64 bit
« เมื่อ: 21 ก.ย. 62 , 13:22:57 »
มีทานไหนเจอปัญหาการนำเอา File .MDB ที่เป็นของ2003 ไป run กับ Windows รุ่นใหม่ ที่เป็น 64 bit บ้างมั้ยครับ

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

21 ก.ย. 62 , 13:26:47
ตอบกลับ #1

สันติสุข

: access 2003 to windows 10 64 bit
« ตอบกลับ #1 เมื่อ: 21 ก.ย. 62 , 13:26:47 »
ค้นหาในเวปด้วยคำว่า "64 bit"  มีถามกันพอสมควร
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: M2M, มาลี

09 ต.ค. 62 , 19:32:05
ตอบกลับ #2

nonc31

: access 2003 to windows 10 64 bit
« ตอบกลับ #2 เมื่อ: 09 ต.ค. 62 , 19:32:05 »
ต้องทำ code เพิ่มอีกนิดหน่อย จาก Private Declare Function  เป็น  Private Declare PtrSafe Function

Option Compare Database
      Private Const LOCALE_SSHORTDATE = &H1F
      Private Const WM_SETTINGCHANGE = &H1A
      Private Const HWND_BROADCAST = &HFFFF&
#If VBA7 Then 'access 64บิต
      Private Declare PtrSafe Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean
      Private Declare PtrSafe Function PostMessage Lib "User32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
      Private Declare PtrSafe Function GetSystemDefaultLCID Lib "kernel32" () As Long
#Else
      Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean
      Private Declare Function PostMessage Lib "User32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
      Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
#End If
 

Function setdate()  'ตรวจสอบรูปแบบวันที่ dd/mm/yyyy
    Dim dwLCID As Long
            dwLCID = GetSystemDefaultLCID()
           
        If SetLocaleInfo(dwLCID, LOCALE_SSHORTDATE, "dd/MM/yyyy") = False Then
            MsgBox "ผิดพลาด", vbCritical, "Error"
        End If
            PostMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0
End Function

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

11 ต.ค. 62 , 17:37:23
ตอบกลับ #3

มาลี

: access 2003 to windows 10 64 bit
« ตอบกลับ #3 เมื่อ: 11 ต.ค. 62 , 17:37:23 »
อ. nonc31 โค๊ดนี้นำไปใช้อย่างไรคะ
เมื่อใช้โค๊ดนี้แล้ว ช่วยให้สามารถเอาไฟล์ 32bit ไปใช้กับ 64 bit ได้เลยใช่ไหมคะ
ขอคำแนะนำเพิ่มเติมด้วยค่ะ

 

16 ต.ค. 62 , 20:41:08
ตอบกลับ #4

nonc31

: access 2003 to windows 10 64 bit
« ตอบกลับ #4 เมื่อ: 16 ต.ค. 62 , 20:41:08 »
ได้เลยครับคุณมาลี  เพราะผมเขียนโค๊ดด้วย 2003 32บิต (VBA 6.3) ให้ใช้กับ 2013 64บิต (VBA 7.1)
ก่อนหน้านี้ก็คิดหนักอยู่ครับ  โค๊ดมันจะ Error ตรงการเรียกใช้ API ของวินโดว์เท่านั้นล่ะ

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

18 ต.ค. 62 , 07:46:20
ตอบกลับ #5

มาลี

: access 2003 to windows 10 64 bit
« ตอบกลับ #5 เมื่อ: 18 ต.ค. 62 , 07:46:20 »
โค๊ดดังกล่าวนำไปใส่ตรงไหนคะ
ต้องสร้างโมดูลหรืออย่างไรคะอาจารย์
ขอคำแนะนำด้วยค่ะ

 

18 ต.ค. 62 , 12:04:31
ตอบกลับ #6

nonc31

: access 2003 to windows 10 64 bit
« ตอบกลับ #6 เมื่อ: 18 ต.ค. 62 , 12:04:31 »

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

18 ต.ค. 62 , 13:09:58
ตอบกลับ #7

มาลี

: access 2003 to windows 10 64 bit
« ตอบกลับ #7 เมื่อ: 18 ต.ค. 62 , 13:09:58 »
ขอบคุณค่ะอาจารย์

 

31 ต.ค. 62 , 16:20:56
ตอบกลับ #8

มาลี

: access 2003 to windows 10 64 bit
« ตอบกลับ #8 เมื่อ: 31 ต.ค. 62 , 16:20:56 »
ขออนุญาตสอบถามเพิ่มเติมอีกหน่อยนะคะอาจารย์
โค๊ดดังกล่าวเราต้องใส่ทุกๆฟอร์มที่มีการเรียกใช้apiใช่ไหมคะ
สมมติถ้าเป็นอย่างนั้น เราจะมีวิธีดักตั้งแต่ตอนเปิดครั้งแรกเพียงครั้งเดียวได้หรือเปล่าคะ

 

01 พ.ย. 62 , 13:43:19
ตอบกลับ #9

สันติสุข

: access 2003 to windows 10 64 bit
« ตอบกลับ #9 เมื่อ: 01 พ.ย. 62 , 13:43:19 »
สร้าง Module ขึ้นมา 1 ตัว แล้วแทนที่จะใส่ Private Declare PtrSafe ... ก็ใส่เป็น Public Declare PtrSafe ... แทนครับ วางไว้ที่เดียว จะได้เรียกใช้จากที่ไหนก็ได้
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี

01 พ.ย. 62 , 15:46:33
ตอบกลับ #10

มาลี

: access 2003 to windows 10 64 bit
« ตอบกลับ #10 เมื่อ: 01 พ.ย. 62 , 15:46:33 »
ขอคุณมากค่ะอาจารย์

 

02 พ.ย. 62 , 11:32:45
ตอบกลับ #11

มาลี

: access 2003 to windows 10 64 bit
« ตอบกลับ #11 เมื่อ: 02 พ.ย. 62 , 11:32:45 »
ไปไม่รอดค่ะอาจารย์
ตอนนี้หนูทำโมดูลเสร้จแล้ว แต่มาติดก็ตอนที่จะเรียกใช้โมดูลจากในฟอร์มนี่แหละค่ะ ไม่ทราบต้องเรียกอย่างไร
รบกวนอาจาย์แนะนำหรือจะช่วยทำไฟล์ตัวอย่างให้ได้ลองแกะศึกษาดู ก็จะเป็นพระคุณอย่างยิ่งค่ะอาจารย์
ขอขอบคุณนะคะ

 

02 พ.ย. 62 , 11:40:59
ตอบกลับ #12

มาลี

: access 2003 to windows 10 64 bit
« ตอบกลับ #12 เมื่อ: 02 พ.ย. 62 , 11:40:59 »

 

02 พ.ย. 62 , 11:44:34
ตอบกลับ #13

มาลี

: access 2003 to windows 10 64 bit
« ตอบกลับ #13 เมื่อ: 02 พ.ย. 62 , 11:44:34 »

 

02 พ.ย. 62 , 13:57:07
ตอบกลับ #14

สันติสุข

: access 2003 to windows 10 64 bit
« ตอบกลับ #14 เมื่อ: 02 พ.ย. 62 , 13:57:07 »
สร้างโมดูล แล้วใส่โค้ดข้างล่างนี้ เวลาเรียกใช้ ก็แค่สั่ง setdate เท่านั้น  โค้ดมีความแตกต่างนิดหน่อยจากโค้ดของคุณ nonc31 นะครับ คือไม่มีการเช็ค compiler directive VBA7 เพราะ VBA7 ไม่ได้เป็นการเช็คว่าระบบเป็น 32 หรือ 64 bit  ถ้าจะเช็คต้องใช้ compiler directive Win64  แต่ยังไงก็ตาม API 3 ตัวนี้ไม่มีความจำเป็นต้องเช็ค เพียงแค่ตบแต่งบางอย่าง ก็จะใช้ได้ทั้ง 32 และ 64 bit แต่ใช้สำหรับ Access 2007 หรือสูงกว่าเท่านั้นนะครับ

เนื่องจากว่า ผมเข้าใจว่าการเรียกใช้ API ทั้ง 3 ตัวนี้ ถูกเรียกจาก procedure setdate เท่านั้น ดังนั้นไม่จำเป็นต้องกำหนดเป็น Pubic ที่คำสั่ง Declare ก็ได้ แต่ใส่ไว้ที่ procedure setdate ที่เดียวก็ได้ครับ

ยังไงก็ตาม ผมลองโค้ดนี้ในเครื่องของผมตอนนี้ จะไม่ได้ผลทันที ต้องปิด Access แล้วเข้าใหม่  ส่วนที่แสดงเวลาบนหน้าเดสก์ท็อปเองก็ไม่เปลี่ยน แต่ฟอร์แมทภายในเปลี่ยน ไม่ทราบเหมือนกันว่าเป็นเพราะอะไร

โค๊ด: [Select]
Option Compare Database
Option Explicit

Private Const LOCALE_SSHORTDATE = &H1F
Private Const WM_SETTINGCHANGE = &H1A
Private Const HWND_BROADCAST = &HFFFF&

Declare PtrSafe Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Long
Declare PtrSafe Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As Long
Declare PtrSafe Function GetSystemDefaultLCID Lib "kernel32" () As Long

Public Function setdate()
    Dim dwLCID As Long
   
    dwLCID = GetSystemDefaultLCID()
    If SetLocaleInfo(dwLCID, LOCALE_SSHORTDATE, "dd/MM/yyyy") = 0 Then
        MsgBox "ผิดพลาด", vbCritical, "Error"
        Exit Function
    End If
   
    PostMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0
End Function
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี

02 พ.ย. 62 , 16:22:27
ตอบกลับ #15

มาลี

: access 2003 to windows 10 64 bit
« ตอบกลับ #15 เมื่อ: 02 พ.ย. 62 , 16:22:27 »
ขอขอบคุณอาจารย์ทั้งสองท่านนะคะ
หนูจะคอยติดตามและพยายามศึกษาต่อไปค่ะ

 

03 พ.ย. 62 , 12:33:35
ตอบกลับ #16

สันติสุข

: access 2003 to windows 10 64 bit
« ตอบกลับ #16 เมื่อ: 03 พ.ย. 62 , 12:33:35 »
ผมตรวจสอบเพิ่มเติมโดยเปิด Access แล้วสร้างเท็กซ์บ็อกซ์ที่มี Format เป็น Short Date  แล้วเปลี่ยนฟอร์แมทของ short date ใน windows taskbar ด้วยมือ  กลับมาที่ Access ก็ยังคง Format เดิมไม่เปลี่ยนตามครับ ต่อให้ Close Database แล้วเปิดใหม่ก็ยังเป็น Format เดิม  ต้องปิด Access ไปเลยแล้วค่อยเปิด Access ใหม่  Format ถึงจะเปลี่ยนตาม 

ผมแนะนำว่า ให้เช็คฟอร์แมทของ Short Date ดีกว่าว่าเป็นไปตามที่เราต้องการหรือไม่ ถ้าไม่ใช่ก็ให้ปิด Access ไป  ให้ผู้ใช้เปลี่ยนด้วยมือเอาเอง วิธีการเช็คก็คือสั่งในโค้ดที่เริ่มต้นของระบบ และเช็คด้วยวันที่ 29 กพ. ค.ศ. 2020
โค๊ด: [Select]
If format$(DateSerial(2020,2,29),"Short Date")  <> "29/02/2020" Then
   MsgBox แจ้งให้ผู้ใช้ไปเปลี่ยนฟอร์มแมทเองก่อน
   Application.Quit
End If
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 

04 พ.ย. 62 , 08:47:45
ตอบกลับ #17

nonc31

: access 2003 to windows 10 64 bit
« ตอบกลับ #17 เมื่อ: 04 พ.ย. 62 , 08:47:45 »
Control Panel > Region >Formate ต้องเป็น Thai (Thailand) Currnet language ต้องเป็น Thai (Thailand)

Option Compare Database
      Private Const LOCALE_SSHORTDATE = &H1F
      Private Const WM_SETTINGCHANGE = &H1A
      Private Const HWND_BROADCAST = &HFFFF&
#If VBA7 Then
      Private Declare PtrSafe Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean
      Private Declare PtrSafe Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
      Private Declare PtrSafe Function GetSystemDefaultLCID Lib "kernel32" () As Long
#Else
      Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean
      Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
      Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
#End If
     
Function setdate() 'ใช้เปลี่ยนรูปแบบวันที่
    Dim dwLCID As Long
            dwLCID = GetSystemDefaultLCID()
           
        If SetLocaleInfo(dwLCID, LOCALE_SSHORTDATE, "dd/MM/yyyy") = False Then
            MsgBox "รูปแบบวันที่ไม่ใช่ dd/MM/yyyy", vbCritical, "Error"
        End If
            PostMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0
End Function

กระทู้ถามว่าไงเนี๊ย   :shout: :shout: :shout:
« แก้ไขครั้งสุดท้าย: 04 พ.ย. 62 , 08:52:21 โดย nonc31 »

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


บอร์ดเรียนรู้ Access สำหรับคนไทย


 

Sitemap 1 2 3 4 5