Excel导入SQLserver,使用OpenDataSource但字符串参数无法正确传入问题
目的:将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这一步时仍然报出如下错误:
'不正常地定义参数对象。提供了不一致或不完整的信息'
请各位高手前来指正一下,谢谢了。。。。。