vba執行sql
❶ 在WPS的VBA中怎麼使用sql語句
方法步驟如下:
1.在網上搜索並下載「wps的vba模塊」。
2.下載解壓完成之後,雙擊」vba6chs「即可安裝:
❷ 如何在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
❸ VBA可以讀取.sql文件來執行裡面的多條語句嗎
看你在什麼環境下面用vba,
一般來說,將文本內容讀出來,傳遞給給vba中設置sql語句的變數即可.
比如excel的例子:
set
rsread
=
new
adodb.recordset
sqlstr
=
你所讀到的文本文件內容
rsread.open
sqlstr,
cnn,
adopenkeyset,
adlockoptimistic
rsread.movefirst
❹ 如何在VBA中執行SQL語句
Set cnn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
'cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Extended Properties=Excel 8.0;" _
& "Data Source=" & ThisWorkbook.FullName
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Extended Properties=Excel 8.0;" _
& "Data Source=" & ThisWorkbook.FullName
Debug.Print ThisWorkbook.FullName
str1 = ActiveSheet.Range("A2")
'strSql = "Select * FROM [資料庫$] Where 商品名稱 like '%" & str1 & "%'"
❺ VBA可以執行SQL文件么,求解
VBA可以執行SQL文件
Set rsRead = New ADODB.Recordset
sqlstr = 你所讀到的文本文件內容
rsRead.Open sqlstr, cnn, adOpenKeyset, adLockOptimistic
rsRead.MoveFirst
❻ Excel VBA 執行操作SQL
類似這樣
'建立連接
Set cnn = New ADODB.Connection
With cnn
.Provider ="Microsoft.ACE.OLEDB.12.0;Extended Properties=excel 12.0"
.Open "你的工作簿路徑" &"\你的工作簿名稱.xls"
End With
sqls = "select * from [sheet1$]" ' SQL語句
Set rst = cnn.Execute(sqls)
Sheets("sheet3").Range("A1").CopyFromRecordsetrst
❼ 求助,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
❽ ACCESS中VBA調用SQL語句的問題
ID不要打上單引號:
rsql = "UPDATE 員工表 set 備注 ='" & 員工備注.Value & "' WHERE ID =" & 員工選擇框.ListIndex
如果還是不行,就再加上VAL轉化一下試試:
rsql = "UPDATE 員工表 set 備注 ='" & 員工備注.Value & "' WHERE ID =" & Val(員工選擇框.ListIndex)
❾ 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
一、界面設計
各控制項名稱屬性分別為: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」
然後就就可以正常運行了。