Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

查询语句为什么不能在VBA中执行?

泰山  发表于:2014-06-24 13:06:20  
复制

dim str as string  

str = "SELECT 汇总表.人员编号, 汇总表.查询姓名 FROM 汇总表 WHERE (((汇总表.人员编号) In (select 汇总表.人员编号  from  汇总表  group  by  汇总表.人员编号  having  count(汇总表.人员编号)>1)));"

CurrentDb.Execute str


如上代码,为什么在代码中不能执行,而上面作为一个查询确可以执行?请帮忙


 

Top
善解人衣 发表于:2014-06-24 13:12:48
有错误信息吗?

小赵 发表于:2014-06-24 14:52:48

前提是查询语句没问题。

dim strsql as string  

strsql=""

 DoCmd.SetWarnings False
DoCmd.RunSQL strsql
DoCmd.SetWarnings True



zhaoyoulong 发表于:2014-06-24 16:14:05

时 间:2013-09-03 10:22:17
作 者:红尘如烟   QQ:593113803  点击这里给红尘如烟发消息
摘 要:CurrentDb().Execute strSql与DoCmd.RunSQL strSql区别是什么?
正 文:

学员问题:
同开两台客户端。DoCmd.RunSQL strSql 用这个执行了一个表的查询后,再执行这个表的更新查询就反应很慢。
改用CurrentDb().Execute strSql 后就没这个问题了。
所以才问CurrentDb().Execute strSql与DoCmd.RunSQL strSql有什么区别的问题。是不是用法上有什么分别?

解答:

具体区别是DoCmd.RunSQL 可以执行access中一些特定的查询,比如查询的条件中引用了某个窗体控件值等。
CurrentDb().Execute 对于一些access中一些特定查询无法执行,只能通过sql代码来执行


补充:
动作查询:会对改变数据的查询,包括更新查询、删除查询、追加查询、生成表查询。
数据定义查询:用于创建或更改数据库对象的查询,如创建表、添加字段、添加索引等。

在Access中可以直接在VBA中来执行动作查询数据定义查询的SQL语句,并且有3种方式可用:
  1. DoCmd.RunSQL 方法
  2. CurrentDb.Execute 方法
  3. CurrentProject.Connection.Execute 方法
 
它们的区别有:
1. DoCmd.RunSQL 方法
  a) 基于 Access 的对象模型。
  b) 只使用 Access SQL 语法,在 SQL 语句中可以使用 VBA 函数。
  c) 在调用前总是需要使用 DoCmd.SetWarnings False 关闭确认对话框的显示。
  d) 查询执行过程中会自动在状态栏显示进度条,可以通过 ESC 键中断。
  e) 可以直接在 SQL 语句中使用“字段1 = Forms!窗体1!客户名称”这样的变量作为条件。
  f) 不能将多个 SQL 语句的执行,嵌套在同一个事务中。
  g) 不能获取动作查询所影响的记录行数。

2. CurrentDb.Execute 方法
  a) 基于 DAO 对象模型。
  b) 只使用Access SQL 语法,在 SQL 语句中可以使用VBA函数。
  c) 没有确认对话框的显示。
  d) 查询执行过程中不会自动显示进度条,不能中断。
  e) 不能直接在 SQL 语句中使用“字段1 = Forms!窗体1!客户名称”这样的变量作为条件。
  f) 可以将多个 SQL 语句的执行,嵌套在同一个事务中。
  g) 可以获取动作查询所影响的记录行数。
  h) 通过链接表连接到SQL Server数据库时,如果表中存在自动编号字段,需要提供特殊的 Option 参数 dbSeeChanges,否则会出错。

3. CurrentProject.Connection.Execute 方法
  a) 基于 ADO 对象模型。
  b) 连接到不同的数据库需要不同的 SQL 语法,如连接到 SQL Server 数据库时需要使用 SQL Server 的 T-SQL 语法,连接到 oracle 数据库时需要使用 PL/SQL 语法。连接到非Access数据库时,在SQL语句中不能使用 VBA 函数。
  c) 没有确认对话框的显示。
  d) 查询执行过程中不会自动显示进度条,不能中断。
  e) 不能直接在 SQL 语句中使用“字段1 = Forms!窗体1!客户名称”这样的变量作为条件。
  f) 可以将多个 SQL 语句的执行,嵌套在同一个事务中。
  g) 可以获取动作查询所影响的记录行数。




总记录:3篇  页次:1/1 9 1 :