สมัครสมาชิก
 

เรื่องการรัน ACCDE 32bit บน 64bit



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

19 ก.ค. 62 , 12:24:55
อ่าน 457 ครั้ง

Tonwrp

เรื่องการรัน ACCDE 32bit บน 64bit
« เมื่อ: 19 ก.ค. 62 , 12:24:55 »
คือผมได้ทำการ Split Database แล้วโดยลองให้ User รัน ACCDE โดยใช้ Runtime ปรากฎว่าไม่สามารถรันได้ครับ อยากทราบวิธีแก้ปัญหาว่า ถ้าผมจำเป็นต้องเปลี่ยนเวอร์ชั่นที่เครื่องเป็น Office 2016 64bit แต่ตัว database นั้นถูกสร้างโดย 2010 32bit สามารถ transfer data ได้ไหม หรือต้องทำใหม่ทั้งหมดเลยครับ

ปล.ถ้าหากให้เครื่อง User ใช้เป็น runtime 32bit ได้ไหมครับแต่ว่าทุกเครื่องเป็น office 2016 64bit หมดเลยยกเว้นเครื่องที่ผมใช้
« แก้ไขครั้งสุดท้าย: 19 ก.ค. 62 , 13:37:35 โดย Tonwrp »

 

24 ก.ค. 62 , 12:09:28
ตอบกลับ #1

nonc31

: เรื่องการรัน ACCDE 32bit บน 64bit
« ตอบกลับ #1 เมื่อ: 24 ก.ค. 62 , 12:09:28 »
ผมเขียนด้วย 2003 32บิต รันใน 2013 64บิต
โค๊ดจะเพิ่มมาอีก เท่าตัวสำหรับการประกาศค่าตัวแปรที่จะให้เข้ากันได้
ไม่รู้ว่า 2010 32บิต จะเหมือน 2003 32บิต หรือป่าวนะครับ เช่น

#If VBA7 Then
    Private Declare PtrSafe Function GetKeyboardLayout Lib "User32" (ByVal dwLayout As LongLong) As LongLong
    Private Declare PtrSafe Function ActivateKeyboardLayout Lib "User32" (ByVal HKL As LongLong, ByVal Flags As LongLong) As LongLong
    Private Declare PtrSafe Function LoadKeyboardLayout Lib "User32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal Flags As LongLong) As LongLong
    Dim res As LongLong
#Else
    Private Declare Function GetKeyboardLayout Lib "User32" (ByVal dwLayout As Long) As Long
    Private Declare Function ActivateKeyboardLayout Lib "User32" (ByVal HKL As Long, ByVal Flags As Long) As Long
    Private Declare Function LoadKeyboardLayout Lib "User32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal Flags As Long) As Long
    Dim res As Long
#End If

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

25 ก.ค. 62 , 08:36:23
ตอบกลับ #2

Tonwrp

: เรื่องการรัน ACCDE 32bit บน 64bit
« ตอบกลับ #2 เมื่อ: 25 ก.ค. 62 , 08:36:23 »
เข้าใจเลยครับขอบคุณมากๆครับผม

 

26 ก.ค. 62 , 14:12:44
ตอบกลับ #3

แดนชัย

: เรื่องการรัน ACCDE 32bit บน 64bit
« ตอบกลับ #3 เมื่อ: 26 ก.ค. 62 , 14:12:44 »
เอา code ไปวางไว้ที่ไหน ของผมใช้ 32 บิต พนไปเจอ 64 บิต จะต้องถอนลงใหม่ตลอด

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

07 ส.ค. 62 , 13:07:43
ตอบกลับ #4

nonc31

: เรื่องการรัน ACCDE 32bit บน 64bit
« ตอบกลับ #4 เมื่อ: 07 ส.ค. 62 , 13:07:43 »

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

26 ส.ค. 62 , 16:00:10
ตอบกลับ #5

PooPae

: เรื่องการรัน ACCDE 32bit บน 64bit
« ตอบกลับ #5 เมื่อ: 26 ส.ค. 62 , 16:00:10 »
ขอสอบถามเพิ่มเติมนะคะ ว่าวิธีนี้สามารถใช้กับตัวโปรแกรม 64 บิต ไปรันในเครื่อง 32 บิตได้หรือไม่คะ ?
ผมเขียนด้วย 2003 32บิต รันใน 2013 64บิต
โค๊ดจะเพิ่มมาอีก เท่าตัวสำหรับการประกาศค่าตัวแปรที่จะให้เข้ากันได้
ไม่รู้ว่า 2010 32บิต จะเหมือน 2003 32บิต หรือป่าวนะครับ เช่น

#If VBA7 Then
    Private Declare PtrSafe Function GetKeyboardLayout Lib "User32" (ByVal dwLayout As LongLong) As LongLong
    Private Declare PtrSafe Function ActivateKeyboardLayout Lib "User32" (ByVal HKL As LongLong, ByVal Flags As LongLong) As LongLong
    Private Declare PtrSafe Function LoadKeyboardLayout Lib "User32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal Flags As LongLong) As LongLong
    Dim res As LongLong
#Else
    Private Declare Function GetKeyboardLayout Lib "User32" (ByVal dwLayout As Long) As Long
    Private Declare Function ActivateKeyboardLayout Lib "User32" (ByVal HKL As Long, ByVal Flags As Long) As Long
    Private Declare Function LoadKeyboardLayout Lib "User32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal Flags As Long) As Long
    Dim res As Long
#End If

 

26 ส.ค. 62 , 22:45:22
ตอบกลับ #6

สันติสุข

  • แฟนพันธุ์แท้ไท.Access
  • *
  • กระทู้: 358
  • พลังขอบคุณ: 314

  • แยกทิ้งขยะถูกประเภท เทศบาลนำไปกำจัดได้ง่าย

    • ดูรายละเอียด

: เรื่องการรัน ACCDE 32bit บน 64bit
« ตอบกลับ #6 เมื่อ: 26 ส.ค. 62 , 22:45:22 »
ถ้าผิดยังไงก็ขอโทษด้วย เพรายังไม่เคยใช้ Office 64  แต่เท่าที่อ่านความหมายของ VBA7, ประเภทข้อมูล LongLong, LongPtr และ PtrSafe Keyword https://codekabinett.com/rdumps.php?Lang=2&targetDoc=windows-api-declaration-vba-64-bit link ถ้า Office 32 bit นั้นเป็นเวอร์ชั่นตั้งแต่ 2010 ขึ้นไป เชื่อว่าไม่น่าจะรันได้ครับ เพราะ Compiler Directive VBA7 จะเป็นจริงตั้งแต่ Access 2010 ดังนั้นโค้ดจะรันแล้วเจอะข้อมูลประเภท LongLong ที่มีเฉพาะในเวอร์ชั่น 64 bit เท่านั้น ส่วนต้องโค้ดยังไงถึงจะถูก อันนี้ผมไม่รู้ ต้องคนที่ดู API เป็นครับ

แต่ถ้า Office 32 bit นั้นเป็นเวอร์ชั่นตำกว่า 2010 น่าจะแน่นอนว่าโค้ดนี้จะรันได้

แต่ Compiler Directive มีผลเฉพาะตอนที่ยังเป็นไฟล์ .accdb  ถ้าคอมไพล์เป็นไฟล์ .accde แล้ว  คอมไพล์ด้วย Office กี่ bit ก็ต้องไปใช้ที่เครื่อง Office แค่นั้น bit เท่านั้นครับ

« แก้ไขครั้งสุดท้าย: 26 ส.ค. 62 , 22:48:47 โดย สันติสุข »
ช่วยพกถุงผ้า/ถุงพลาสติกไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tonwrp

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

สันติสุข

  • แฟนพันธุ์แท้ไท.Access
  • *
  • กระทู้: 358
  • พลังขอบคุณ: 314

  • แยกทิ้งขยะถูกประเภท เทศบาลนำไปกำจัดได้ง่าย

    • ดูรายละเอียด

: เรื่องการรัน ACCDE 32bit บน 64bit
« ตอบกลับ #7 เมื่อ: 13 ต.ค. 62 , 13:42:58 »
ไปเจอว่ามีแอปรวบรวมการ Declare Windows API สำหรับ Microsoft Office  คิดว่ามีประโยชน์ทีเดียวครับ http://www.rondebruin.nl/win/dennis/windowsapiviewer.htm link
ช่วยพกถุงผ้า/ถุงพลาสติกไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 

13 ต.ค. 62 , 20:22:11
ตอบกลับ #8

kunlek

: เรื่องการรัน ACCDE 32bit บน 64bit
« ตอบกลับ #8 เมื่อ: 13 ต.ค. 62 , 20:22:11 »
หมายความว่า ถ้าจะให้ access 2016 ดีขค้น ให้เอา code ที่ให้มานี้ไปใส่ในโปรแกรมเราเลยหรือครับ

 

13 ต.ค. 62 , 22:38:30
ตอบกลับ #9

สันติสุข

  • แฟนพันธุ์แท้ไท.Access
  • *
  • กระทู้: 358
  • พลังขอบคุณ: 314

  • แยกทิ้งขยะถูกประเภท เทศบาลนำไปกำจัดได้ง่าย

    • ดูรายละเอียด

: เรื่องการรัน ACCDE 32bit บน 64bit
« ตอบกลับ #9 เมื่อ: 13 ต.ค. 62 , 22:38:30 »
ไม่ใช่ทำให้ดีขึ้น แต่ในการเขียนโค้ด VBA ของ Office 64 bit ในส่วนที่เรียกใช้ Windows API (ฟังก์ชั่นที่วินโดว์มีมาให้) จะต้องเขียน (Declare) บอกประเภทข้อมูลของตัวแปรที่รับ/ส่งกับ Windows API ให้ถูกต้องสำหรับระบบ 64 bit ด้วย เพราะในระบบ 32 bit  Window API นั้นๆอาจใช้ประเภทข้อมูลของตัวแปรบางตัวที่กินหน่วยความจำเพียง 32 bit (เช่นประเภทข้อมูลแบบ Long) แต่พอเป็น 64 bit  ตัว API อาจต้องการหน่วยความจำสำหรับตัวแปรตัวนั้นเป็น 64 bit แทน (เช่นประเภทข้อมูลแบบ LongLong)

ดังนั้นถ้า Declare ไม่ถูกต้อง ข้อมูลการรับ/ส่งก็ผิดไป แย่น้อยสุดก็คือมี error แสดงออกมา  แย่ยิ่งขึ้นก็คือโปรแกรมทำงานผิด แต่ไม่มี error  แย่สุดก็คือ อะไรในระบบวินโดว์พังไปเลยครับ
ช่วยพกถุงผ้า/ถุงพลาสติกไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 


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