2016年9月7日 星期三

0907 vba

ADODB.Connection  元件
宣告:Dim 元件變數   as new  ADODB.Connection
使用:Dim conn As New ADODB.Connection
 ConnectionString = "driver={mysql odbc 5.1 driver};database=persondb;server=127.0.0.1;port=3306;uid=root;password=12345678;opt=3;smt=SET NAMES 'gb2312'"
conn.Open ConnectionString

ADODB.Recordset:   資料集
宣告:Dim 元件變數   as new  ADODB.Recordset
使用:Dim rs As New ADODB.Recordset
           rs.Open sql, conn 


SQL 語言    資料表 persondata
Dim sql As String
ql = "select * from persondata"

例子

宣告元素後ˋ,先布局 conn sql,再open 資料集,用完結束,先關資料集,再關連線裝置
由外到內,由大架構到小架構
資料庫=>連線裝置=>資料集=>資料庫操作函數=>Excel VBA應用程式

Private Sub CommandButton2_Click()

Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql As String

 ConnectionString = "driver={mysql odbc 5.1 driver};database=persondb;server=127.0.0.1;port=3306;uid=root;password=12345678;opt=3;smt=SET NAMES 'gb2312'"
 conn.Open ConnectionString
 sql = "select * from persondata"
 rs.Open sql, conn
 MsgBox " mysql資料表打開 "

 rs.Close
 conn.Close

End Sub

資料庫操作函數
元件.BOF
元件.EOF
元件.MoveFirst()
元件.MoveLast()
元件.MoveNext()
元件.MovePrevioous()
用do while not rs.EOF()
     ... rs("編號")
     ... rs("姓名")
     ... rs("血型") 
     ... rs("學歷")
     ... rs("職務")
    loop

例子
Private Sub CommandButton3_Click()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql As String

 ConnectionString = "driver={mysql odbc 5.1 driver};database=persondb;server=127.0.0.1;port=3306;uid=root;password=12345678;opt=3;smt=SET NAMES 'gb2312'"
 conn.Open ConnectionString
 sql = "select * from persondata"
 rs.Open sql, conn

 rs.MoveFirst
 Do While Not rs.EOF
    MsgBox rs("姓名")
    rs.MoveNext
 Loop

 rs.Close
 conn.Close
End Sub



Excel VBA應用程式
1.找到有效位址  Cells(Rows.Count, 1).End(xlUp).Select
2.取得有效位置的絕對位置  path = Selection.Address
3.偏移植 填入欄位值
       Range(path).Offset(1, 0).Value = rs("編號")
       Range(path).Offset(1, 1).Value = rs("姓名")
       Range(path).Offset(1, 2).Value = rs("血型")
       Range(path).Offset(1, 3).Value = rs("學歷")
       Range(path).Offset(1, 4).Value = rs("職務")
4.移下一筆資料表指標
Private Sub CommandButton4_Click()
    Call cleardata
    Sheets(1).Cells(1, 1).Value = "編號"
    Sheets(1).Cells(1, 2).Value = "姓名"
    Sheets(1).Cells(1, 3).Value = "血型"
    Sheets(1).Cells(1, 4).Value = "學歷"
    Sheets(1).Cells(1, 5).Value = "職務"
   
    Dim conn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim sql As String
    Dim path As String

    ConnectionString = "driver={mysql odbc 5.1 driver};database=persondb;server=127.0.0.1;port=3306;uid=root;password=12345678;opt=3;smt=SET NAMES 'gb2312'"
    conn.Open ConnectionString
    sql = "select * from persondata"
    rs.Open sql, conn
   
    rs.MoveFirst
    Do While Not rs.EOF
       Cells(Rows.Count, 1).End(xlUp).Select
       path = Selection.Address
       Range(path).Offset(1, 0).Value = rs("編號")
       Range(path).Offset(1, 1).Value = rs("姓名")
       Range(path).Offset(1, 2).Value = rs("血型")
       Range(path).Offset(1, 3).Value = rs("學歷")
       Range(path).Offset(1, 4).Value = rs("職務")
       rs.MoveNext
 Loop

 rs.Close
 conn.Close
   
   
End Sub
Public Sub cleardata()
    Dim rcount As Integer
    rcount = Sheets(1).UsedRange.Rows.Count
    Range("A2:E" & rcount).ClearContents
End Sub





沒有留言:

張貼留言