在access中用vba如何把SQL语句查询到的一个值赋给变量?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在access中用vba如何把SQL语句查询到的一个值赋给变量?相关的知识,希望对你有一定的参考价值。

如我定义了strSQL1 = "Select 制动效率 from 制动效率表 WHERE 机车车辆类型='" & Combo1 & "'"查询到了一个数字,还定义了一个变量p,如何把这个值赋给p呢?
我写了段代码Private Sub Command3_Click()
Dim strSQL1
Dim p
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
strSQL1 = "Select 制动效率 from 制动效率表 WHERE 机车车辆类型='" & Combo1 & "'"
rs.Open strSQL1, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
我是新手,还请高手指点啊,越详细越好

以下代码没有运行测试,如果有手误,自行改一下或HI我.
Dim cn As New ADODB.Connection
cn.Open "...." '连接句自己写吧.
Dim cmd As New ADODB.Command
cmd.ActiveConnection = cn
cmd.CommandText = "select * from tb where dt >@d1 and dt<@d2 "
Dim p1 As ADODB.Parameter, p2 As ADODB.Parameter
Set p1 = cmd.CreateParameter("@d1", adDate, adParamInput)
Set p2 = cmd.CreateParameter("@d2", adDate, adParamInput)
p1.Value = Format(Now(), "yyyy-MM-1")
p2.Value = Now()

cmd.Parameters.Append p1
cmd.Parameters.Append p2
Dim rs As ADODB.Recordset

Set rs = cmd.Execute

'这个rs是你要的返回值

rs.Close
Set rs = Nothing
Set cmd = Nothing
'cn.Close
'Set cn = Nothing
参考技术A p=rs("制动效率“)本回答被提问者采纳

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_code from [Sheet1$]

select * from[Sheet1$]   -- 取所有数据


偶然发现,字段名不能用no,估计是保留字,如需要,用中括号括起来,例如:

select[no],prov_name,city_name, xs_mc, xs_code from [Sheet1$]

字段名中含有特殊字符的也要用中括号括起来,如/ ?空格等

Excel查询没有伪表概念,对于表达式的计算直接用select既可,例如

Select23+45    -- 返回68

Selectdate()    -- 返回当前日期

3、修改查询语句


方法:点击右键—弹出菜单—表格—编辑查询

通过修改SQL语句可以变更所取的数据,也可以将建立查询时的简单SQL语句改成复杂的SQL语句。


字段名更换:如果想换个字段名,用“as 新字段名”既可,例如:

select prov_nameas 省, city_name as 城市, xs_mc as 县市, xs_code as 编码 from [Sheet1$]


非正常表格:数据区域(含字段名)不在第一行

需要在工作表名称后面指定数据范围,例如:

selectprov_name, city_name, xs_mc, xs_code from [Sheet1$B2:G2000]

或者,将数据块定义为一个名称,假设定义为mydata,SQL语句如下:

selectprov_name, city_name, xs_mc, xs_code from mydata

注意:使用名称时没有$符号,也没有方括号了。

数据更新:数据源发生变化,需要更新数据,方法:点击右键—弹出菜单—刷新

意外:如果打开Excel文件后弹出不是选择工作表的窗口而是一个“数据连接属性”窗口,可以关闭这个窗口,然后将Excel应用极小化再极大化方式消除,或者在弹出选择文件的窗口时,退回上一级文件夹,删除那个Queries文件夹,就行了。

二、复杂的查询

1、多表联合

相同结构的多个表合并到一起,用union连接SQL语句,例如:

Select * from [财务部$] union all Select * from [市场部$]

Union是去重复的,即相同的记录保留一个(类似distinct),Union all则是直接相加两个结果,不去重复。


增加一个部门字段可以将查询结果中的区分开来,以便知道数据来自哪个表。Union的三个一致,即:字段的数量、类型和顺序。例如:

Select “财务部” as 部门,* from  [财务部$] union all Select “市场部” as 部门,* from [市场部$]

多表联合查询

Select * from [部门$]  bm,  [员工$]  yg where bm.部门编码=yg.部门编码跨工作簿查询果数据不仅来自不同的工作表,还来自不同的文件,一样可以用union联合,例如:

Select “分公司1” as 公司, “财务部” as 部门, * from [F:\\SQL之Excel应用\\分公司1.xlsx].[财务部$] union all

Select “分公司1” as 公司, “市场部” as 部门, * from [F:\\SQL之Excel应用\\分公司1.xlsx].[市场部$] union all

Select “分公司2” as 公司, “财务部” as 部门, * from [F:\\SQL之Excel应用\\分公司2.xlsx].[财务部$] union all

Select “分公司2” as 公司, “市场部” as 部门, * from [F:\\SQL之Excel应用\\分公司2.xlsx].[市场部$]

因为SQL中已经指定了文件名和表名,所以建立连接时连接谁并不重要,这种情况下,建立连接的时候就连接自己,然后再改写SQL语句。

Sub UsingSQL()
Dim Sql As String
Dim j As Integer
Dim r As Integer
Dim Cnn As ADODB.Connection
Dim rs As ADODB.Recordset
With Sheet1
.Cells.Clear
Set Cnn = New ADODB.Connection
With Cnn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Extended Properties=Excel 12.0;" _
& "Data Source=" & ThisWorkbook.Path & "\\数据.xlsx"
.Open
End With
Set rs = New ADODB.Recordset
Sql = "Select * From [Sheet1$]"
rs.Open Sql, Cnn, adOpenKeyset, adLockOptimistic
For j = 0 To rs.Fields.Count - 1
.Cells(1, j + 1) = rs.Fields(j).Name
Next
r = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("A" & r + 1).CopyFromRecordset rs
End With
rs.Close
Cnn.Close
Set rs = Nothing
Set Cnn = Nothing
End Sub

参考技术A DoCmd.OpenQuery "sql语句", acViewNormal, acEdit追问

兄台,我是菜鸟,很多不懂,能不能举个简单的例子.就是点击一个按钮就执行一串sql命令,然后把查询的结果展现出来!我确实没有财富值了,真的很对不起你!能帮个忙吗.祝你财运滚滚,事业节节高升

以上是关于在access中用vba如何把SQL语句查询到的一个值赋给变量?的主要内容,如果未能解决你的问题,请参考以下文章

access2013 VBA中怎样运行sql语句

如何使用sql语句和vba将数据从MS-Access导入excel power查询?

如何在VBA中用ADO连接远程的access数据库

Access VBA中的计数SQL语句

在excel中用vba实现与sql数据库的数据比较

如何在 Microsoft Access 中通过 VBA 设置 INSERT SQL 查询的参数值?