vba查詢sql
㈠ 在vba中怎麼用sql語句吧excel工作表和資料庫表連接查詢
摘要 VBA連接SQL SERVER資料庫操作Excel。
㈡ 如何在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
㈢ 用vba通過sql查詢xls文件的內容
以下內容引用於excelhome論壇。建議去論壇查看更多信息。
'在Excel中使用SQL語句總結-1:
'************************************標准SQL查找代碼:*********************************************************
SubSQL_Excel_2003_2007()
'OnErrorResumeNext'如果出現錯誤,忽略,然後執行下一行代碼。
Application.ScreenUpdating=False'關閉屏幕刷新,成對出現,提高速度
Application.DisplayAlerts=False'關閉提示,,成對出現,避免出現提示框
'---------------------------------------參數聲明部分---------------------------------------------------------
Dimcnn,SQL$'定義資料庫連接和SQL語句
Setcnn=CreateObject("adodb.connection")'創建資料庫連接
Setrs=CreateObject("adodb.recordset")'創建一個數據集保存數據
'---------------------------------------設置資料庫連接---------------------------------------------------------
cnn.Open"Provider=Microsoft.ACE.OLEDB.12.0;ExtendedProperties=Excel12.0;DataSource="&ThisWorkbook.FullName
'將EXCEL文件作為資料庫連接,實際並不打開EXCEL,
'Excel2003版本:cnn.Open"Provider=Microsoft.jet.OLEDB.4.0;ExtendedProperties=Excel8.0;DataSource="&ThisWorkbook.Path&"數據表.xls"
'Excel2007版本:cnn.Open"Provider=Microsoft.ACE.OLEDB.12.0;ExtendedProperties=Excel12.0;DataSource="&ThisWorkbook.Path&"數據表.xlsx"
'帶參數的連接字元串:cnn.Open"provider=microsoft.jet.oledb.4.0;extendedproperties='excel8.0;HDR=yes;IMEX=2';datasource="&ThisWorkbook.FullName
'HDR=Yes代表Excel檔中的工作表第一行是標題欄,標題只能是一行,不能使多行,或者合並的單元格。
'HDR=no工作表第一行就是數據了,沒有標題欄,不使用欄位,則欄位就以f代表,第一列列名就是:f1,第二列列名:f2
'IMEX匯入模式0隻讀1隻寫2可讀寫
'當IMEX=0時為「匯出模式」,這個模式開啟的Excel檔案只能用來做「寫入」用途。
'當IMEX=1時為「匯入模式」,這個模式開啟的Excel檔案只能用來做「讀取」用途。
'當IMEX=2時為「連結模式」,這個模式開啟的Excel檔案可同時支援「讀取」與「寫入」用途。
'DataSource存儲查詢數據來源的工作薄名稱,資料庫路徑為:數據表.xls或本表:&ThisWorkbook.FullName
'---------------------------------------設置SQL語句---------------------------------------------------------
SQL="select*from[數據表_1$A1:G100]where姓名='馬拉多納'"
'在Sheet1表內查找列名為:姓名中所有:馬拉多納的數據。
'[XXX$A2:G100]的中括弧和$為特別數據表標示符,XXX為Sheet名,A2:G100是選取的區域。
'SQL語句是一個字元串,雙引號開頭和結尾,列名兩邊無單引號,表示一個字元串:『馬拉多納』,要用單引號擴上,數字就不用了。
'Nu=36:AA="馬拉多納":setSh=Sheet1:SQL="select*from["&Sh.name&「$]where姓名=『」&AA&「』and年齡=Nu"
'---------------------------------------SQL結果處理---------------------------------------------------------
Setrs=cnn.Execute(SQL)'將SQL語句獲得的數據傳遞給數據集
Sheets("結果").Cells.ClearContents'清理保存數據的區域
Sheets("結果").Range("a2").CopyFromRecordsetrs'將數據集粘貼到Excel中,左上角為A2,無列名。
'Sheets("結果").Range("b2").CopyFromRecordsetcnn.Execute(SQL)'可以不聲明Y,直接使用
cnn.Close'關閉資料庫連接
Setcnn=Nothing'將CNN從內存中刪除。
'-----------------------------------------------------------------------------------------------------
Application.ScreenUpdating=True
Application.DisplayAlerts=True
EndSub'這就是最簡單的EXCEL中SQL的應用,其他的都是SQL的運用了
㈣ 如何將VBA中的SQL查詢結果顯示出來在ACCESS中
前提:DOCMD
對象的OPENQUERY方法僅可用於
Microsoft
Access
資料庫環境
(.mdb)。
語法:expression.OpenQuery(QueryName,
View,
DataMode)
OPENQUERY方法用於打開一個預置的查詢,而不能打開一個SQL查詢語句,故此你上面的用法被系統提示錯誤。
正確的用法是先將SQL語句:「select
*
from
學生成績表
where
分數>90」預存為一個ACCESS查詢,例如將其命名為:高分成績查詢表
然後在某個命令按鈕添加下列過程。例如:
Private
Sub
Command1_Click:
Docmd.Openquery
"高分成績查詢表"
End
Sub
注:DOCMD
對象的OPENQUERY方法
的用法可以是多種多樣的,上面僅列出其中一個例子。
㈤ 如何編寫VBA代碼打開SQL語句(選擇查詢)
我根據你的問題也補充了一下。
注意指針一次只能指向一條記錄。
讀取當前記錄後要用RS.MOVENEXT將指針移到下一條記錄
runsql是一個SUB,它無法返回值.所以它不能運行 選擇查詢 的SQL語句
建議用ADODB
如下.我在ACCESS里測試通過.希望對你有幫助
Private Sub Command0_Click()
Dim rs As New ADODB.Recordset
Dim SQL As String
Dim intN as Integer
SQL = "select * from clerkdocu"
rs.Open SQL, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
Do until rs.eof
For intN=0 to rs.fields.count-1
msgbox rs(intN) '你把這一句修改一下。
next
rs.movenext
loop
rs.Close
Set rs = Nothing
End Sub
㈥ 用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」
然後就就可以正常運行了。
㈦ Excel 請問VBA中如何實現SQL 中的SELECT查詢
一般是select查詢的順序為:
select
分組欄位+聚合函數+from+where+group
by+having+order
by
select查詢語句很復雜,最簡單的舉例如:
select
*
from
[信息庫$]
where
性別="男"
從信息庫表中找出性別為男的所有數據條目。
㈧ vba sql查詢
sql一般用在多條件查詢,對資料庫讀寫等。
1. VBA如何建立sql連接
A.在VBA Project 窗口中,「工具—引用—Microsoft ActiveX Data Objects 2.0 Library」,如下圖所示
B. VBA語句
Private Sub CommandButton1_Click()
Dim cnn As ADODB.Connection』定義變數
Dim sql$, Stext$, i As Integer
Worksheets(3).Cells.Clear
Stext = IIf(TextBox1.Value = "", "*", TextBox1.Value)
Set cnn = CreateObject("adodb.connection")』生成對象
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName』打開資料庫
If TextBox1 = "" Then
sql = "select * from [sheet2$]"』sql語句
Else
sql = "select * from [sheet2$] where 姓名 like '" & TextBox1.Value & "'"
End If
Worksheets(3).[a1].CopyFromRecordset cnn.Execute(sql)』執行sql語句
cnn.Close
Set cnn = Nothing
End Sub
2. sub text()
Dim cnn As ADODB.Connection』定義變數
Dim rs as adodb.recordset
Set cnn = CreateObject("adodb.connection")』生成對象,若定義變數時為Dim cnn As New ADODB.Connection,此句可省略
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName』打開資料庫
sql = "select * from [sheet2$] where 姓名 like '" & TextBox1.Value & "'"
rs.open sql,cnn,adOpenKeyset.adLockOptimistic』生成查詢記錄,為後面出書數據准備
Worksheets(3).[a1].CopyFromRecordset rs
end sub
________________________________________________________________________
以下根據網路整理
2 Select SQL語句
SELECT * FROM table_name WHERE column1 = xxx [AND column2 > yyy] [OR column3 <> zzz]
'*'表示全部的欄位都列出來,如果不全部列出,則可以寫欄位名稱如 學號,姓名……;WHERE 之後是接條件式,把符合條件的資料列出來,table_name如果為工作表名稱,書寫格式[工作表名$],下同。
SELECT column1,AVG(column2) FROM table_name GROUP BY column1 HAVING AVG(column2) > xxx
說明: 1.GROUP BY: 以column1 為一組計算 column2 的平均值必須和 AVG、SUM等整合性查詢的關鍵字一起使用。2.HAVING : 必須和 GROUP BY 一起使用作為整合性的限制。
復合性的查詢:SELECT * FROM table_name1 WHERE EXISTS (SELECT * FROM table_name2 WHERE conditions )
說明:1.WHERE 的 conditions 可以是另外一個的 query。2. 在此是指存在與否。
SELECT column1,columns2,...FROM table_name
說明:把table_name 的特定欄位資料全部列出來
SELECT COUNT (*) FROM table_name WHERE column_name = xxx
說明:查詢符合條件的資料共有幾筆。
1.計算出總和,所選的欄位必須是可數的數字形態。2.除此以外還有 AVG() 是計算
SELECT SUM(column1) FROM table_name
說明:平均、MAX()、MIN()計算最大最小值的整合
SELECT * FROM table_name1 WHERE column1 BETWEEN xx AND yy
說明:BETWEEN 表示 column1 的值介於 xx 和 yy 之間。
3. update SQL語句
UPDATE table_name SET column1='xxx' WHERE conditoins
說明:1.更改某個欄位設定其值為'xxx'。
2.conditions 是所要符合的條件、若沒有 WHERE 則整個 table 的那個欄位都會全部被更改。
4. deletesql語句
刪除資料: DELETE FROM table_name WHERE conditions
說明:刪除符合條件的資料。
說明:關於WHERE條件後面如果包含有日期的比較,不同資料庫有不同的表達式
5.SQL中通配符用
• "%" 表示零個或多個,
• "_"表示任何單一字元
• [charlist] 字元列中的任何單一字元
• [^charlist] [!charlist] 不在字元列中的任何單一字元
• select * from databasename where fieldname like '%XX%'
• SELECT * FROM Persons WHERE City LIKE '[AOF]%'
• 從上面的 "Persons" 表中選取居住的城市以 "A" 或 "O" 或 "F" 開頭的人
• SELECT * FROM Persons WHERE City LIKE '[!AOF]%'
• 從上面的 "Persons" 表中選取居住的城市不以 "A" 或 "O" 或 "F" 開頭的人
㈨ Excel VBA SQL如何多表聯合查詢
我也是個新手,趁此機會學習了一下,技術不高,寫的太長了,基本符合要求,除了那生產信息,銷售信息的合並單元格外
selectabcg.型號,階段,生產日期,生產數,不良數,銷售日期,銷售數量from(selectabc.型號,階段,日期,生產日期,生產數,不良數from(selecta.型號,階段,日期from[表A$]aleftjoin(select型號,生產日期as日期from[表B$]UNIONselect型號,銷售日期as日期from[表C$])bcona.型號=bc.型號)abcleftjoin(select型號,生產日期,SUM(生產數)AS生產數,SUM(不良數)AS不良數from[表B$]groupby型號,生產日期)bgONabc.型號=bg.型號andabc.日期=bg.生產日期)abcgleftjoin(select型號,銷售日期,SUM(銷售數量)AS銷售數量from[表C$]groupby型號,銷售日期)cgonabcg.型號=cg.型號andabcg.日期=cg.銷售日期orderbyabc.型號,abc.日期
剛少了個排序
㈩ Excel 求助,如何使用VBA實現遠程訪問SQL資料庫
VBA
連接
SQL
SERVER
資料庫
實例:
Dim
strConn
As
String,
strSQL
As
String
Dim
conn
As
ADODB.Connection
Dim
ds
As
ADODB.Recordset
Dim
col
As
Integer
'連接資料庫的字元串
strConn
=
"Provider=SQLOLEDB.1;Persist
Security
Info=True;User
ID=[user];Password=[password];Initial
Catalog=[database];Data
Source=[資料庫IP地址或資料庫伺服器名稱];Connect
Timeout=720;
"
'查詢語句,如果sql語句很長可以用strSQL=strSQL+來連接分成多段的語句,如果語句很短可以只寫在一行上。
strSQL
=
"select
*
from
Hy_KPI_Shop_Dept_WeekRpt
"
strSQL
=
strSQL+"where
sdate='2014-01-01'
order
by
sdate,shopid
"
Set
conn
=
New
ADODB.Connection
Set
ds
=
New
ADODB.Recordset
'打開資料庫連接
conn.Open
strConn
'該句和資料庫連接字元串處的Connect
Timeout=720,表示說如果語句運行時間很長,這兩句可以延長vba的等待時間,沒有這兩句,vba往往會報查詢超時。
conn.CommandTimeout
=
720
With
ds
'根據查詢語句獲得數據
.Open
strSQL,
conn
'自動控制加入所有列標題
For
col
=
0
To
ds.Fields.Count
-
1
'請注意Offset(0,
col)中的參數一定要正確,該句表示標題將會寫在第一行,從A1單元格開始,如果不想寫入標題行,可將下面這句注釋掉。
Worksheets("門店各課KPI周報").Range("A1").Offset(0,
col).Value
=
ds.Fields(col).Name
Next
'加入所有行數據,該句表示查詢結果將會寫在第一行,從A1單元格開始,但是由於標題行寫在第一行了,所以實際這一行從標題下的一行寫入。
Worksheets("sheet1").Range("A1").Offset(1,
0).CopyFromRecordset
ds
End
With
'關閉資料庫連接和清空資源
Set
ds
=
Nothing
conn.Close
Set
conn
=
Nothing