Lazarus中查询控件query提交数据出错的问题

在数据库处理过程中,经常有如下情况:
if SQLQuery1.Locate(‘参数名’,‘MonitorName’,[]) then
begin
SQLQuery1.Edit;
SQLQuery1.FieldByName(‘参数值’).AsString :=s1;
end
else
begin
b:=true;
SQLQuery1.Append;
Inc(RecNo);
SQLQuery1.FieldByName(‘序号’).AsInteger:=RecNo;
SQLQuery1.FieldByName(‘参数名’).AsString:=‘MonitorName’;
SQLQuery1.FieldByName(‘参数值’).AsString :=s1;
SQLQuery1.FieldByName(‘类型’).AsString:=‘String’;
SQLQuery1.FieldByName(‘说明’).AsString:=‘监控程序的软件名称’;
end;
SQLQuery1.Post;
SQLQuery1.ApplyUpdates;
SQLTransaction1.Commit;
上面的程序第一次跑没问题,第二次出错,跟踪一下,发现发生在:
SQLQuery1.ApplyUpdates;
经过检查发现,使用TQuery控件编辑记录(在使用edit时)不用进行ApplyUpdates(提示:No update query specified and failed to generate one. (No fields for inclusion in where statement found.)),所以对以上代码进行修改如下:
if SQLQuery1.Locate(‘参数名’,‘MonitorName’,[]) then
begin
SQLQuery1.Edit;
SQLQuery1.FieldByName(‘参数值’).AsString :=s1;
SQLQuery1.Post;
//无法提交这个修改!!!
{致歉一下,本文还是有问题,经测试,Edit的内容无法最终更新到库中,先用Update修改一下,具体的问题没弄清楚
SQLQuery1.Close;
SQLQuery1.SQL.clear;
SQLQuery1.SQL.Add(‘Update TableName Set 参数值 = "’ + s1 + ‘" where 参数名 = “MonitorName”’);
SQLQuery1.ExecSQL;
SQLQuery1.SQL.clear;
SQLQuery1.SQL.Add(‘Select * From TableName’);
SQLQuery1.Open;
}
end
else
begin
b:=true;
SQLQuery1.Append;
Inc(RecNo);
SQLQuery1.FieldByName(‘序号’).AsInteger:=RecNo;
SQLQuery1.FieldByName(‘参数名’).AsString:=‘MonitorName’;
SQLQuery1.FieldByName(‘参数值’).AsString :=s1;
SQLQuery1.FieldByName(‘类型’).AsString:=‘String’;
SQLQuery1.FieldByName(‘说明’).AsString:=‘监控程序的软件名称’;
SQLQuery1.Post;
SQLQuery1.ApplyUpdates;
end;
SQLTransaction1.Commit;

这样就不会发生报错,具体错误原因就不清楚了…

追加一个记录:
在SQLite3中如果用Sqlite3Dataset控件可以在Append时自动生成序号(字段定义为ftAutoInc),但使用Query控件进行Append操作时,是不会自动生成序号的,须要程序代码实现这个字段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远东999

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值