當前位置:首頁 » 編程語言 » vba查詢sql

vba查詢sql

發布時間: 2022-05-03 11:18:46

㈠ 在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

熱點內容
伺服器請求慢怎麼排查 發布:2024-11-15 06:55:35 瀏覽:320
php自學還是培訓 發布:2024-11-15 06:54:05 瀏覽:182
在哪裡找到sim卡設置密碼 發布:2024-11-15 06:51:47 瀏覽:392
細說phppdf 發布:2024-11-15 06:38:35 瀏覽:276
征途PK腳本 發布:2024-11-15 06:37:51 瀏覽:680
vbs打不開編譯器錯誤 發布:2024-11-15 06:35:12 瀏覽:344
深海迷航密碼在哪裡 發布:2024-11-15 06:30:23 瀏覽:303
伺服器日誌怎麼分析 發布:2024-11-15 06:22:04 瀏覽:525
字體目錄在哪個文件夾 發布:2024-11-15 06:20:28 瀏覽:181
php種子怎麼打開 發布:2024-11-15 06:07:01 瀏覽:346