vba生成sql
1. Excel 請問如何在VBA中執行sql語句
sub test()
Dim Conn As New ADODB.Connection
Dim strConn As String
Dim strSQL As String
Dim rs As New ADODB.Recordset
strConn = "Provider=sqloledb;Server=192.168.1.111;Database=db2014;Uid=用戶名;Pwd=密碼;"
Conn.Open strConn
Max_row = Range("A1").CurrentRegion.Rows.Count
for i=1 to Max_row
strSQL = "select name from sales2014 where id='" & range("A" & i).value & "'"
Conn.Execute strSQL
rs.Open strSQL, Conn, 1, 1
range("B" & i).value= rs(0)
rs.Close
Set rs = Nothing
next i
'關閉資料庫
Conn.Close
end sub
2. 如何在VBA中應用ACCESS自動生成的SQL代碼
Docmd.RunSQL "SQL語句"
具體可查看RunSQL方法幫助
3. 如何在VBA代碼中構造動態SQL語句
在VBA代碼中構造SQL語句之所以看上去很復雜,主要是因為在查詢對象的設計中
使用SQL語句時,我們只需要遵循SQL的語法規則即可。但在VBA中構造不光要遵循SQL的語法規則,還必須要遵循VBA的語法規則。於是就會多出來好
些如連接符(&)、雙引號(")等符號,很多初學者就是被這些符號搞暈了。下面就簡單講一下如何通過拆分法來理解VBA中動態SQL語句的構造。
在查詢的時候雖然我們可以將查詢條件綁定到窗體控制項,如下面的示例:
Select
* FROM 訂單表 Where客戶名稱
=Forms!客戶查詢窗體!客戶名稱輸入框但這樣只能適用於比較簡單的查詢,隨著條件復雜度的增加,殲搭SQL語句的構造難度也會直線上升,更重要的是這樣
的SQL語句很難理解,就算最終做出來了,一旦過了一段時間需要修改的話,就非常麻煩。
於是在VBA中使用變數構造動態的
SQL語句就成了一種理想的選擇。我們來看一個例子,比如我們要通過在窗體上的三個文本框(txt客戶名稱、txt開始日期、txt結束日期)內輸入相應
的條件值,來構造一個查詢訂單表中指定客戶在某個時間段內銷售記錄的SQL語句,在VBA中的代碼如下:
strSQL="
Select * FROM 訂單表 Where 客戶名稱='www.gzlij.com" & Me.txt客戶名稱 & "'
AND 銷售日期 Between #" & Me.txt開始日期 & "# And #" & Me.txt結束日期
& "#"
上面的的語句該如何理解呢?這里通過替換法來進行拆分,我們先假設文本框的值分別是:
txt開始日期=2010-5-1
txt結束日期=2010-5-31
txt客戶名稱=東南實業
根據上面的條件,我們需要得到的SQL語句應該是:
Select * FROM 訂單表 Where 客戶名稱="東南實業" AND 銷售日期 Between #2010-5-1# And #2010-5-31#
這里的由於要在VBA中構造,而雙引號(")是VBA中的字元串界定符,所以我們需要把它改成單引號(')來符合VBA的語法規則,那麼SQL語句就成了:
Select * FROM 訂單表 Where 客戶名稱='東南實業' AND 銷售日期 Between #2010-5-1# And #2010-5-31#
(當橘改吵然我們也可以根據VBA的語法來用兩個雙引號,這樣VBA編譯器就會把這兩個連續的雙引號識別為一個雙引號字元,而不是字元串界定符,不過這樣相對來說更加復雜和麻煩一些,還有一些其它原因這里圓侍就不細說了。)
我們再把裡面的條件值換回變數,由於條件需要用變數代替,所以我們這里把上面的SQL語句拆分成如下的多個片段:
Select * FROM 訂單表 Where 客戶名稱='東南實業' AND 銷售日期 Between #2010-5-1# And #2010-5-31#
然後把其中的條件值換成變數,就成了:
Select * FROM 訂單表 Where 客戶名稱='Me.txt客戶名稱' AND 銷售日期 Between #Me.txt開始日期# And #Me.txt結束日期#
接下來再把其中不是變數的片段兩頭加上雙引號,使其符合VBA中的字元串語法:
"Select * FROM 訂單表 Where 客戶名稱='"Me.txt客戶名稱"' AND 銷售日期 Between #"Me.txt開始日期"# And #"Me.txt結束日期"#"
最後我們再用連接符(&)把這些拆分處理後得到的片段連接組合成一個字元串(注意,使用連接符組合多個字元串或變數時,連接符兩邊要有空格),就得到了我們需要的VBA中的動態SQL語句的寫法:
"Select
* FROM 訂單表 Where 客戶名稱='" & Me.txt客戶名稱 & "' AND 銷售日期 Between #"
& Me.txt開始日期 & "# And #" & Me.txt結束日期 & "#"
4. 在WPS的VBA中怎麼使用SQL語句
方法步驟如下:
1.在網上搜索並下載「wps的vba模塊」。
2.下載解壓完成之後,雙擊」vba6chs「即可安裝:
5. 我想根據xls中的列的值通過VBA代碼生成insert語句(.sql),高手指點下,謝謝
我們就從向資料庫添加數據的INSERT INTO開始。
前面幾篇 SQL語言教程 中介紹SQL的文章後,我們已可以創建,修改與刪除一個資料庫,今天介紹的INSERT INTO,我們就可以向上面創建的資料庫中添加數據。INSERT INTO添加數據基本有兩種方法:一種是一次性輸入一筆數據,另一種是一次性輸入多筆數據。粗舉模因為後者還要用到SQL語句中最核心,最重要,最常用,也是最難全懂的Select語句,因此在這一篇文章中,我們先介紹第一種,語法如下:
INSERT INTO 表格名 (列名1, 列名2, ...) VALUES (數值1, 數值2, ...)
上面的語法就是向表格名中指定的表格里添加一行新的數據,在列名1,列名2……中添加對應的值,需要說明的一點是,不一定表格中的每一個列名都指定值,如果沒有指定,該列的值就是設定資料庫時默認的值。如果列的數值沒有,而設定資料庫時該列設定的是必填欄位,而程序會提示出錯。
按照慣岩緩例,我們還是給出一段程序來讓我們更了解上面說的內容:
Sub 向銷存表資料庫錄入數據()
'*******************************************
'時間:2008-10-9
'作者:bengdeng
'功能:在程序文件同一目錄下進銷存表資料庫中錄入數據
'注意:要在工具/引用中引用microsoft activex date objects x.x
' 其中x.x為版本號,可能會因為你安裝的office的版本不同而不同,本例引用了2.5版
'發布:http://www.excelba.com
'*******************************************
Dim conn As ADODB.Connection
Dim WN As String
Dim TableName As String
Dim sSql As String
WN = "進銷存表.mdb"
TableName = "明細表"
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\" & WN
conn.Open
If conn.State = adStateOpen Then
sSql = "INSERT INTO " & TableName & " (物品名稱, 結余日期,結余數量,進倉數量,出倉數量)" & _
"VALUES ('鉛筆',#" & Date & "#,0,0,0)"
conn.Execute sSql
MsgBox "成功在答做「" & TableName & "」中增加了一條記錄!", , "http://excelba.com"
conn.Close
End If
Set conn = Nothing
End Sub
上面的程序有兩點特別說明一下:一個是字元串可以用單引號來特別確認,這個在字元串與SQL的一些保留關鍵詞一樣時,特別需要注意;另一個是日期數值的表示方式為——#日期#,否則不正確。同樣,我們也給出一段操作Excel的代碼:
Sub 向銷存表文件錄入數據()
'*******************************************
'時間:2008-10-9
'作者:bengdeng
'功能:在程序文件同一目錄下進銷存表文件中錄入數據
'注意:要在工具/引用中引用microsoft activex date objects x.x
' 其中x.x為版本號,可能會因為你安裝的office的版本不同而不同,本例引用了2.5版
'發布:http://www.excelba.com
'*******************************************
Dim conn As ADODB.Connection
Dim WN As String
Dim TableName As String
Dim sSql As String
WN = "進銷存表.xls"
TableName = "明細表"
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;" & _
"Extended Properties=Excel 8.0;" & _
"Data Source=" & ThisWorkbook.Path & "\" & WN
conn.Open
If conn.State = adStateOpen Then
sSql = "INSERT INTO [" & TableName & "$] (物品名稱, 結余日期,結余數量,進倉數量,出倉數量)" & _
"VALUES ('一筆',#" & Date & "#,0,0,0)"
conn.Execute sSql
MsgBox "成功在「" & TableName & "」中增加了一條記錄!", , "http://excelba.com"
conn.Close
End If
Set conn = Nothing
End Sub
最後大家自己動一下復制上面的代碼,在VBA里操作一下,就能更好的理解了。希望通過這些文章,能讓你開始對SQL的應用感興趣,並應用到工作與生活中。
如果沒有看到CREATE TABLE - 創建數據表的語句文章的朋友請到http://www.excelba.com/Art/Html/293.html 中利用裡面的代碼生成這篇文章需要的文件,然後再運行一下這兩段代碼吧。
轉載請註明:本文來自:Excel吧 (www.excelba.com) 詳細出處參考:http://www.excelba.com/Art/Html/299.html
6. Access VBA中如何使用 SQL 語句。
提問里是一段打開ADO記錄集對象的代碼,並不完整且含有錯誤。下面提供一個完整一點的代碼供參考:
PrivateSubCommand111_Click()
DimsqlAsString
'聲明ADO記錄集對象
DimrsAsADODB.Recordset
Setrs=NewADODB.Recordset'實例化記錄集對象
'拼寫SQL語句並賦值到變數
sql="SELECTDGZY.usenameFROMDGZYWHERE(((DGZY.usename)Like'張三'));"
'打開記錄集
rs.Opensql,CurrentProject.Connection,adOpenKeyset,adLockOptimistic
'利用記錄集對象進行所需的有關操作,代碼略
EndSub
7. 用vba如何使用sql
一、界面設計
各控制項名稱屬性分別為:label1 、text1 、label2、text2、commandok、cmdcancel
代碼設計如下:
'首先添加一個模塊,寫上以下通用聲明和Sub main():
Public conn As ADODB.Connection '通用(聲明)
Sub main()
Set conn = New ADODB.Connection '通用(main)
conn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;" _
+ "User ID=sa;password=123;Initial Catalog=denglu;Data Source=127.0.0.1" '連接資料庫代碼
conn.Open
frmLogin.Show '首先顯示登錄界面。也可以在工程屬性中設置啟動對象為Sub main()或者frmlogin窗體
End Sub
'在Frmlogin 代碼窗口,為cmdok控制項寫以下代碼:
Private Sub cmdok_Click()
If text1.Text = "" Then
MsgBox "用戶名不能為空!", vbOKOnly + vbInformation, "友情提示"
text1.SetFocus
Exit Sub '若用戶名文本框內為空,則出現提示框
End If
If text2.Text = "" Then
MsgBox "密碼不能為空!", vbOKOnly + vbInformation, "友情提示"
text2.SetFocus
Exit Sub '若輸入密碼文本框為空,也出現提示框
End If
Dim strSQl As String
strSQl = "select * from User1 where username='" & Trim$(text1.Text) & "' and pwd='" & Trim$(text2.Text) & "' "
'書寫SQL代碼,查詢User1表中是否存在窗體中用戶輸入的信息。
Dim str As New ADODB.Recordset
Set str = New ADODB.Recordset
str.CursorLocation = adUseClient
str.Open strSQl, conn, adOpenStatic, adLockReadOnly
With str
If .State = adStateOpen Then .Close
.Open strSQl
If .EOF Then
Try_times = Try_times + 1
If Try_times >= 3 Then
MsgBox "您已連續三次輸入錯誤,系統將自動關閉", vbOKOnly + vbCritical, "警告"
Unload Me '若用戶連續輸入3次錯誤密碼,則系統關閉
Else
MsgBox "對不起,用戶名不存在或密碼錯誤 !", vbOKOnly + vbQuestion, "警告"
text1.SetFocus
text1.Text = ""
text2.Text = ""
End If
Else
Unload Me '若登錄成功,則隱藏當前窗體
Form2.Show '然後顯示Form窗體
End If
End With
End Sub
Private Sub cmdCancel_Click()
End '若單擊Cmdcel按鈕,則結束應用程序
End Sub
運行中存在的問題:
代碼中有Dim conn As adodb.connection,運行時顯示"用戶定義類型未定義"
解決方法:點擊「工程」--「引用」找到「Microsoft ActiveX Data Object 2.6」
然後就就可以正常運行了。
8. 求助,EXCEL通過VBA操作SQL資料庫
Sub 按鈕1_Click()
Dim i As Integer, j As Integer, sht As Worksheet 'i,j為整數變數;sht 為excel工作表對象變數,指向某一工作表
'Dim cn As New ADODB.Connection '定義數據鏈接對象 ,保存連接資料庫信息;請先添加ADO引用
'Dim rs As New ADODB.Recordset '定義記錄集對象,保存數據表
『工具 ---〉引用 ---〉Microsoft ActiveX data objects ....
'下面兩句就不需要增加引用ADO
Set cn = CreateObject("Adodb.Connection")
Set rs = CreateObject("Adodb.Recordset")
Dim strCn As String, strSQL As String '字元串變數
Dim strCond As String
strCn = "Provider=sqloledb;Server=R9HDET7;Database=dbname;Uid=username;Pwd=password" '定義資料庫鏈接字元串
'下面的語句將讀取數據表數據,並將它保存到excel工作表中:工作表為一張兩維表,記錄集也是一張兩維表
strSQL = "select CUSTOMER_NAME from VSC_BI_CUSTOMER " '定義SQL查詢命令字元串
cn.Open strCn '與資料庫建立連接,如果成功,返回連接對象cn
rs.Open strSQL, cn '執行strSQL所含的SQL命令,結果保存在rs記錄集對象中
i = 2
Set sht = ThisWorkbook.Worksheets("Test") '把sht指向當前工作簿的Test工作表
Do While Not rs.EOF '當數據指針未移到記錄集末尾時,循環下列操作
sht.Cells(i, 1) = rs("CUSTOMER_NAME") '把當前記錄的欄位1的值保存到sheet1工作表的第i行第1列
rs.MoveNext '把指針移向下一條記錄
i = i + 1 'i加1,准備把下一記錄相關欄位的值保存到工作表的下一行
Loop '循環
rs.Close '關閉記錄集,至此,程序將把某數據表的欄位1保存在excel工作表sheet1的第1列,行數等於數據表的記錄數
cn.Close '關閉資料庫鏈接,釋放資源
End Sub