Giúp kết nối từ Excel VBA đến Oracle database. (3 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