首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查数据库表中的某些值是否已经存在

检查数据库表中的某些值是否已经存在
EN

Stack Overflow用户
提问于 2014-01-30 20:02:13
回答 1查看 1K关注 0票数 0

在我将数据发布到另一个表"LOG“之前,我想检查两个值('shift‘和'date')是否已经存在。“shift”值由网格中显示来自“shift”表(UNITable1)的数据的选择决定,date参数是AdvOfficeStatusBar1.Panels.Text (它显示当前日期)。查询如下:

代码语言:javascript
复制
 procedure TForm1.cxButton4Click(Sender: TObject);
    begin
    UniTransaction1.AddConnection(UniConnection1);
    UNIquery2.Close;
    UNIquery2.SQL.Clear;
    UNIquery2.SQL.Add('INSERT INTO LOG (DATE,SHIFT,TASK,DONE) VALUES (:a1,:a2,:a3,:a4)');
    UNIquery2.Prepare;
    UniTransaction1.StartTransaction;
    try
    UNIQuery1.DisableControls;
    UNIQuery1.First;
    while Uniquery1.EOF = false do begin
    UNIquery2.Params[0].asString := AdvOfficeStatusBar1.Panels[0].Text; //Current Date
    UNIquery2.Params[1].asString := UniTable1.FieldByName('SHIFT').asString;// Which shift
    UNIquery2.Params[2].asString := Uniquery1.FieldByName('TASK').asString;//many tasks
    UNIquery2.Params[3].Value := Uniquery1.FieldByName('DONE').Value;// Checkbox
    Uniquery1.Next; //get 'all' the values from UNIQuery1
    UNIquery2.ExecSQL;
    end;
    UniTransaction1.Commit;
    UNIQuery1.EnableControls;
    finally
    if UNIquery2.Connection.InTransaction then
    UNIquery2.Connection.Rollback;
    end;
    end;

我怎么能把这个合并起来呢?如何重写此事务,以便它检查现有记录?

编辑: UNIQuery1正在迭代我想要插入的其他记录。

EN

回答 1

Stack Overflow用户

发布于 2014-01-31 00:27:04

我不使用您所指的任何组件(我不知道UNIQuery2UNITransaction可能是什么,但您的逻辑完全不正常。(您的格式也是如此,这是非常糟糕的-如果这是您真正的代码工作方式,那么您确实需要学习更好的习惯。)

现在请不要再使用with了。它非常容易出错,使代码难以阅读和理解,并使调试极其困难。

您需要(按此顺序):

  • 连接到数据库
  • 设置查询
  • 准备查询
  • 设置参数
  • 启动您的事务
  • 开始尝试(最后)
  • 开始一次尝试(除了)
  • 执行您的查询
  • 在异常情况下,回滚查询
  • 如果没有例外,请提交您的事务。
  • 最后,关闭查询和连接。

另外,如果您的组件与TDataSet兼容,那么它应该支持您应该使用的TDataSet.IsEmpty (if not UNIQuery2.IsEmpty then),而不是if UNIQuery.Eof = false (后者应该更干净地称为if not UNIQuery.Eof)。

我不能努力重新编写你的代码,因为它到处都是。您有UNIQuery2在一个地方,UNIQuery1在另一个地方(以及使它更加混乱的with语句),而我甚至没有使用(或)您所使用的任何组件来尝试解决它。我希望这些信息能帮你解决问题。如果没有,在清理(重写)的代码中发布一个新的问题,更清楚地了解你遇到的问题,并尝试问一个更清晰的问题,我们可以得到更多的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21466378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档