Office中国论坛/Access中国论坛

标题: doCmd执行select into时的问题 [打印本页]

作者: foreseer201    时间: 2009-4-14 18:53
标题: doCmd执行select into时的问题
有多个Excel中的数据需要导入到Access,每个表可能有多个Sheet要导入。中间遇到2个问题需要请教各位大侠。

第思路是在VBA中遍历每个Excel,获取每个文件的路径和每个Sheet的那么之后,用下面的语句数据。

SQL = "select * into " & shtName & " from [Excel 8.0;Database=" & filePath & "].[" & shtName & "$]"
DoCmd.RunSQL SQL

第一个问题就是在每执行一次时都有下面的提示框,确定后才可以导入。这样就不能自动了。不知有没有办法可以不让弹出这个提示。

第二个问题很奇怪,本来像下面写死的语句这样执行导入是很快的。
但是要自动循环,所以就要用String变量代替sql中的Excel路径和sheet名(上面的那句),执行起来就慢了很多。不知道有没有高人遇到过这样的问题请解决过。望赐教,非常感谢。
sql = "select * into Sheet1 from [Excel 8.0;Database=D:\Test.xls].[Sheet1$]"
DoCmd.RunSQL SQL
作者: andymark    时间: 2009-4-14 20:42
DoCmd.SetWarnings False
sql = "select * into Sheet1 from [Excel 8.0;Database=D:\Test.xls].[Sheet1$]"
DoCmd.RunSQL SQL

完成后再改回来
DoCmd.SetWarnings True
作者: andymark    时间: 2009-4-14 20:44
直接用 Execute 代替RunSql  , 这样不会显示烦人的提示
CurrentProject.Connection.Execute Sql
作者: chaojianan    时间: 2009-4-14 21:07
学习了。谢谢。
作者: foreseer201    时间: 2009-4-14 21:14
本帖最后由 foreseer201 于 2009-4-14 21:15 编辑

感谢andymark老大,一次教会了两种解决方法。
作者: asklove    时间: 2009-4-15 08:47
摘之论坛上的一位高手
工具-选项-编辑/查找-操作查询-不要勾上
这样你更新查询或删除查询什么的,就不会弹出信息确认
作者: foreseer201    时间: 2009-4-15 09:58
多谢asklove。又学到一招
作者: foreseer201    时间: 2009-4-15 16:56
第二个问题原因也找到了,和字符串无关。是因为在WorkBook对象还没关闭的时候就循环执行select into的操作了(在打开的workbook对象中遍历每个worksheet进行select into),事实证明这样很慢。

解决的方式是在遍历Excel文件的时候不做别的操作,只将得到的Excel路径、Sheet名等保存起来(比如保存在一个数组里),遍历完毕关闭workbook对象之后,再从该数组里获取文件路径和sheet名的列表进行循环导入,这样速度就快多了。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3