Cách Xử Lý Lỗi Kết Nối ADO Trên Office2016_x64

Liên hệ QC

Kiều Mạnh

I don't program, I beat code into submission!!!
Tham gia
9/6/12
Bài viết
5,421
Được thích
4,032
Giới tính
Nam
Mình đang sử dụng code sau để kết nối tới File Database.accdb chạy trên Office2016_x32 thấy chạy rất tốt ....
Nhưng không biết lý do sao khi chuyển qua Office2016_x64 thì nó báo lỗi theo hình sau:

Mã:
Public Function Connection(ByVal AccPath As String) As ADODB.Connection
    Rem Tools/References - VBAProject/Microsoft ActiveX Data Objects 6.1 Library
    Set Cnn = New ADODB.Connection
    Cnn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=") _
              & AccPath & ";Persist Security Info=False"
    Set Connection = Cnn
End Function
Ai biết xin chỉ dùm cách xử lý lỗi trên
xin cảm ơn
ADO_Error.PNG
 
chi tiết là sao chưa hiểu kịp
Thì thay vì của anh là
Cnn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=") _
& AccPath & ";Persist Security Info=False"

Thì nên sửa lại là
Cnn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& AccPath & ";Persist Security Info=False")
 
Upvote 0
Thì thay vì của anh là
Cnn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=") _
& AccPath & ";Persist Security Info=False"

Thì nên sửa lại là
Cnn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& AccPath & ";Persist Security Info=False")
Nó vẫn báo cái lỗi đó Bạn .. mà sao x32 chạy tốt qua x64 báo lỗi vậy ???
 
Upvote 0
Thử:
"Provider=Microsoft.ACE.OLEDB.15.0;Data Source="
 
Upvote 0
Tôi chạy trên Ofice 2016 64 bit chả thấy vấn đề gì cả:

Nguyên văn code của bạn:
Public Function Connection(ByVal AccPath As String) As ADODB.Connection
Rem Tools/References - VBAProject/Microsoft ActiveX Data Objects 6.1 Library
Set Cnn = New ADODB.Connection
Cnn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=") _
& AccPath & ";Persist Security Info=False"
Set Connection = Cnn
End Function

Code test:
Sub ttt()
Set c = Connection("C:\Users\Noname\Documents\Database1.accdb")
MsgBox "connection established. No problems found so far"
End Sub

Kêt quả:
1579074117313.png
 
Upvote 0
Tôi chạy trên Ofice 2016 64 bit chả thấy vấn đề gì cả:

Nguyên văn code của bạn:
Public Function Connection(ByVal AccPath As String) As ADODB.Connection
Rem Tools/References - VBAProject/Microsoft ActiveX Data Objects 6.1 Library
Set Cnn = New ADODB.Connection
Cnn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=") _
& AccPath & ";Persist Security Info=False"
Set Connection = Cnn
End Function

Code test:
Sub ttt()
Set c = Connection("C:\Users\Noname\Documents\Database1.accdb")
MsgBox "connection established. No problems found so far"
End Sub

Kêt quả:
View attachment 231212
Mạnh đoán là vầy
1/ trước đây đang xài bản Office2016x32 xong ngày hôm qua gỡ nó ra nhưng trong C:\Program Files (x86)\Microsoft Office nó vẫn còn
2/ Xong chưa khởi động lại máy cài lại bản office2016X64 nên nó ra cái lỗi đó
3/ Mới coi lại thấy Program Files và Program Files (x86) nó vẫn còn các File office

Có lẻ vì thế mà nó ngu ra hay sao đó ... chắc gở hết sạch xong cài lại mới tinh quá
Capture.PNG
 
Upvote 0
Lỡ làm lỗi rồi kiểu gì nay tới tết sẻ ghost lại máy .... thử quậy thêm chút nữa xem sao để hiểu hết bản chất vấn đề của nó
Hiện Mạnh đang xài office 2016_x64 mà nó lỗi kết nối như mô tả mấy bài trên
Mới Thử chuỗi kết nối như sau chạy OK
Mã:
Cnn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & AccPath & ";Persist Security Info=False")

Thử lại như vầy nó báo lỗi như mấy bài trên đã nêu
Mã:
Cnn.Open ("Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source="  & AccPath & ";Persist Security Info=False")

1/ Vậy vấn đề mình muốn hỏi là cái chuỗi kết nối Microsoft.Jet.OLEDB.4.0 nó có làm chậm kết nối tới Database.accdb
hay không hay nó cũng giống như Microsoft.ACE.OLEDB.12.0

2/ Vậy khi Mình xài Database.accdb hay Database.mdb thì 2 cái đó có gì khác biệt khi sử dùng làm Database lưu dữ liệu

3/ Nên xài Database.accdb hay Database.mdb ... tại sao ??!!

Xin cảm ơn
 
Upvote 0
Cùng cảnh ngộ, kết nối Ado trên 64 bit bị lỗi. ở file test kết nối File NV1 và NV2 của học viên gởi, chưa xài 64 bit và mới gặp đầu năm nay luôn nên chưa cập nhật được hihi, giờ sẽ cập nhật lại, xin cảm ơn các thành viên giúp đỡ
 

File đính kèm

  • Code_01.rar
    2.6 MB · Đọc: 13
Upvote 0
Cùng cảnh ngộ, kết nối Ado trên 64 bit bị lỗi. ở file test kết nối File NV1 và NV2 của học viên gởi, chưa xài 64 bit và mới gặp đầu năm nay luôn nên chưa cập nhật được hihi, giờ sẽ cập nhật lại, xin cảm ơn các thành viên giúp đỡ
Cài đặt lại :
Microsoft Access Database Engine 2010 Redistributable
Microsoft Access Database Engine 2016 Redistributable
 
Upvote 0
Upvote 0

File đính kèm

  • Picture1.png
    Picture1.png
    477.1 KB · Đọc: 19
  • Picture2.png
    Picture2.png
    254.9 KB · Đọc: 18
Upvote 0
@phihndhsp:

Xác định phạm vi hoạt động (scoping) là một trong những điều trọng yếu của dự án phần mềm. Bạn đã dạy lập trình thì cũng nên dạy cái này cho học trò.

Nếu tôi dạy VBA thì tôi chỉ dạy nguyên tắc gọi các COM và vài ví dụ thôi.
Riêng phần ADO, tôi chỉ phân tích câu lệnh kết nối, và giải thích kết cấu recordset. Nếu cần thì tôi dạy nguyên lý CSDL LH (Relational Database), và các câu lệnh SQL căn bản.

Việc cho phép kết nối các CSDL thuộc về phần dựng hệ thống. Chúng đòi hỏi kiến thức phần mềm ứng dụng (Office, SQL Server,...) và chúng nẳm ngoài phạm vi lập trình VBA.
Nói như thế không hẳn là những cái này không thể giải quyết. Nhưng vì nó nằm ở phạm vi khác nên bạn cần phải có câu báo lỗi của hệ thống. Đem câu báo lỗi ấy gõ vào gú gô (hoặc đắc đắc gì đó), cộng thêm từ khoá ngữ cảnh (trong trường hợp này là Office 2016 64bit). Hy vọng đọc xong 5 câu trả lời, bạn sẽ gặp được một câu giải đáp.
 
Upvote 0
Đã thử cài 1 trong 4 cái, cài từng cái mà nó vẫn bị lỗi
--------------------------

Đường dẫn thuộc ngoại lệ nên cần phải thêm dấu (") hoặc ('):
Cn.Open (Pro & "'" & Name & "'" & Ext)
Hoặc:
Cn.Open (Pro & """" & Name & """" & Ext)

Cần viết thêm một đoạn Code cho đoạn này:

Ví dụ:
PHP:
Dim ExtXL$
ExtXL = VBA.LCASE(Name)
Select Case True
Case ExtXL Like "*.xlsx": Ext = ";Extended Properties=""Excel 12.0;hdr=yes;imex=1"";"
Case ExtXL Like "*.csv", ExtXL Like "*.txt": Ext = ";Extended Properties=""Text;"";"
Case ExtXL Like "*.xls", ExtXL Like "*.xlsm", ExtXL Like "*.xlsb": Ext = ";Extended Properties=""Excel 12.0 Xml;hdr=yes;"";"
''.....
End Select
 
Upvote 0
@phihndhsp:

Xác định phạm vi hoạt động (scoping) là một trong những điều trọng yếu của dự án phần mềm. Bạn đã dạy lập trình thì cũng nên dạy cái này cho học trò.

Nếu tôi dạy VBA thì tôi chỉ dạy nguyên tắc gọi các COM và vài ví dụ thôi.
Riêng phần ADO, tôi chỉ phân tích câu lệnh kết nối, và giải thích kết cấu recordset. Nếu cần thì tôi dạy nguyên lý CSDL LH (Relational Database), và các câu lệnh SQL căn bản.

Việc cho phép kết nối các CSDL thuộc về phần dựng hệ thống. Chúng đòi hỏi kiến thức phần mềm ứng dụng (Office, SQL Server,...) và chúng nẳm ngoài phạm vi lập trình VBA.
Nói như thế không hẳn là những cái này không thể giải quyết. Nhưng vì nó nằm ở phạm vi khác nên bạn cần phải có câu báo lỗi của hệ thống. Đem câu báo lỗi ấy gõ vào gú gô (hoặc đắc đắc gì đó), cộng thêm từ khoá ngữ cảnh (trong trường hợp này là Office 2016 64bit). Hy vọng đọc xong 5 câu trả lời, bạn sẽ gặp được một câu giải đáp.
đã kiểm tra được lỗi rồi thầy. mấy bạn này thiệt là. Đường dẫn 1 bên làm một bên. cái này các bạn sai là đường dẫn nằm ở sheet 2, mà trong code lại trỏ tới sheet5. mà sheet5 không cập nhật được nên không ra? em mới rà code và để ý thấy. Dạ em cảm ơn thầy nhiều
 
Upvote 0
--------------------------

Đường dẫn thuộc ngoại lệ nên cần phải thêm dấu (") hoặc ('):
Cn.Open (Pro & "'" & Name & "'" & Ext)
Hoặc:
Cn.Open (Pro & """" & Name & """" & Ext)

Cần viết thêm một đoạn Code cho đoạn này:

Ví dụ:
PHP:
Dim ExtXL$
ExtXL = VBA.LCASE(Name)
Select Case True
Case ExtXL Like "*.xlsx": Ext = ";Extended Properties=""Excel 12.0;hdr=yes;imex=1"";"
Case ExtXL Like "*.csv", ExtXL Like "*.txt": Ext = ";Extended Properties=""Text;"";"
Case ExtXL Like "*.xls", ExtXL Like "*.xlsm", ExtXL Like "*.xlsb": Ext = ";Extended Properties=""Excel 12.0 Xml;hdr=yes;"";"
''.....
End Select
Cảm ơn bạn HeSanbi. Nhờ bạn mà mình biết thêm vài lỗi nữa để khắc phục và hướng dẫn học viên
 
Upvote 0
Web KT
Back
Top Bottom