我想用TADOQUERY一次insert多条记录到数据库,有什么办法?100分(100分)

  • 主题发起人 主题发起人 ychy
  • 开始时间 开始时间
Y

ychy

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在只能一条一条地insert,效率太低,我用sql.add(..)不断地增加,到最后再来execsql,
但报错:参数不行,请问大家该怎么办?
while not Eof(f) do
begin
if (Terminated) then
exit;
try
Readln(F,FileItem);
AnalyzeDir(FileItem);
except
exit;
end;
try
with ADOQuery do
begin
close;
sql.Clear ;
sql.Add('insert into allml(bj,bfbj,ip,name,fullname,fenlei,leixin,time)'
+'values (:bj,:bfbj,:ip,:sname,:fullpath,:fenlei,:leixin,:time)');
prepared:=true;
Parameters.ParamByName('bj').Value :=bj;
Parameters.ParamByName('bfbj').Value :=bfbj;
Parameters.ParamByName('ip').Value :=ip;
Parameters.ParamByName('sname').Value :=sname;
Parameters.ParamByName('fullpath').Value :=fullpath;
Parameters.ParamByName('fenlei').Value :=fenlei;
Parameters.ParamByName('time').Value :=time;
ExecSQL ;
 
你的SQL语法是正确的,
如果出现错误的话,可能是参数的类型不相符,
或是有些字段是有某些限制的(如不能为空,或是不能重复的索引),
因此执行时会造成SQL语句执行失败。
建议你从这些方面下手看看。
 
我可不可以这样写呢
sql.Add('insert into allml(bj,bfbj,ip,name,fullname,fenlei,leixin,time)'
+'values (:bj,:bfbj,:ip,:sname,:fullpath,:fenlei,:leixin,:time)');
prepared:=true;
Parameters.ParamByName('bj').Value :=bj;
Parameters.ParamByName('bfbj').Value :=bfbj;
Parameters.ParamByName('ip').Value :=ip;
Parameters.ParamByName('sname').Value :=sname;
Parameters.ParamByName('fullpath').Value :=fullpath;
Parameters.ParamByName('fenlei').Value :=fenlei;
Parameters.ParamByName('time').Value :=time;
sql.Add('insert into allml(bj,bfbj,ip,name,fullname,fenlei,leixin,time)'
+'values (:bj,:bfbj,:ip,:sname,:fullpath,:fenlei,:leixin,:time)');
prepared:=true;
Parameters.ParamByName('bj').Value :=bj;
Parameters.ParamByName('bfbj').Value :=bfbj;
Parameters.ParamByName('ip').Value :=ip;
Parameters.ParamByName('sname').Value :=sname;
Parameters.ParamByName('fullpath').Value :=fullpath;
Parameters.ParamByName('fenlei').Value :=fenlei;
Parameters.ParamByName('time').Value :=time;

ExecSQL ;
 
同意楼上的做法,关键是prepared属性;
但是,我更赞成用BatchMove控件;
最好的办法是在服务器端写存储过程,这样可以减少网络的数据流量,
增加数据正确操作的安全性
 
对于不返回结果集的SQL语句,我建议用TADOCommand对象。
成批处理添加语句,你的方法并不好,
你应该在循环中,先把SQL语句构造出来(不要使用Parameters),注意每条Insert后请加上#13;
最后在循环外,才执行ExecSql.
 
可不可以给我一段代码看一下?
 
后退
顶部