Excel导入SQLserver,使用OpenDataSource但字符串参数无法正确传入问题

learnning_zhang 2007-12-08 02:24:03
目的:将Excel表导入SQLserver; 使用软件:SQLserver2000,Borland Delphi 7,Excel2003

在SQL查询分析器中使用如下语句,可以正常获得结果:
use test INSERT INTO Sheet1$(表名) SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="C:\Documents and Settings\zyy.F9E06C308CCF416\桌面\aa.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...Sheet1$;
OpenDataSource函数使用的是两个字符窜参数。
于是我在Delphi中使用ADOQuery:
......
ADOQuery.SQL.Add('.....(以上SQL语句)');
.....
但由于OpenDataSource函数的两个参数是字符窜参数,与Add('')中的单影号相互影响无法正确识别。
如:...Add('...OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',...');编译器会认为 '...OpenDataSource( ' 是个字符串,而 Microsoft.Jet.OLEDB.4.0 是一串未声明的变量,进而报错。
于是采用以下代码进行改进和调试:
......
SqlStr1:='INSERT INTO Sheet1$ SELECT * FROM ';
SqlStr2:=SqlStr1+'OpenDataSource('+' '''+'Microsoft.Jet.OLEDB.4.0'+''' '+','+' '''+'Data Source="C:\Documents and Settings\zyy.F9E06C308CCF416\桌面\aa.xls";User ID=Admin;Password=;Extended properties=Excel 5.0'+''' '+')';
SqlStr:=SqlStr2+'...Sheet1$';
with ExcelToSQLQuery1 do
begin
Sql.Clear;
Sql.Add(SqlStr);
try
ExecSql;
showmessage('ok');
except
ShowMessage('出错');
end;
end;
最后在单步调试的时候SqlStr变量能够得到正确的值(INSERT INTO Sheet1$ SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="C:\Documents and Settings\zyy.F9E06C308CCF416\桌面\aa.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...Sheet1$;),
但在ExecSql这一步时仍然报出如下错误:
'不正常地定义参数对象。提供了不一致或不完整的信息'

请各位高手前来指正一下,谢谢了。。。。。
...全文
373 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
learnning_zhang 2007-12-10
  • 打赏
  • 举报
回复
没有那位高手帮忙解答一下吗?我真的非常希望知道答案。。。。。
learnning_zhang 2007-12-09
  • 打赏
  • 举报
回复
非常感谢楼上的回答!!!

可能你没有看清楚我的提问。我这个问题产生的最初原因就是因为将SQL语句加入Delphi中(ADOQuery.SQL.Add(''))要求加的是字符串,其单引号与SQL语句中的OpenDataSource函数的参数(要求为字符串)的单引号相呼影响,使得其参数被Delphi的编译器认为市无法编译的变量,进而报错。
如你这句:
SqlStr2:=SqlStr1+'OpenDataSource(' Microsoft.Jet.OLEDB.4.0,Data Source= '' C:\Documents and Settings\zyy.F9E06C308CCF416\桌面\aa.xls '' ;UserID=Admin;Password=;Extended properties=Excel5.0')'
编译器会认为 'OpenDataSource'为一个字符串 但把 Microsoft.Jet.OLEDB.4.0,Data Source= 这一长
串认为是几组未声明的变量来处理,进而报错。其后依次是 字符串: '' 未声明变量: C:\Documents and Settings\zyy.F9E06C308CCF416\桌面\aa.xls 字符串: '' 未声明变量: ;UserID=Admin;Password=;Extended properties=Excel5.0 字符串: ')'

虽然你的回答没能解决我的疑问,但是还是非常感谢!!!
lek608 2007-12-08
  • 打赏
  • 举报
回复
SqlStr2:=SqlStr1+'OpenDataSource('Microsoft.Jet.OLEDB.4.0,Data Source=''C:\Documents and Settings\zyy.F9E06C308CCF416\桌面\aa.xls'';UserID=Admin;Password=;Extended properties=Excel5.0')'

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧