使用程序生成的Excel文件,出现"格式不对的'错误。通过Excel程序再存下盘就OK了。
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
-
不正常地定义参数对象提供了不一致或不完整的信息"的解决办法,TADOQUERY.ParamCheck:=False; OK!
Excel文件select * from [Sheet2$A3:E6]不区分大小写 OK!
原因:在delphi用AdoQuery执行SQL语句时TADOQuery对象会把SQL语句中":"后的字符当作变量来使用,导致数据识别错误,因此只要将这种检查取消掉就可以了,在TADOQuery属性中正好ParamCheck就是设置检查的关键所在,设为False,这样它就可以跳过检查直接执行SQL语句。
- 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$' 不是一个有效名称。请确认它不包含无效的字符或标点,且名称不太长。
|
请发表评论