กระทู้เก่าบอร์ด อ.Yeadram
3,049 5
URL.หัวข้อ /
URL
access2010 : ตื่นเต้น
วันนี้ได้ลองของใหม่ครับ ได้เวอร์ชั่นทดลองใช้มา
ติดตั้ง แล้วครับ ทดสอบทันที
ลองรันไฟล์ที่สร้างจากเวอร์ชั่นเก่าครับ
ไฟล์ตัวเก่า
-สร้างจากเวอร์ชั่น 2002
-มีการประกาศ Function api ด้วยครับ
พอเอามารันใน win7 64bit ลง access 64 bit
ได้เรื่องเลยครับ ทำให้ต้องค้น กูเกิ้ล แล้วก็ได้ความรู้เพิ่มขึ้นอีกแล้วสำหรับวันนี้ อิอิ (ถ้าวันไหนไม่มีความรู้ใหม่ๆ เข้าหัว มันจะนอนไม่ค่อยหลับ และมีความรู้สึกว่า กำลังใช้ชีวิตแบบไร้ค่า)
ความแตกต่างเบื้องต้นเท่าที่สังเกตได้
- VBA แต่ก่อนไม่รู้ว่าใช้อยู่ประจำเป็นเวอร์ชั่นอะไร แต่ ในนี้ (office2010 64bit) เขาเรียกว่า VBA7
- เคย references
: Microsorft office 10 ก็เปลี่ยนเป็น 14
: MDAC 2.8 ก็เปลี่ยนเป็น 6.0 (โว้ววว เราตกยุคไปหลายเวอร์ชั่นนะเนี่ย อิอิ)
การประกาศฟังก์ชั่น API ในยุค 32bit เช่น
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
ก็ต้องปรับตัวให้เข้ากับยุค 64bits ดังนี้
Public Declare PtrSaft Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" _
(ByVal Locale As Long, _
ByVal LCType As Long, _
ByVal lpLCData As String, _
ByVal cchData As Long) As Long
* มีการแทรกคีย์เวอร์ดเพื่อแบ่งชั้นวรรณะกันนิดนึงนะเนี่ย อิอิ จะได้รู้ว่ายุคไหนเป็นยุคไหน ( 55555 เขาก็ช่างคิดกันได้เน๊าะ)
หรือบางที การที่เราจะเขียน Access2010 ขึ้นมาแล้วแบ่งให้คนอื่นใช้ หรือขายให้คนอื่นใช้ เราต้องระวังเรื่องพวกนี้ด้วย เราไม่รู้ว่าผู้ใช้จะเอาไปรันที่ ระบบ 64bits หรือ 32bits กันแน่ ดังนั้น เราอาจต้องเขียนดัก อย่างนี้
โค้ดตัวไหนที่มันไม่เข้ากับระบบ มันก็จะเป็นตัวแดงๆ อยู่อย่างนั้นแหละครับ คล้ายๆ การเตือน แต่มันก็ทำงานได้
วันนี้ จบแค่นี้ก่อนครับ ตื่นเต้นเลยเอามาเล่า ให้คนที่ยังไม่ลอง ได้ฟังเบื้องต้นครับ
ติดตั้ง แล้วครับ ทดสอบทันที
ลองรันไฟล์ที่สร้างจากเวอร์ชั่นเก่าครับ
ไฟล์ตัวเก่า
-สร้างจากเวอร์ชั่น 2002
-มีการประกาศ Function api ด้วยครับ
พอเอามารันใน win7 64bit ลง access 64 bit
ได้เรื่องเลยครับ ทำให้ต้องค้น กูเกิ้ล แล้วก็ได้ความรู้เพิ่มขึ้นอีกแล้วสำหรับวันนี้ อิอิ (ถ้าวันไหนไม่มีความรู้ใหม่ๆ เข้าหัว มันจะนอนไม่ค่อยหลับ และมีความรู้สึกว่า กำลังใช้ชีวิตแบบไร้ค่า)
ความแตกต่างเบื้องต้นเท่าที่สังเกตได้
- VBA แต่ก่อนไม่รู้ว่าใช้อยู่ประจำเป็นเวอร์ชั่นอะไร แต่ ในนี้ (office2010 64bit) เขาเรียกว่า VBA7
- เคย references
: Microsorft office 10 ก็เปลี่ยนเป็น 14
: MDAC 2.8 ก็เปลี่ยนเป็น 6.0 (โว้ววว เราตกยุคไปหลายเวอร์ชั่นนะเนี่ย อิอิ)
การประกาศฟังก์ชั่น API ในยุค 32bit เช่น
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
ก็ต้องปรับตัวให้เข้ากับยุค 64bits ดังนี้
Public Declare PtrSaft Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" _
(ByVal Locale As Long, _
ByVal LCType As Long, _
ByVal lpLCData As String, _
ByVal cchData As Long) As Long
* มีการแทรกคีย์เวอร์ดเพื่อแบ่งชั้นวรรณะกันนิดนึงนะเนี่ย อิอิ จะได้รู้ว่ายุคไหนเป็นยุคไหน ( 55555 เขาก็ช่างคิดกันได้เน๊าะ)
หรือบางที การที่เราจะเขียน Access2010 ขึ้นมาแล้วแบ่งให้คนอื่นใช้ หรือขายให้คนอื่นใช้ เราต้องระวังเรื่องพวกนี้ด้วย เราไม่รู้ว่าผู้ใช้จะเอาไปรันที่ ระบบ 64bits หรือ 32bits กันแน่ ดังนั้น เราอาจต้องเขียนดัก อย่างนี้
#If Win64 Then
Public Declare PtrSafe Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" _
(ByVal Locale As Long, _
ByVal LCType As Long, _
ByVal lpLCData As String, _
ByVal cchData As Long) As Long
#Else
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
#End If
โค้ดตัวไหนที่มันไม่เข้ากับระบบ มันก็จะเป็นตัวแดงๆ อยู่อย่างนั้นแหละครับ คล้ายๆ การเตือน แต่มันก็ทำงานได้
วันนี้ จบแค่นี้ก่อนครับ ตื่นเต้นเลยเอามาเล่า ให้คนที่ยังไม่ลอง ได้ฟังเบื้องต้นครับ
5 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R19397
ขอบคุณครับ สำหรับความรู้ใหม่ที่ได้นำมาแบ่งปันกัน
3 @R19398
อื่ม! มาจนถึงวันนี้เท่าที่ใช้งานมา หากคุณต้องใช้การเรียก API ร่วมกับการเขียน MS Access อยู่บ่อยๆ แนะนำว่ายังไงก็ยังคงต้องใช้ MS Access 32bit อยู่ครับ เพราะ MS Access 64bit มีปัญหาในการเรียก API เยอะมากๆ เพราะ API แบบเดิมๆส่วนใหญ่ที่เราใช้กันก็เป็น 32bit แทบจะทั้งหมด ส่วน Windows 64bit ก็ยังรองรับคำสั่งได้ไม่หมด แม้แต่่ทาง Microsoft เองยังแนะนำว่าให้ใช้ MS Access 32bit บน Windows 64bit จะดีกว่า
ปล. ไม่ใช่ว่าทุกการเรียก API จะใช้แค่การแทรก PtrSafe เข้าไปแล้วจะใช้ได้เหมือนเดิมทุกประการ์กับ MS Access 64bit นะครับ หลายคำสั่งต้องแก้มากกว่านั้นมาก เช่นการแก้ตัวแปร การแก้ฟังก์ชั่น ที่อ้าง Address ที่มันขยายขึ้นใน Windows 64bit ครับ
ปล. ไม่ใช่ว่าทุกการเรียก API จะใช้แค่การแทรก PtrSafe เข้าไปแล้วจะใช้ได้เหมือนเดิมทุกประการ์กับ MS Access 64bit นะครับ หลายคำสั่งต้องแก้มากกว่านั้นมาก เช่นการแก้ตัวแปร การแก้ฟังก์ชั่น ที่อ้าง Address ที่มันขยายขึ้นใน Windows 64bit ครับ
4 @R21087
ขอบคุณมากค่ะ
5 @R23866
อาจารย์yeadram ผมเจอปัญหานี้เลย เราต้องไปเขียนโค้ดดักไว้ตรงไหนครับ
Time: 0.3821s
ผมไม่เข้าใจที่อาจารย์เล่าเท่าไหร่ 5555
แต่ผมลองใช้แล้ว มันสวยดี มีอะไรเปลี่ยนหลายอย่าง Project หน้า ผมใช้ 2010 แน่ครับ