编写环境:VB6+ACCESS2003。想将ACCESS数据库中一个数据表Oki的数据导出到 c:\abc.xls 中的xxx数据表。
用SQL语句:Select * into [Excel 8.0;Database=c:\abc.xls].[xxx] from Oki由于数据表 xxx 已存在,所以要将数据表 xxx 先删除。在建立好与c:\abc.xls的连接后,我用SQL 语句:OutDbConn.Execute "Drop Table xxx"。但执行结果却只是将XXX数据表的数据删除了,未能将数据表删除。该工作簿(abc.xls)有5个工作表。还有,用SQL语句:Select * into [Excel 8.0;Database=c:\abc.xls].[xxx] from Oki 导出生成的数据表,再用.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "Table"))的方法读取该工作簿(abc.xls),得到的相同表格名称却有两个,如:xxx 和 xxx$.请高手们帮我解答一下,谢谢!

解决方案 »

  1.   

    第一个问题:是这样的,引用AOD对象写SQL语句是不能直接对链接的Excel表进行删除操作的,引用Excel对象才可以。如果你坚持要用AOD对象写SQL语句的话可以把该数据库记录都赋空值。
      

  2.   

    谢谢  RUKYO(SpeakFool - 蠢蠢的男子汉) 的解答。不想引用Excel对象,是考虑如果计算机在没有安装Office时会产生错误。你提到的用AOD对象写SQL语句时,将数据库记录都赋空值?什么意思?不大明白,如果覆盖当前存在的工作表数据时,用Select * into 的方法是行不通的,而如果用Insert into 的方法,如果没有字段名,也行不通啊。我很菜的,不知道是否有更好的方法。
      

  3.   

    你使用的是外部数据库。有些方法未必支持。对于 Excel 表 Jet 引擎仅支持 Add 和 Edit,不支持 Delete。
    你可以判断一下目标表是否存在。(例如用 Select 读一下,并拦截错误。)如果表存在,就用 Inset Into 语句。On Error Goto EH
    Set rs = OutDbConn.Execute ("Select * From [Excel 8.0;Database=c:\abc.xls].[xxx$]) '对于Excel表要用$OutDbConn.Execute "Insert Into [Excel 8.0;Database=c:\abc.xls].[xxx] Select * From Oki"A:
    '......Exit SubEH:
    If Err.Number = -2147217865 Then '表不存在
    OutDbConn.Execute "Select * into [Excel 8.0;Database=c:\abc.xls].[xxx] From Oki"
    Resume A
    End If
    MsgBox "实时错误" & Err.Number & ":" & vbCrLf & Err.Description
      

  4.   

    还有更好的方法吗?另外,用SQL语句:Select * into [Excel 8.0;Database=c:\abc.xls].[xxx] from Oki 导出生成的数据表,再用.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "Table"))的方法读取该工作簿(abc.xls),得到的相同表格名称却有两个,如:xxx 和 xxx$.请高手们帮我解答一下,谢谢!晚上来结贴.