1. 程式人生 > >VBA中用ADO訪問SQL SERVER資料庫:資料查詢

VBA中用ADO訪問SQL SERVER資料庫:資料查詢

本程式的作用是:使用資料物件ADO訪問SQL資料庫,從而進行資料查詢,並將查詢的資料返回到EXCEL中,由於此程式需用到SQL資料庫,所以只供大家參考,不便執行,但大家可以看出其精華!
    Private Sub CommandButton1_Click()
   
Dim cn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim R, C, F, I As Integer
Dim Sql_text, day1, linenumber, box As String


Const cnnstr = "Provider = SQLOLEDB;" & _
                             "Data Source = apsgszml04;" & _
                             "Initial Catalog = bhl2ken;User ID =sa;Password =;"

  ‘連線資料庫
  
  day1 = UserForm1.TextBox1.Text
linenumber = UserForm1.ComboBox1.Text
box = UserForm1.ComboBox2.Text
  

cn.Open cnnstr
Sql_text = Sql_text & "SELECT CONVERT(Char,dbo.TRY123.[day],101) as date1,"
    Sql_text = Sql_text & " dbo.TRY123.linenumber,dbo.TRY123.box_no,dbo.TRY123.serialnumber,dbo.TRY123.lotnumber"
    Sql_text = Sql_text & " FROM dbo.TRY123"
    Sql_text = Sql_text & " WHERE (CONVERT(Char,dbo.TRY123.[day],101)= '" & day1 & "' and dbo.TRY123.linenumber= '" & linenumber & "' and dbo.TRY123.box_no= '" & box & "')"
    Sql_text = Sql_text & " ORDER BY dbo.TRY123.serialnumber "
‘使用SQL資料庫查詢語言查詢
                             
'SELECT     CONVERT(Char,dbo.TRY123.[day],101) as date1,dbo.TRY123.linenumber,dbo.TRY123.box_no,dbo.TRY123.serialnumber,dbo.TRY123.lotnumber
'
'FROM       dbo.TRY123
'WHERE       (CONVERT(Char,dbo.TRY123.[day],101)= " & day1 & " and dbo.TRY123.linenumber= " & linenumber & " and dbo.TRY123.box_no= '" & box & "'
'ORDER BY   dbo.TRY123.serialnumber


rst.Open Sql_text, cn, adOpenStatic, adLockBatchOptimistic '用adOpenStatic + adLockBatchOptimistic開啟較快,且佔用資源小

R = 5   'Excel表的行序號
C = 3   'Excel表的列序號
I = 0   'SQL表的欄位序號
F = rst.Fields.Count - 1
Worksheets("sheet1").Unprotect
Worksheets("sheet1").Cells.ClearContents
While Not rst.EOF
    For I = 0 To F
        Sheet1.Cells(R, I + 3).Rows.Value = rst.Fields(I).Value
    Next I
    R = R + 1
    rst.MoveNext        ’將資料庫的資料返回到EXCEL表中
Wend
Worksheets("sheet1").Protect
UserForm1.Hide
'MsgBox ("讀取完畢")
rst.Close   '完成後要關閉
cn.Close    '完成後要關閉
'注意:以上為直接連線SQL Server 的方法,不用建ODBC資料來源
Worksheets("sheet1").Activate
End Sub