易简.道(ething)

爱在进行时
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

DELPHI TADOQuery 和Excel 相关

Posted on 2010-03-15 10:06  如是如是  阅读(1013)  评论(0编辑  收藏  举报
  1. 使用程序生成的Excel文件,出现"格式不对的'错误。通过Excel程序再存下盘就OK了。
  2. Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=c:\ee.xlsx;Mode=Share Deny None;Extended Properties=Excel 8.0;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:HDR=NO
  3. 不正常地定义参数对象提供了不一致或不完整的信息"的解决办法,TADOQUERY.ParamCheck:=False; OK!

    Excel文件select * from [Sheet2$A3:E6]不区分大小写 OK!

    原因:在delphi用AdoQuery执行SQL语句时TADOQuery对象会把SQL语句中":"后的字符当作变量来使用,导致数据识别错误,因此只要将这种检查取消掉就可以了,在TADOQuery属性中正好ParamCheck就是设置检查的关键所在,设为False,这样它就可以跳过检查直接执行SQL语句。

  4. Delphi测试,

SQL语句的构造如下,[Sheet1$a1:e4] a a.id a.flowid

表名:[Sheet1$a1:e4] [Sheet1$] [MyNamedRange]

别名:a

列:a.id a.flowid

 

对 Excel 工作簿中表(或范围)的有效引用。
若要引用完全使用的工作表的范围,请指定后面跟有美元符号的工作表名称。例如:

select * from [Sheet1$]
若要引用工作表上的特定地址范围,请指定后面跟有美元符号和该范围的工作表名称。例如:

select * from [Sheet1$A1:B10]
若要引用指定的范围,请使用该范围的名称。例如:

select * from [MyNamedRange]

说明:
可以引用Excel 工作簿中的三种对象:
• 整张工作表:[Sheet1$]  ,Sheet1 就是工作表的名称
• 工作表上的命名单元格区域:[MyNamedRange] (不需要指定工作表,因为整个xls中命名区域只能唯一)
XLS命名方法:选中单元格范围》插入》名称》定义
• 工作表上的未命名单元格区域 :[Sheet1$A1:B10]
(在关系数据库提供的各种对象中(表、视图、存储过程等),Excel 数据源仅提供相当于表的对象,它由指定工作簿中的工作表和定义的命名区域组成。命名区域被视为"表",而工作表被视为"系统表")

   

注意:
•必须使用[](方括号),否将报:
FROM 子句语法错误
•必须跟$(美元符号),否则报:
Microsoft Jet 数据库引擎找不到对象'Sheet2'。请确定对象是否存在,并正确地写出它的名称和路径。
•如果工作表名称不对,或者不存在,将报:
'Sheet2$' 不是一个有效名称。请确认它不包含无效的字符或标点,且名称不太长。