programing

VBA가 엑셀에서 MySQL 데이터베이스에 어떻게 연결할 수 있습니까?

goodsources 2023. 6. 10. 09:04
반응형

VBA가 엑셀에서 MySQL 데이터베이스에 어떻게 연결할 수 있습니까?

Dim oConn As ADODB.Connection
Private Sub ConnectDB()
Set oConn = New ADODB.Connection
Dim str As String
str = "DRIVER={MySQL ODBC 5.2.2 Driver};" & _
                                            "SERVER=sql100.xtreemhost.com;" & _
                                            "PORT=3306" & _
                                            "DATABASE=xth_9595110_MyNotes;" & _
                                            "UID=xth_9595110;" & _
                                            "PWD=myPassword;" & _
                                            "Option=3"
''' error '''
oConn.Open str
End Sub

Private Sub InsertData()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
ConnectDB
sql = "SELECT * FROM ComputingNotesTable"
rs.Open sql, oConn, adOpenDynamic, adLockOptimistic
Do Until rs.EOF
    Range("A1").Select
    ActiveCell = rs.Fields("Headings")
    rs.MoveNext
Loop
rs.Close
oConn.Close
Set oConn = Nothing
Set rs = Nothing
End Sub

PHP에서 유사한 작업을 수행하면서 MySQL 서버에 성공적으로 로그인할 수 있었습니다.ODBC 커넥터를 설치했습니다.하지만 위의 VBA 코드에서 저는 실패했습니다.오류가 나타납니다. (오류가 존재하는 코드 참조)

$connect = mysql_connect("sql100.xtreemhost.com","xth_9595110","myPassword") or die(mysql_error());

mysql_select_db("myTable",$connect);

이 vba 조각은 저에게 효과가 있었습니다.

Sub connect()
    Dim Password As String
    Dim SQLStr As String
    'OMIT Dim Cn statement
    Dim Server_Name As String
    Dim User_ID As String
    Dim Database_Name As String
    'OMIT Dim rs statement

    Set rs = CreateObject("ADODB.Recordset") 'EBGen-Daily
    Server_Name = Range("b2").Value
    Database_name = Range("b3").Value ' Name of database
    User_ID = Range("b4").Value 'id user or username
    Password = Range("b5").Value 'Password

    SQLStr = "SELECT * FROM ComputingNotesTable"

    Set Cn = CreateObject("ADODB.Connection") 'NEW STATEMENT
    Cn.Open "Driver={MySQL ODBC 5.2.2 Driver};Server=" & _ 
            Server_Name & ";Database=" & Database_Name & _
            ";Uid=" & User_ID & ";Pwd=" & Password & ";"

    rs.Open SQLStr, Cn, adOpenStatic

    Dim myArray()

    myArray = rs.GetRows()

    kolumner = UBound(myArray, 1)
    rader = UBound(myArray, 2)

    For K = 0 To kolumner ' Using For loop data are displayed
        Range("a5").Offset(0, K).Value = rs.Fields(K).Name
        For R = 0 To rader
           Range("A5").Offset(R + 1, K).Value = myArray(K, R)
        Next
    Next

    rs.Close
    Set rs = Nothing
    Cn.Close
    Set Cn = Nothing
End Sub

Ranjit의 코드는 Tin이 보고한 것과 동일한 오류 메시지를 발생시켰지만, 내가 실행 중인 ODBC 드라이버로 Cn.open을 업데이트한 후 작동했습니다.ODBC 데이터 소스 관리자에서 드라이버 탭을 확인합니다.내 것은 "MySQL ODBC 5.3 Unicode Driver"라고 되어 있어서 업데이트를 했습니다.

같은 질문에 넘어간 사람들을 위한 참고 사항일 뿐입니다내 운영 체제는 64비트입니다. 그래서 당연히 64비트 MySQL 드라이버를 다운로드했습니다.하지만, 제 오피스 애플리케이션은 32비트입니다.32비트 버전을 다운로드하면 오류가 사라지고 앞으로 나아갈 수 있었습니다.

MySQL Connector/ODBC 버전 8.0에서 사용할 수 있었던 솔루션을 최신 답변으로 이 항목을 업데이트합니다(https://downloads.mysql.com/archives/c-odbc/) 참조).

Public oConn As ADODB.Connection
Sub MySqlInit()
    If oConn Is Nothing Then
        Dim str As String
        str = "Driver={MySQL ODBC 8.0 Unicode Driver};SERVER=xxxxx;DATABASE=xxxxx;PORT=3306;UID=xxxxx;PWD=xxxxx;"
        Set oConn = New ADODB.Connection
        oConn.Open str
    End If
End Sub

이 문제에 대해 가장 중요한 것은 HKEY_LOCAL_MACHINT\SOFTWARE\ODBC\ODBCINST에서 설치된 드라이버의 올바른 이름과 버전을 확인하는 것입니다.INI\ODBC 드라이버\

Microsoft ActiveX 데이터 개체 2.8 라이브러리 사용

Dim oConn As ADODB.Connection 
Private Sub ConnectDB()     
Set oConn = New ADODB.Connection    
oConn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _        
"SERVER=localhost;" & _         
"DATABASE=yourdatabase;" & _        
"USER=yourdbusername;" & _      
"PASSWORD=yourdbpassword;" & _      
"Option=3" 
End Sub

나머지는 다음과 같습니다. http://www.heritage-tech.net/908/inserting-data-into-mysql-from-excel-using-vba/

이것을 추가로 업데이트하기 위해서입니다.

영원히 걸리는 모든 행과 열을 반복하는 대신.사용해 보다

`Sub connect()
    Dim Password As String
    Dim SQLStr As String
    'OMIT Dim Cn statement
    Dim Server_Name As String
    Dim User_ID As String
    Dim Database_Name As String
    'OMIT Dim rs statement

    Set rs = CreateObject("ADODB.Recordset") 'EBGen-Daily
    Server_Name = "Server_Name "
    Database_Name = "Database_Name" ' Name of database
    User_ID = "User_ID" 'id user or username
    Password = "Password" 'Password

    SQLStr = "SELECT * FROM item"

    Set Cn = CreateObject("ADODB.Connection") 'NEW STATEMENT
    Cn.Open "Driver={MySQL ODBC 8.0 ANSI Driver};Server=" & _
            Server_Name & ";Database=" & Database_Name & _
            ";Uid=" & User_ID & ";Pwd=" & Password & ";"

    rs.Open SQLStr, Cn, adOpenStatic
    Range("A2").CopyFromRecordset rs

    rs.Close
    Set rs = Nothing
    Cn.Close
    Set Cn = Nothing
End Sub

이것은 몇 분 더 빠릅니다.

언급URL : https://stackoverflow.com/questions/13558921/how-can-vba-connect-to-mysql-database-in-excel

반응형