ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 13774|回复: 37

[讨论] update语句根据一个工作簿(2007)内容修改另一个工作簿数据的发现

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-11-7 18:03 | 显示全部楼层 |阅读模式
本帖最后由 zhaogang1960 于 2012-11-7 22:49 编辑

通常使用update语句修改工作簿数据时,使用单一条件

今天在回答遇到一个新情况:update语句根据一个工作簿内容修改另一个工作簿数据
  1. Sub 根据另一个工作簿更新数据update2003()
  2.     Dim cnn As Object
  3.     Dim SQL As String
  4.     Dim p  As String, f As String
  5.     p = ThisWorkbook.Path & ""
  6.     f = Dir(p & "A*.xls")
  7.     Set cnn = CreateObject("adodb.connection")
  8.     cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName
  9.     SQL = "update [Excel 8.0;Database=" & p & f & "].[Sheet$] a,[每日数据$] b set a.批次=b.批次 where a.单号=b.单号"
  10.     cnn.Execute SQL
  11.     cnn.Close
  12.     Set cnn = Nothing
  13. End Sub
复制代码


该语句对Excel2003是有效的,在Excel2007、Excel2010时提示该版本这个功能已被禁用,只能使用逐条记录修改的方式,下面附件中有这两个代码

请看附件
update2003.rar (13.51 KB, 下载次数: 147)
update2007.rar (23.33 KB, 下载次数: 239)

希望该情况能对大家有所帮助,也希望大家参与改进更新数据方法,如果能使用update语句,在Excel2007、Excel2010中不使用逐条判断修改记录,送技术分2分

原帖请看
sql update 语句出错,请帮忙看下
http://club.excelhome.net/thread-940810-1-1.html

使用update语句,在Excel2007、Excel2010中不使用逐条判断修改记录,需要修改IMEX参数:IMEX=0,见6楼、7楼代码

下面是网上关于imex参数的解释:

关于Excel导入的HDR=YES; IMEX=1详解
IMEX ( IMport EXport mode )设置
  IMEX 有三种模式:
  0 is Export mode
  1 is Import mode
  2 is Linked mode (full update capabilities)
  我这里特别要说明的就是 IMEX 参数了,因为不同的模式代表著不同的读写行为:
  当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。
  当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
  当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。
意义如下:
0 ---输出模式;
1---输入模式;
2----链接模式(完全更新能力)



该贴已经同步到 zhaogang1960的微博

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-11-7 19:09 | 显示全部楼层
实在想不出来,真是眼馋啊,很想知道答案……

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-7 19:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
hustnzj 发表于 2012-11-7 19:09
实在想不出来,真是眼馋啊,很想知道答案……

微软禁用该功能,可能它存在缺陷,即没有答案,也可能我没有找到正确的方法

TA的精华主题

TA的得分主题

发表于 2012-11-7 21:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 hustnzj 于 2012-11-7 21:09 编辑
zhaogang1960 发表于 2012-11-7 19:39
微软禁用该功能,可能它存在缺陷,即没有答案,也可能我没有找到正确的方法


赵老师,我发现一点:
在Access 2007中导入的Excel链接表是无法更新的。而Access 03导入的Excel链接表是可以修改的,并且改动会影响到数据源表。大胆推测一下:应该是微软为了保护Excel数据源表的安全而这样设置的了。呵呵。

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-7 21:16 | 显示全部楼层
hustnzj 发表于 2012-11-7 21:08
赵老师,我发现一点:
在Access 2007中导入的Excel链接表是无法更新的。而Access 03导入的Excel链接表 ...

可能是这个原因,提示确实提到了链接Excel 电子表,请看下图:
捕获.JPG

TA的精华主题

TA的得分主题

发表于 2012-11-7 21:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
加上 HDR=yes;imex=0就可以了

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-7 21:33 | 显示全部楼层
HHAAMM 发表于 2012-11-7 21:28
加上 HDR=yes;imex=0就可以了

郝版威武
  1. SQL = "update [Excel 12.0;imex=0;Database=" & p & f & "].[Sheet$] a,[每日数据$] b set a.批次=b.批次 where a.单号=b.单号"
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-11-7 21:37 | 显示全部楼层
本帖最后由 HHAAMM 于 2012-11-7 21:41 编辑
zhaogang1960 发表于 2012-11-7 21:33
郝版威武


惭愧,惭愧,赵兄客气了。这个只是有时容易忽视的细节{:soso_e110:}

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-7 21:42 | 显示全部楼层
HHAAMM 发表于 2012-11-7 21:37
惭愧,惭愧,赵兄可客气。只是有时容易忽视的细节

平时只注重解决问题,却从来不问为什么,这是学工科的只重视实用养成的吧

TA的精华主题

TA的得分主题

发表于 2012-11-7 21:45 | 显示全部楼层
本帖最后由 hustnzj 于 2012-11-7 21:46 编辑
HHAAMM 发表于 2012-11-7 21:28
加上 HDR=yes;imex=0就可以了


版主太牛了,我都想了下,就是没有测试,2分就这样溜走了{:soso_e109:}

啊,赵老师给我技术分了,这是我在EH第一个技术分啊!我太高兴了!谢谢老师!!!{:soso_e163:}
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-11 10:10 , Processed in 0.042892 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表