當前位置:首頁 » 編程語言 » vba執行多個sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

vba執行多個sql

發布時間: 2022-07-06 05:15:21

Ⅰ 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

Ⅱ access vba 一個sub多次使用sql

1)sql2 = "select last(成本單價) from RM_櫥櫃分廠材料成本2015 where 材料類別 = '" & Combo0.Value & "'"
data.Open sql1, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
這里也是sql1么?似乎應改為sql2吧
2)關了sql1重開sql2沒什麼不可以的,那是在釋放記錄集對象所佔用的內存,對於在低性能電腦上運行程序是很有好處的。
3)如果是多個記錄的記錄集,可以使用do……loop循環之類的方法移動指針而不必重開記錄集,但你上面這兩個記錄集都是匯總查詢單記錄的,用不到的。以do……loop循環為例:
with data
.movefirst
do until .eof
Text25 = .Fields(0)
.movenext
loop
end with

Ⅲ 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

Ⅳ 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

Ⅳ 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()

Ⅵ 用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」

然後就就可以正常運行了。

Ⅶ 用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
跟著點擊該命令按鈕就可以一次執行兩條語句了。

Ⅷ 求教VBA連接SQL資料庫的詳細方法及解釋。

1、基本上所有的資料庫都有對應的寫法(有些資料庫是要裝連接驅動才能連),比如"Provider=Microsoft.Jet.OLEDB.4.0(用來連接access)或者provider =MSDASQL,而且每種資料庫也可能會有多種連接方法(Provider意即資料庫引擎),常見的有下面這些

Provider 代碼 Provider
ADSDSOObject Active Directory Services
Microsoft.Jet.OLEDB.4.0 Microsoft Jet databases
MSDAIPP.DSO.1 Microsoft Internet Publishing
MSDAORA Oracle databases
MSDAOSP Simple text files
MSDASQL Microsoft OLE DB provider for ODBC
MSDataShape Microsoft Data Shape
MSPersist Locally saved files
SQLOLEDB Microsoft SQL Server
2、參見http://www.w3school.com.cn/ado/met_conn_open.asp#connectoptionenum
3、這樣就可以對book1.xlsx中的數據使用sql語法進行操作
4、當你需要返回結果的,比如說你要查詢資料庫符合某個條件的有幾條記錄,或者說取出資料庫中符合條件的一批記錄的時候就要用數據集,單一的conn.execute只能執行操作,不能返回數據,必須配合結果集使用才可取回數據。

Ⅸ VBA可以讀取.sql文件來執行裡面的多條語句嗎

看你在什麼環境下面用vba,
一般來說,將文本內容讀出來,傳遞給給vba中設置sql語句的變數即可.
比如excel的例子:
set
rsread
=
new
adodb.recordset
sqlstr
=
你所讀到的文本文件內容
rsread.open
sqlstr,
cnn,
adopenkeyset,
adlockoptimistic
rsread.movefirst

Ⅹ 如何在access的VBA中,執行查詢類的sql命令

在組合框的change事件里寫類似如下代碼:

以下代碼的意思是:combo是顯示供應商的一個組合框,通過選擇供應商,在Text4裡面顯示該供應商的總訂單數。


PrivateSubCombo0_Change()
Dim供應商ID
供應商ID=Combo0.Value

DimsqlAsString,rsAsRecordset
sql="selectcount(*)ascntfrom[采購訂單]where[供應商ID]="&供應商ID'查詢的SQL語句。
Setrs=CurrentDb.OpenRecordset(sql)
Text4.SetFocus
Text4.Text=rs.Fields(0)
EndSub