Bị lỗi khi dùng ADO để kết nối cở sở dữ liệu trên Win 7 64bit (2 người xem)

  • Thread starter Thread starter vba_gpe
  • Ngày gửi Ngày gửi
Liên hệ QC

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

vba_gpe

Thành viên thường trực
Tham gia
15/12/10
Bài viết
296
Được thích
44
Nghề nghiệp
Thất nghiệp
Gửi mọi người

Em có 1 vấn đề nhờ mọi người giải đáp giúp

- Lúc trước em sử dụng Windows 7 -32 bit, dùng ADO để kết nối cơ sở dữ liệu từ 1 file Excel như hàm dưới thì vẫn bình thường (Em có kèm theo code của hàm trích xuất cơ sở dữ liệu)
- Tuy nhiên, nay em cài lại Window 7 -64bit thì không sử dụng được nữa
(Load kiểu nào nó cũng báo lỗi mục Something Wrong mặc dù đúng đường dẫn, và khai báo bình thường giống như trên 32 bit.
- Em thử kiểm tra trong Control Panel/ không thấy mục ODBC giống như 32 bit.
- Thử kiểm tra trong mục Adminstrative Tool/Data Source (ODBC) cũng hiện ra cái giao diện giống như ODBC của Win 32. Tuy nhiên em thấy các DataSource ít hơn (Hình 1). Khi click vào mục Configure của hộp thoại thì xuất hiện lỗi như các hình em kèm theo (Hình 2, Hình 3)

Hình 1: 3.jpg
Hình 2: 1.jpg
Hình 3: 2.jpg
Em đã thử:
1. Tải và cài đặt bộ Microsoft Access Database Enginee cho win 7 64bit tại đường dẫn mà cũng không được
http://www.microsoft.com/en-us/download/details.aspx?id=13255
2. Em đã thử đổi địa chỉ target của ODBC trong Adminstrative Tool/Data Source về đúng đường dẫn : C:\Window\SysWorm64 thay cho System32 rồi mà vẫn không được. Cách này chỉ giải quyết được cho trường hợp không hiện thông báo lỗi như hình 1,2,3 thôi, chứ lúc load dữ liệu vẫn báo lỗi.

Mong nhận được sự giúp đỡ của anh chị và mọi người.
Trân trọng.
Code kèm theo:
Mã:
Public Sub GetDataExel_ADO(SourceFile As Variant, SourceSheet As String, _
                   SourceRange As String, TargetRange As Range, Header As Boolean, UseHeaderRow As Boolean)
' 30-Dec-2007, working in Excel 2000-2007
    Dim rsCon As Object
    Dim rsData As Object
    Dim szConnect As String
    Dim szSQL As String
    Dim lCount As Long

    ' Create the connection string.
    If Header = False Then
        If Val(Application.Version) < 12 Then
            szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                        "Data Source=" & SourceFile & ";" & _
                        "Extended Properties=""Excel 8.0;HDR=No"";"
        Else
            szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                        "Data Source=" & SourceFile & ";" & _
                        "Extended Properties=""Excel 12.0;HDR=No"";"
        End If
    Else
        If Val(Application.Version) < 12 Then
            szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                        "Data Source=" & SourceFile & ";" & _
                        "Extended Properties=""Excel 8.0;HDR=Yes"";"
        Else
            szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                        "Data Source=" & SourceFile & ";" & _
                        "Extended Properties=""Excel 12.0;HDR=Yes"";"
        End If
    End If

    If SourceSheet = "" Then
        ' workbook level name
        szSQL = "SELECT * FROM " & SourceRange$ & ";"
    Else
        ' worksheet level name or range
        szSQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"
    End If

    On Error GoTo SomethingWrong

    Set rsCon = CreateObject("ADODB.Connection")
    Set rsData = CreateObject("ADODB.Recordset")

    rsCon.Open szConnect
    rsData.Open szSQL, rsCon, 0, 1, 1

    ' Check to make sure we received data and copy the data
    If Not rsData.EOF Then

        If Header = False Then
            TargetRange.Cells(1, 1).CopyFromRecordset rsData
        Else
            'Add the header cell in each column if the last argument is True
            If UseHeaderRow Then
                For lCount = 0 To rsData.Fields.Count - 1
                    TargetRange.Cells(1, 1 + lCount).Value = _
                    rsData.Fields(lCount).Name
                Next lCount
                TargetRange.Cells(2, 1).CopyFromRecordset rsData
            Else
                TargetRange.Cells(1, 1).CopyFromRecordset rsData
            End If
        End If

    Else
        MsgBox "No records returned from : " & SourceFile, vbCritical
    End If

    ' Clean up our Recordset object.
    rsData.Close
    Set rsData = Nothing
    rsCon.Close
    Set rsCon = Nothing
    Exit Sub

SomethingWrong:
    MsgBox "The file name, Sheet name or Range is invalid of : " & SourceFile, _
           vbExclamation, "Error"
    On Error Resume Next

End Sub
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom