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

kieu manh

❆❆❆❆❆
Tham gia ngày
9 Tháng sáu 2012
Bài viết
3,677
Được thích
2,523
Điểm
560
Nơi ở
IIIIIIIIIIIIIIIII
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
 

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia ngày
17 Tháng tám 2008
Bài viết
7,632
Được thích
15,215
Điểm
1,910
Tuổi
43
Nơi ở
TPHCM
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")
 

kieu manh

❆❆❆❆❆
Tham gia ngày
9 Tháng sáu 2012
Bài viết
3,677
Được thích
2,523
Điểm
560
Nơi ở
IIIIIIIIIIIIIIIII
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 ???
 

HeSanbi

Thành viên tích cực
Tham gia ngày
24 Tháng hai 2013
Bài viết
1,202
Được thích
1,099
Điểm
560
Thử:
"Provider=Microsoft.ACE.OLEDB.15.0;Data Source="
 

VetMini

Gian hùng bàn phiếm (thành viên trôi nước)
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
7,953
Được thích
9,286
Điểm
560
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
 

kieu manh

❆❆❆❆❆
Tham gia ngày
9 Tháng sáu 2012
Bài viết
3,677
Được thích
2,523
Điểm
560
Nơi ở
IIIIIIIIIIIIIIIII
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
 

kieu manh

❆❆❆❆❆
Tham gia ngày
9 Tháng sáu 2012
Bài viết
3,677
Được thích
2,523
Điểm
560
Nơi ở
IIIIIIIIIIIIIIIII
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
 

phihndhsp

Thành viên gạo cội
Tham gia ngày
26 Tháng mười hai 2009
Bài viết
3,305
Được thích
2,392
Điểm
860
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

HeSanbi

Thành viên tích cực
Tham gia ngày
24 Tháng hai 2013
Bài viết
1,202
Được thích
1,099
Điểm
560
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
 

kieu manh

❆❆❆❆❆
Tham gia ngày
9 Tháng sáu 2012
Bài viết
3,677
Được thích
2,523
Điểm
560
Nơi ở
IIIIIIIIIIIIIIIII

phihndhsp

Thành viên gạo cội
Tham gia ngày
26 Tháng mười hai 2009
Bài viết
3,305
Được thích
2,392
Điểm
860

File đính kèm

VetMini

Gian hùng bàn phiếm (thành viên trôi nước)
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
7,953
Được thích
9,286
Điểm
560
@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.
 

HeSanbi

Thành viên tích cực
Tham gia ngày
24 Tháng hai 2013
Bài viết
1,202
Được thích
1,099
Điểm
560
Đã 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
 

phihndhsp

Thành viên gạo cội
Tham gia ngày
26 Tháng mười hai 2009
Bài viết
3,305
Được thích
2,392
Điểm
860
@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
 

phihndhsp

Thành viên gạo cội
Tham gia ngày
26 Tháng mười hai 2009
Bài viết
3,305
Được thích
2,392
Điểm
860
--------------------------

Đườ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
 
Top Bottom