Giúp kết nối từ Excel VBA đến Oracle database. (1 người xem)

  • Thread starter Thread starter MinhKhai
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
944
Được thích
574
Chào anh chị. Hiện tại máy em đã kết nối đến OracleDB bằng DBeaver thành công. (các port đã mở đủ)
Nhờ các anh chị ai có kinh nghiệm thì giúp em kết nối từ Excel vào OralceDB bằng VBA để có thể Select, Update, Insert với nhé.
Chân thành cảm ơn các chị.
 
Sao không hỏi AI luôn cho nhanh bạn, rồi hiệu chỉnh code lại. :)
 
Chào anh chị. Hiện tại máy em đã kết nối đến OracleDB bằng DBeaver thành công. (các port đã mở đủ)
Nhờ các anh chị ai có kinh nghiệm thì giúp em kết nối từ Excel vào OralceDB bằng VBA để có thể Select, Update, Insert với nhé.
Chân thành cảm ơn các chị.

Bạn phải cài Oracle ODBC sau đó dùng ADO khai báo ConnectionString tới drive của Oracle là được nhé.
 
Sao không hỏi AI luôn cho nhanh bạn, rồi hiệu chỉnh code lại. :)
Em cũng hỏi cả ChatGPT và Gemini đều không giúp được.
Bài đã được tự động gộp:

Bạn phải cài Oracle ODBC sau đó dùng ADO khai báo ConnectionString tới drive của Oracle là được nhé.
Anh có bộ cài Oracle ODBC thì cho em xin với nhé. Cảm ơn anh
 
Em đã tải và xả nén ra C:\instantclient_19_30, cũng đã đọc phần release note nhưng vẫn chưa biết cần làm gì tiếp theo. Anh hướng dẫn giúp em với nhé. Cảm ơn anh.

1772861028443.png
 
Em cũng hỏi cả ChatGPT và Gemini đều không giúp được.
Em hỏi thử chatGPT. Anh chị làm thử theo hướng dẫn xem sao nhé.

1) Điều kiện để Excel kết nối được

DBeaver kết nối được chưa có nghĩa Excel/VBA sẽ kết nối được ngay, vì Excel cần đúng driver Oracle trên máy. Điểm quan trọng nhất là đúng bitness: Excel 32-bit thì cần driver/provider 32-bit; Excel 64-bit thì cần 64-bit. Với OraOLEDB, chuỗi kết nối cơ bản theo Oracle là:

Mã:
Provider=OraOLEDB.Oracle;User ID=user;Password=pwd;Data Source=constr;

2) Trong VBA cần bật reference nào

Trong Excel VBA:
  • Alt + F11
  • Tools → References
  • tick Microsoft ActiveX Data Objects x.x Library

ADO là cách chuẩn để thao tác Connection và Recordset trong VBA.

3) Mẫu code kết nối Oracle bằng OraOLEDB

Mã:
Option Explicit

' Mo ket noi Oracle bang ADO + OraOLEDB
Private Function GetOracleConnection() As ADODB.Connection
    Dim cn As ADODB.Connection
    Dim connStr As String

    Set cn = New ADODB.Connection

    connStr = "Provider=OraOLEDB.Oracle;" & _
              "Data Source=ORCL;" & _
              "User ID=your_user;" & _
              "Password=your_password;"

    cn.Open connStr
    Set GetOracleConnection = cn
End Function

Thay phần user và pass cho phù hợp;
hoặc dẫn đường dẫn tuyệt đối vào nếu trỏ theo port.

Mã:
connStr = "Provider=OraOLEDB.Oracle;" & _
          "Data Source=//10.10.10.15:1521/ORCLPDB1;" & _
          "User ID=your_user;" & _
          "Password=your_password;"
Bài đã được tự động gộp:

Em đã tải và xả nén ra C:\instantclient_19_30, cũng đã đọc phần release note nhưng vẫn chưa biết cần làm gì tiếp theo. Anh hướng dẫn giúp em với nhé. Cảm ơn anh.

Các bước cài ODBC trên Windows​


  1. Xác định Excel là 32-bit hay 64-bit
  2. Vào đúng trang tải tương ứng:
    • Windows 32-bit nếu Excel 32-bit
    • Windows x64 nếu Excel 64-bit
  3. Tải ít nhất 2 file:
    • Basic Package
    • ODBC Package
  4. Giải nén cả 2 file vào cùng một folder, ví dụ:
    • C:\oracle\instantclient_21_20
  5. Chạy:


    odbc_install.exe

    Oracle hướng dẫn đúng bước này cho Windows.
  6. Thêm thư mục đó vào PATH của Windows. Oracle nêu rõ trên Windows driver ODBC phải được load qua biến môi trường PATH.
  7. Nếu cần DSN thì mở ODBC Data Source Administrator để tạo DSN Oracle sau khi cài xong.

Lưu ý thêm​


  • Bản 21c Basic trên Windows cần Microsoft Visual Studio 2017 Redistributable. Trang download của Oracle ghi rõ điều này.
  • Basic Light nhỏ hơn, nhưng chỉ phù hợp nếu không cần đầy đủ locale/charset; Oracle mô tả bản này chỉ có English errors và một số bộ ký tự phổ biến.
 
Lần chỉnh sửa cuối:
Em đã tải và xả nén ra C:\instantclient_19_30, cũng đã đọc phần release note nhưng vẫn chưa biết cần làm gì tiếp theo.
Bạn tải thêm cái [ODBC Pakage] về giải nén vào cùng thư mục "C:\instantclient..." của bạn ở trên là được rồi. Sau đó kiếm cái file "odbc_install.exe" chạy với quyền Administrator.

- Link ODBC Pakage: https://download.oracle.com/otn_sof...nstantclient-odbc-windows.x64-23.26.1.0.0.zip
- Về cái Oracle Client thì dùng bản [Basic-light Pakage] cũng được rồi. Link: https://download.oracle.com/otn_sof...tclient-basiclite-windows.x64-23.26.1.0.0.zip

Chuỗi kết nối thì dùng chuỗi này: trực tiếp không dùng TNS

Mã:
strConn = "Provider=OraOLEDB.Oracle;" & _
              "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.118.128)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XEPDB1)));" & _
              "User ID=HR;" & _
              "Password=admin;"

Code để test kết nối:

JavaScript:
Public Sub ketNoiVaLayDuLieuOracleDB()
    ' Khai bao thu vien ADODB
    Dim conn As ADODB.Connection, rs As ADODB.Recordset
    Dim strConn As String, strSQL As String
    Dim targetSheet As Worksheet
    
    Set conn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    Set targetSheet = ThisWorkbook.Sheets("Sheet1")
    
    strConn = "Provider=OraOLEDB.Oracle;" & _
              "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.118.128)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XEPDB1)));" & _
              "User ID=HR;" & _
              "Password=admin;"
    conn.Open strConn
    strSQL = "SELECT * FROM DEPARTMENTS"
    rs.Open strSQL, conn
    
    targetSheet.Range("A1").Clear
    targetSheet.Range("A1").CopyFromRecordset rs
    
    ' Clean up
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
    MsgBox "Da tai du lieu xong!", vbInformation
    Exit Sub
    
ErrorHandler:
    MsgBox "An error occurred: " & Err.Description, vbCritical
    If Not conn Is Nothing Then
        If conn.State = adStateOpen Then conn.Close
        Set conn = Nothing
    End If
    Set rs = Nothing
End Sub
 

Bài viết mới nhất

Back
Top Bottom