1. VBA 調用sql 的語句
缺少引用。
工具-->引用
然後把 Microsoft ActiveX Data Objects 2.x Library 勾選上。
2. access2013 VBA中怎樣運行sql語句
sql在vba里的運用比較專業需要認真的學習研究一下,給你詳細一點的資料和一個實例
你自己學著模擬練習一下
一、簡單的查詢
1、建立查詢
數據選項卡—現有連接—瀏覽更多或者按快捷鍵Alt+D+D+D
選擇要查詢的Excel文件和文件中的的工作表,就可以將相應工作表的數據取過來。表現形式可以是表,也可以是數據透視表等。
2、SQL查詢語句
如果是挑選部分列數據,就需要用SQL語句(取所有數據也可以用SQL語句)。
建立查詢時,選擇工作表後不要點擊「確定」按鈕,而是先點擊「屬性」按鈕,彈出窗口中選擇「定義」選項卡,在命令文本框中輸入SQL查詢語句(原來的工作表名稱,表示所有數據,可以認為是取所有數據的SQL的一種特殊寫法):
Select欄位列表from[工作表名$]
--其中欄位列表就是需要選擇的欄位,數據源用工作表名稱加「$「再用中括弧括起來,例如:
selectprov_name,city_name,xs_mc,xs_codefrom[Sheet1$]
select*from[Sheet1$]--取所有數據
偶然發現,欄位名不能用no,估計是保留字,如需要,用中括弧括起來,例如:
select[no],prov_name,city_name,xs_mc,xs_codefrom[Sheet1$]
欄位名中含有特殊字元的也要用中括弧括起來,如/?空格等
Excel查詢沒有偽表概念,對於表達式的計算直接用select既可,例如
Select23+45--返回68
Selectdate()--返回當前日期
3、修改查詢語句
方法:點擊右鍵—彈出菜單—表格—編輯查詢
通過修改SQL語句可以變更所取的數據,也可以將建立查詢時的簡單SQL語句改成復雜的SQL語句。
欄位名更換:如果想換個欄位名,用「as新欄位名」既可,例如:
selectprov_nameas省,city_nameas城市,xs_mcas縣市,xs_codeas編碼from[Sheet1$]
非正常表格:數據區域(含欄位名)不在第一行
需要在工作表名稱後面指定數據范圍,例如:
selectprov_name,city_name,xs_mc,xs_codefrom[Sheet1$B2:G2000]
或者,將數據塊定義為一個名稱,假設定義為mydata,SQL語句如下:
selectprov_name,city_name,xs_mc,xs_codefrommydata
注意:使用名稱時沒有$符號,也沒有方括弧了。
數據更新:數據源發生變化,需要更新數據,方法:點擊右鍵—彈出菜單—刷新
意外:如果打開Excel文件後彈出不是選擇工作表的窗口而是一個「數據連接屬性」窗口,可以關閉這個窗口,然後將Excel應用極小化再極大化方式消除,或者在彈出選擇文件的窗口時,退回上一級文件夾,刪除那個Queries文件夾,就行了。
二、復雜的查詢
1、多表聯合
相同結構的多個表合並到一起,用union連接SQL語句,例如:
Select*from[財務部$]unionallSelect*from[市場部$]
Union是去重復的,即相同的記錄保留一個(類似distinct),Unionall則是直接相加兩個結果,不去重復。
增加一個部門欄位可以將查詢結果中的區分開來,以便知道數據來自哪個表。Union的三個一致,即:欄位的數量、類型和順序。例如:
Select「財務部」as部門,*from[財務部$]unionallSelect「市場部」as部門,*from[市場部$]
多表聯合查詢
Select*from[部門$]bm,[員工$]ygwherebm.部門編碼=yg.部門編碼跨工作簿查詢果數據不僅來自不同的工作表,還來自不同的文件,一樣可以用union聯合,例如:
Select「分公司1」as公司,「財務部」as部門,*from[F:SQL之Excel應用分公司1.xlsx].[財務部$]unionall
Select「分公司1」as公司,「市場部」as部門,*from[F:SQL之Excel應用分公司1.xlsx].[市場部$]unionall
Select「分公司2」as公司,「財務部」as部門,*from[F:SQL之Excel應用分公司2.xlsx].[財務部$]unionall
Select「分公司2」as公司,「市場部」as部門,*from[F:SQL之Excel應用分公司2.xlsx].[市場部$]
因為SQL中已經指定了文件名和表名,所以建立連接時連接誰並不重要,這種情況下,建立連接的時候就連接自己,然後再改寫SQL語句。
SubUsingSQL()
DimSqlAsString
DimjAsInteger
DimrAsInteger
DimCnnAsADODB.Connection
DimrsAsADODB.Recordset
WithSheet1
.Cells.Clear
SetCnn=NewADODB.Connection
WithCnn
.Provider="Microsoft.ACE.OLEDB.12.0"
.ConnectionString="ExtendedProperties=Excel12.0;"_
&"DataSource="&ThisWorkbook.Path&"數據.xlsx"
.Open
EndWith
Setrs=NewADODB.Recordset
Sql="Select*From[Sheet1$]"
rs.OpenSql,Cnn,adOpenKeyset,adLockOptimistic
Forj=0Tors.Fields.Count-1
.Cells(1,j+1)=rs.Fields(j).Name
Next
r=.Cells(.Rows.Count,1).End(xlUp).Row
.Range("A"&r+1).CopyFromRecordsetrs
EndWith
rs.Close
Cnn.Close
Setrs=Nothing
SetCnn=Nothing
EndSub
3. excel vba 怎麼同時執行多條語句,並且其中一條語句需要返回結果,如update sysda
1)VBA中,寫在同一行之內的多條語句,可以用冒號:分開。這是你所說的同時執行多條語句的意思么?
2)你寫的是sql語句,更新查詢。UPDATE語句可以同時更新多個欄位多條記錄,或者這才是你所說的同時執行多條語句的意思?如:
update sysdata set s1=-1, S2=0 where ID<11
執行的效果是將表中ID從1到10的記錄的s1欄位值更新為-1,s2欄位值更新為0
4. VBA 怎樣調用sql的語句
Dim cn As New ADODB.Connection '定義數據鏈接對象 ,保存連接資料庫信息;請先添加ADO引用
Dim rs As New ADODB.Recordset '定義記錄集對象,保存數據表
Dim strCn As String, strSQL As String '字元串變數
Dim i As Integer, j As Integer, sht As Worksheet
strCn = "Provider=SQLOLEDB.1;Password=psw;Persist Security Info=True;User ID=userid;Initial Catalog=hrlink ;Data Source=127.0.0.1"
strSQL = "select * from table"
cn.Open strCn
rs.Open strSQL, cn
5. 用vb連接access資料庫以後,如何一次性執行多條sql語句
使用ACCESS查詢對象是無法一次運行多個
SQL語句
的,但是通過ACCESS
VBA代碼可以實現一次運行多個SQL語句。下面是具體實現方案;
1)新建一個ACCESS窗體,窗體添加一個命令按鈕;
2)編寫按鈕單擊事件過程
Private
Sub
Command1_Click()Dim
strSql
as
stringstrSQL="Update
Policy
SET
LatestDueDate=Year(Date())
&
'-'
&
Format(PolicyDate,'mm-dd')"
DoCmd.RunSql
strSQL
'運行第一個更新語句strSQL="UPDATE
Policy
SET
LatestDueDate=
DateAdd('yyyy',1,LatestDueDate)
WHERE
(((Month(Date())-Month(LatestDueDate))
>
6)
and(PaymentMode='H'))"
DoCmd.RunSql
strSQL
'運行第二個更新語句
End
Sub
跟著點擊該命令按鈕就可以一次執行兩條語句了。
6. VBA可以讀取.sql文件來執行裡面的多條語句嗎
看你在什麼環境下面用vba,
一般來說,將文本內容讀出來,傳遞給給vba中設置sql語句的變數即可.
比如excel的例子:
set
rsread
=
new
adodb.recordset
sqlstr
=
你所讀到的文本文件內容
rsread.open
sqlstr,
cnn,
adopenkeyset,
adlockoptimistic
rsread.movefirst
7. VBA SQL語句請教
就5個表,既然用SQL,就不用FOR EACH工作循環了吧,直接寫結果,雖然看起來復雜,但是結果簡單命令,機器執行也更快:
selectcasesType
case1
sExcel_select="(Select"&sTitle&"From[1序數據$]"&sWhere&")"_
&"unionall(Select"&sTitle&"From[2序數據$]"&sWhere&")"
case2
sExcel_select="(Select"&sTitle&"From[3序數據$]"&sWhere&")"
dselect
8. VBA 怎樣執行多個SQL語句
Dim conn as New SqlConnection(連接字元串)
Dim cmd as new sqlcommand
cmd.CommandType = Text 或者SqlProcere
cmd.Connection = conn
cmd.TimeOut= 30
cmd.CommandText = "Update ........." 或者 "Select ..... "
'' 用來執行操作用這個
cmd.ExecuteNoQuery
'' 得到數據用這個
Dim table as new datatable
Dim ad as new DataAdapter (cmd)
ad.Fill(table)
控制項.DataSource = table
如果是多條操作的話,需要用到SqlTransaction, 即事務操作。
Dim Tran as SqlTransaction = conn.BeginTransaction
...
....
'' 執行完畢後
Tran.Commit()
''如果執行有錯誤
Tran.Rollback()