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()兄台,我是菜鸟,很多不懂,能不能举个简单的例子.就是点击一个按钮就执行一串sql命令,然后把查询的结果展现出来!我确实没有财富值了,真的很对不起你!能帮个忙吗.祝你财运滚滚,事业节节高升
access2013 VBA中怎样运行sql语句
选择要查询的Excel文件和文件中的的工作表,就可以将相应工作表的数据取过来。表现形式可以是表,也可以是数据透视表等。2、SQL查询语句 如果是挑选部分列数据,就需要用SQL语句(取所有数据也可以用SQL语句)。建立查询时,选择工作表后不要点击“确定”按钮,而是先点击“属性”按钮,弹出窗口中选择“...
Access VBA中如何使用 SQL 语句。
Private Sub Command111_Click() Dim sql As String '声明ADO记录集对象 Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset '实例化记录集对象 '拼写SQL语句并赋值到变量 sql = "SELECT DGZY.usename FROM DGZY WHERE (((DGZY.usename) Like '张三'));" '打开...
用vb连接access数据库以后,如何一次性执行多条sql语句
1)新建一个ACCESS窗体,窗体添加一个命令按钮;2)编写按钮单击事件过程 Private Sub Command1_Click()Dim strSql as stringstrSQL="Update Policy SET LatestDueDate=Year(Date()) & '-' & Format(PolicyDate,'mm-dd')" DoCmd.RunSql strSQL '运行第一个更新语句strSQL="UPDATE Policy SET ...
ACCESS 如何用VBA语言向数据库中填加数据?
在ACCESS中使用VBA语言向数据库添加数据,可以通过编写SQL语句和利用VBA的UPDATE功能实现。首先,你需要确保已经建立了ACCESS数据库并与VBA建立了链接。使用SQL语句添加数据的步骤如下:编写Insert语句,如"Insert into 表名(字段1,字段2) values('字段1内容','字段2内容')",将数据插入到指定的表中。这...
写出在access中执行sql语句的步骤。
access中执行sql语句的步骤:打开一个Access数据库软件,可打开已创建好的数据库即可。Access是由微软发布的关系数据库管理系统,它结合了MicrosoftJet Database Engine和图形用户界面两项特点,是Microsoft Office的系统程序之一,也是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理...
在access中用vba如何运行一个已经存在的动作查询?
ACCESS中用VBA代码运行一个已经定义的动作查询,可以用运行DoCmd对象的OpenQuery方法予以实现。下面例子示范单击ACCESS窗体命令按钮,执行一个预定义的动作查询将表T1中的数据清空。1)预先定义一个动作查询 将SQL语句:delete from T1;保存为查询名 “清空T1"2) 执行该动作查询 Private Sub Command0_Click...
ACCESS 如何用VBA语言向数据库中填加数据?
首先,打开ACCESS数据库,确保已连接VBA环境。其次,使用`sql`语句创建一个插入操作。其格式为`"INSERT INTO 表名(字段1,字段2) VALUES('字段1内容','字段2内容')"`。这里,`表名`代表你要插入数据的表名,`字段1,字段2`代表表中你想要插入数据的字段名,`'字段1内容','字段2内容'`代表你...
access中vba的ado技术中的sql式子如何表达?
'是因为SQL中的字符串需要单引号括起来 "是因为VBA中字符串表达式需要用双引号括起来 &是VBA中的连接符,它是把字符串之间连接起来。假设Me![User_Name]为张三 Me![User_Password]为abc 那么SQL收到的代码将会是 【select * From 用户 where 名称='张三' and 密码= 'abc'】...
如何将VBA中的SQL查询结果显示出来?在ACCESS中
1.点击:创建--宏。打开宏编辑器。2.在操作这一栏,从下拉列表中,选择runcode操作。3.弹出了操作参数对话框,点击函数名称右边的这个省略号。4.打开了表达式生成器,在下方选择函数进行编辑,或者自己输入公式,然后点击确定按钮。5.点击菜单栏上面的保存按钮,在弹出的另存为对话框中,输入宏的名称,...
Access VBA 编译错误 缺少语句结束
VBA中不能直接执行SQL 需要用CurrentDb.Execute("SQL语句")来执行 另外,你的SQL也有问题,文本型的数据应该有单引号 CurrentDb.Execute("update 年度卡号 set 卡号 = 'nkkh', 当前 = 1 where 年度 = 'nknd'")