当前位置:首页 » 编程语言 » 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 10:31:52 浏览:348
mysql查看数据库位置 发布:2024-11-15 10:25:16 浏览:439
需要学Python 发布:2024-11-15 10:23:41 浏览:836
如何制作安卓平板软件 发布:2024-11-15 10:23:39 浏览:215
手机忘记密码被锁预示着什么 发布:2024-11-15 10:22:15 浏览:193
android图片管理 发布:2024-11-15 10:13:02 浏览:9
算法微调 发布:2024-11-15 10:07:44 浏览:542
python列表查询 发布:2024-11-15 10:06:08 浏览:133
保存在服务器的图片如何删除 发布:2024-11-15 09:55:09 浏览:801
花雨庭国际服服务器ip 发布:2024-11-15 09:54:00 浏览:503