我在同一架机里写了2个程序,分别连接2个不同的数据库(同一个SQL里的2个数据库)
这是我第一个程序备份数据库的语句:
with Frm_DB.ADOQ,SQL do
begin
//制作操作日志
close;
Clear;
Add('use Master');
ExecSQL;
Clear;
Add('execute sp_helpdevice');
ExecSQL;
Clear;
Add('backup database SP_school to disk=:disk with init');
Parameters.ParamByName('disk').Value:='c:\SP_sch.dat';
ExecSQL;
Clear;
Add('use SP_school');
ExecSQL;
end;
第一个程序还原数据库的语句:
with ADOQbak,SQL do
begin
close;
clear;
Add('use master alter database SP_school set offline WITH ROLLBACK IMMEDIATE');
Add('restore database SP_school from disk=:disk with REPLACE');
Add('alter database SP_school set online with rollback immediate');
parameters.ParamByName('disk').Value :='c:\SP_sch.dat';
execsql;
end;
第一个程序运行正常.我的第二个程序也采用上面的语句,只是数据库名改了,'SP_school'改为'sorrow_pig',备份路径也改成'D:\sorrow_pig.dat',
备份正常,但是恢复老是出错:project sorrow_pig.exe raised exception class EDatabaseErrow with message'ADOQbak:Parameter 'disk' not found '
请大侠们指点.叩谢!!!
这是我第一个程序备份数据库的语句:
with Frm_DB.ADOQ,SQL do
begin
//制作操作日志
close;
Clear;
Add('use Master');
ExecSQL;
Clear;
Add('execute sp_helpdevice');
ExecSQL;
Clear;
Add('backup database SP_school to disk=:disk with init');
Parameters.ParamByName('disk').Value:='c:\SP_sch.dat';
ExecSQL;
Clear;
Add('use SP_school');
ExecSQL;
end;
第一个程序还原数据库的语句:
with ADOQbak,SQL do
begin
close;
clear;
Add('use master alter database SP_school set offline WITH ROLLBACK IMMEDIATE');
Add('restore database SP_school from disk=:disk with REPLACE');
Add('alter database SP_school set online with rollback immediate');
parameters.ParamByName('disk').Value :='c:\SP_sch.dat';
execsql;
end;
第一个程序运行正常.我的第二个程序也采用上面的语句,只是数据库名改了,'SP_school'改为'sorrow_pig',备份路径也改成'D:\sorrow_pig.dat',
备份正常,但是恢复老是出错:project sorrow_pig.exe raised exception class EDatabaseErrow with message'ADOQbak:Parameter 'disk' not found '
请大侠们指点.叩谢!!!
show一下sql.text看看
请高手指教
修改为:Add( 'restore database SP_school from disk=' + QuotedStr( 'c:\SP_sch.dat ') + ' with REPLACE '); 看看行不行。
//Add( 'restore database SP_school from disk=:disk with REPLACE '); 不要用参数的方法。
修改为: Add( 'restore database SP_school from disk= ' + QuotedStr( 'c:\SP_sch.dat ') + ' with REPLACE '); 看看行不行。
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
嘿嘿,还是不行啊
应该不会是Parameter 'disk ' not found 这个错误。是不是SQL语句错误?
现在是什么错?
应该不会是Parameter 'disk ' not found 这个错误。是不是SQL语句错误?
///////////////////////////////////////////////////////////////////
还是这个提示
然后焦点跳到这一行:parameters.ParamByName( 'disk ').Value := 'c:\SP_sch.dat ';
Add( 'restore database SP_school from disk=:disk with REPLACE '); //这句有问题吧
////////////////////////////
但是我的第一个程序却能正常运行,应该是SQL里面'disk'的冲突问题
小弟能力有限,请帮忙
有了这一句后,就不需要用
parameters.ParamByName( 'disk ').Value := 'c:\SP_sch.dat '; 这一行了。
ADO带参数经常有奇怪的问题,如果手工拼字符串就没有问题了。
有了这一句后,就不需要用
parameters.ParamByName( 'disk ').Value := 'c:\SP_sch.dat '; 这一行了。
ADO带参数经常有奇怪的问题,如果手工拼字符串就没有问题了。
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
这句我有试过去掉,错误提示:
parameter object is improperly defined
//默认是true, 会将'c:\SP_sch.dat'中的冒号解析为参数