2022年8月10日 星期三

VBA+MYSEL SELECT 應用:查詢建立以及查詢結果導入工作表中(快速語法教學)

 自己寫給自己看的mysql查詢,也留作紀錄。

1.先設定引用項目:
圖1.
microsoft activex data object 6.1 library
microsoft ado ex.2.8 for ddl and security
(不小心全打成小寫xd👀)

2.mysql環境掌握:

圖2.mysql環境
keyword:root、localhost、3306
圖3.schemas 
說明:查詢要連線哪一個資料庫,以及查那一頁。
筆者要查資料庫"twi_securities_lending",跟工作表的"securities_lending_borrowing" 這一頁。

3.開始寫查詢sub

MYSEL 查詢主要是透過SELECT *FROM 語法查詢

關鍵語法:

   strSql = "Select  " & "*" & " FROM " & "securities_lending_borrowing" & " where" & " date='2021/08/09'

記得查詢的條件要前後加上"'" 的部分:
主要語法: "Select  " & "*" & " FROM " & "securities_lending_borrowing" & " where" 
前後都要有"符號歐,因為是文字一定要加。

Function 查詢()

On Error GoTo line1                                                                                        

   Dim Conn As New ADODB.Connection

    Dim rs As New Recordset


'設定查詢資料庫、ip、port、使用者跟密碼

  Conn.Open "Driver=_

{MySQL ODBC 8.0 UNICODE Driver};Server=127.0.0.1:3306;_

Database=twi_securities_lending;User=root;Password=_

xxxx;Option=3;"  

 Conn.CursorLocation = adUseClient

  Dim Catalog As New ADOX.Catalog

  Set Catalog.ActiveConnection = Conn

  Dim Table As ADOX.Table, Column As ADOX.Column

   strSql = "Select  " & "*" & " FROM " & "securities_lending_borrowing" & " where" & " date='2021/08/09'"

rs.Open strSql, Conn, adOpenStatic                                    

                                      s1 = rs.RecordCount                                      

                                      If s1 = 0 Then

                                          查詢= 0                                       

                                           Exit Function

                                      End If

                                         RS_ARRAY = rs.GetRows(s1)     

                   rs.Close                   

                   查詢 = RS_ARRAY

  Exit Function

line1:

   Debug.Print Err.Description

  Debug.Print Err.NUMBER

       MsgBox Err.Description  

End Function


4.怎在工作表中直接導入查詢結果

先貼上查詢sub的code,以及設定好後。

作一個activex命令按鈕,貼上以下內容

Private Sub CommandButton1_Click()

        a = 查詢    

        Sheets("工作表5").Range("A1:H" & UBound(a, 2) + 1) = WorksheetFunction.Transpose(a)        

End Sub

圖5.大功告成

常有的問題:如忘了"'"符號 XD、MYSQL PORT、TABLE NAME設定錯誤等等。


沒有留言:

張貼留言

打破人力資源最好的教案:川普

打破人力資源最好的教案: 川普 why? 過去討論人才       好用、解決問題,多少證照,還是產值? 現在討論人的重量?      重量如同金錢一樣      一公升92汽油多少錢?      淋在人身上跟加在車輛內會衍生多少"量化"? 對主管來說,人的重...