Lỗi tự động hóa VBA khi truy vấn cơ sở dữ liệu thông qua ODBC


2

Tôi đang cố gắng chạy macro Excel để truy vấn một số dữ liệu từ cơ sở dữ liệu ODBC của tôi. Chi tiết cơ sở dữ liệu của tôi như sau:

DSN : sgdv UID : l8qc1 Mật khẩu : l8qc1 máy chủ :sgdv

Tôi đang cố gắng truy vấn dữ liệu từ cơ sở dữ liệu nhưng VBA hiển thị lỗi như dưới đây cho dòng Connection.Open "DSN=sgdv".

Lỗi thời gian chạy -2147217843 (80040e4d) Lỗi tự động hóa

Tôi không thể xác định lỗi. Hãy giúp tôi. Dưới đây là mã của tôi

Sub ReadDB()
Dim mainWorkBook As Workbook
Dim intRowCounter
Set mainWorkBook = ActiveWorkbook
intRowCounter = 2
mainWorkBook.Sheets("Sheet2").Range("A2:Z100").Clear
Set Connection = CreateObject("ADODB.Connection")
Connection.Open "DSN=sgdv"
strQuery = "SELECT * FROM DEDICT01 where DEDICT01.SER_SN='Z1E80R4C'"
Set resultSet = Connection.Execute(strQuery)
Do While Not resultSet.EOF
    mainWorkBook.Sheets("Sheet2").Range("A" & intRowCounter).Value = resultSet.Fields("DEDICT01.CUST_PARTS_NO").Value
  resultSet.movenext
Loop
resultSet.Close
End Sub

Tôi đã sửa đổi chương trình và mã hóa mới của tôi là

Sub ReadDB()
Dim mainWorkBook As Workbook
Dim intRowCounter
Set mainWorkBook = ActiveWorkbook
intRowCounter = 2
mainWorkBook.Sheets("Sheet2").Range("A2:Z100").Clear
Set Connection = CreateObject("ADODB.Connection")
Connection.ConnectionString = "DSN=sgdv;UID=l8qc1;PWD=l8qc1;"
Connection.Open
strQuery = "SELECT * FROM DEDICT01 where DEDICT01.SER_SN='Z1E80R4C'"
Set resultSet = Connection.Execute(strQuery)
Do While Not resultSet.EOF
    mainWorkBook.Sheets("Sheet2").Range("A" & intRowCounter).Value = resultSet.Fields("DEDICT01.CUST_PARTS_NO").Value
  resultSet.movenext
Loop
resultSet.Close
End Sub

Lỗi trước đây của tôi đã biến mất nhưng bây giờ tôi đang gặp lỗi mới ở dòng

mainWorkBook.Sheets("Sheet2").Range("A" & intRowCounter).Value = resultSet.Fields("DEDICT01.CUST_PARTS_NO").Value

Lỗi là

Thời gian chạy lỗi '3265':

Lỗi do ứng dụng xác định hoặc xác định đối tượng


1
Dòng nào đang tạo ra lỗi?
Xuất sắc

Tôi không biết làm thế nào để xem dòng nào gây ra lỗi ...
Dragonborn

Trong cửa sổ VBA Editor, đặt con trỏ ở đâu đó trong mã cho phụ này và nhấn F8. Điều này sẽ bước vào mã của bạn từng dòng một. Chỉ cần nhấn F8 cho đến khi bạn gặp lỗi. Lưu ý dòng bạn đã bật khi thông báo lỗi bật lên.
Xuất sắc

Tôi đã làm như bạn nói @Excellll. Trong VBA Editor, tôi tiếp tục nhấn F8 . Dòng Connection.Open "DSN=sgdv"được tô sáng là màu vàng. Khi tôi nhấn F8 ở dòng này sau khi được tô sáng, mã lỗi sẽ hiển thị.
Dragonborn

Câu trả lời:


1

Vấn đề là chuỗi kết nối của bạn. Lưu ý rằng bạn đã đề cập đến thông tin về UID, mật khẩu, v.v. trong câu hỏi của bạn, nhưng thông tin này không xuất hiện trong mã của bạn. Để kết nối với cơ sở dữ liệu, bạn phải cung cấp thông tin này trong chuỗi kết nối.

Hãy thử như sau:

Connection.ConnectionString = "DSN=sgdv;UID=l8qc1;PWD=l8qc1;"
Connection.Open 

Tôi không thể đảm bảo điều này sẽ hoạt động, nhưng ít nhất nó sẽ giúp bạn đi đúng hướng. Nếu nó không hoạt động, bạn có thể cần phải điều chỉnh chuỗi kết nối. Để biết thêm thông tin về các kết nối và chuỗi kết nối ADODB, hãy xem trang MSDN này:

https://msdn.microsoft.com/en-us/l Library / ms807027.aspx


-2

Câu trả lời phụ thuộc vào ý của bạn mainworkbook

  • nếu đó là một sổ làm việc khác, bạn cần đưa ra đường dẫn đầy đủ như c: ......
  • nếu nó là sổ làm việc hiện tại thì không cần phải chọn kiểu dữ liệu. Sổ làm việc hiện tại là sổ làm việc tích cực

Điều này không cung cấp một câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ một tác giả, hãy để lại nhận xét bên dưới bài đăng của họ - bạn luôn có thể nhận xét về bài đăng của riêng bạn và khi bạn có đủ danh tiếng, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào .
Ramhound

Như bạn có thể thấy từ các bình luận khác, câu trả lời của bạn không dễ hiểu. Tôi sẽ chỉnh sửa nó để bao gồm một số dấu câu và làm cho nó rõ ràng hơn những gì tôi nghĩ bạn muốn nói.
teylyn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.