Ubuntu Sqlite多次更新

Ubuntu Sqlite多次更新,ubuntu,sqlite,lazarus,Ubuntu,Sqlite,Lazarus,我有一个表,用户可以批量更改列,但只能更改一些“like”记录。例如,一些zipcodes zipcode = 12345 // Need to change this one zipcode = 23456 zipcode = 12345 // Not this one zipcode = 34567 zipcode = 12345 // Need to change this one zipcode = 12345 // Need to change this one zipcode

我有一个表,用户可以批量更改列,但只能更改一些“like”记录。例如,一些zipcodes

zipcode = 12345  // Need to change this one
zipcode = 23456
zipcode = 12345  // Not this one
zipcode = 34567
zipcode = 12345  // Need to change this one
zipcode = 12345  // Need to change this one
zipcode = 12345  // Not not this one
显然,我不能只使用“WHERE zipcode=12345”

目前,我正在创建一个StringList,其中包含需要更改的每条记录的recID(一个AutoInc),然后使用

for i:=0 to slChange.Count-1 do
begin
  tStr:=' UPDATE Names SET Zipcode = '80000' WHERE recID = '+QuotedStr(slChange[i])+';';
  dm.sqlEmails.SQL.Text:=tStr;
  dm.sqlEmails.ExecSQL;
end;
如果有很多记录需要更改,则需要相当长的时间


有更好的方法吗?

可以加快代码速度的一件事是使用参数。只需准备一次查询,这样DBMS就不需要重复分析和计划查询的执行。然后只发送参数值并调用。另一种可以提高性能的方法是使用指定的对象。下面是一段代码,显示了上述两种情况:

dm.sqlEmails.SQL.Text := 'UPDATE Names SET Zipcode = :ZipCode WHERE RecID = :RecID';

dm.sqlEmails.Transaction.StartTransaction;
try
  for i := 0 to slChange.Count-1 do
  begin
    dm.sqlEmails.Params.ParamByName('Zipcode').AsString := '80000';
    dm.sqlEmails.Params.ParamByName('RecID').AsString := slChange[i];
    dm.sqlEmails.ExecSQL;
  end;
  dm.sqlEmails.Transaction.Commit;
except
  dm.sqlEmails.Transaction.Rollback;
  raise;
end;

可以加快代码速度的一件事是使用参数。只需准备一次查询,这样DBMS就不需要重复分析和计划查询的执行。然后只发送参数值并调用。另一种可以提高性能的方法是使用指定的对象。下面是一段代码,显示了上述两种情况:

dm.sqlEmails.SQL.Text := 'UPDATE Names SET Zipcode = :ZipCode WHERE RecID = :RecID';

dm.sqlEmails.Transaction.StartTransaction;
try
  for i := 0 to slChange.Count-1 do
  begin
    dm.sqlEmails.Params.ParamByName('Zipcode').AsString := '80000';
    dm.sqlEmails.Params.ParamByName('RecID').AsString := slChange[i];
    dm.sqlEmails.ExecSQL;
  end;
  dm.sqlEmails.Transaction.Commit;
except
  dm.sqlEmails.Transaction.Rollback;
  raise;
end;

您正在使用交易吗?感谢您的关注,是的,但也不知道如何使用它来完成此操作。:)这是“是”还是“否”?您使用的是交易吗?感谢您的关注,是的,但不知道如何使用它来完成此操作。:)这是“是”还是“不是”?