【问题标题】:SQL Update (Delphi)SQL 更新(德尔福)
【发布时间】:2013-10-17 08:48:15
【问题描述】:

我想知道你是否可以帮助我解决一个我似乎无法解决的非常简单的问题。

基本上,我在 Delphi 7 中创建了一个投票系统。在用户选中复选框以投票“是”后,我需要通过将“是投票”字段增加 1 来更新我的表格“规则”。

这就是问题所在,出于某种原因,表格总是增加了 2 而不是 1 的值!

请尽一切可能提供帮助,我对此很陌生,所以请耐心等待。

这是我的代码: (注意:“bYes”是一个带有复选框值的布尔值。 “RuleID”是链接到要投票的特定规则的字段名)

if bYes = True then
begin
  qry1.Active := False;
  qry1.SQL.Text := 'UPDATE rules SET [Yes votes] = [yes votes] + 1 WHERE ruleid = "1"';
  qry1.ExecSQL;
  qry1.Active := True;
end
else
  qry1.close;
qry1.SQL.Text := 'UPDATE rules SET [no votes] = [no votes] + 1 WHERE ruleid = "1"';
qry1.ExecSQL;
qry1.Open;

【问题讨论】:

  • 除了在 else 分支中缺少 begin .. end 之外,还应该删除 qry1.Openqry1.Active=True,因为这会根据组件导致额外的 SQL 执行,并且取决于组件到错误。您只需要使用 qry1.ExecSQL。
  • @bummi:这就是原因:Problem : the table is always increased by a value of 2 instead of 1!。您的评论,应该是答案。
  • 安全提示:不要忘记使用 SQL 参数 ;)

标签: sql delphi


【解决方案1】:

取决于组件设置qry1.Active := True;qry1.Open; 将第二次执行sql,并且取决于组件将在执行后引发额外的异常。您只需在 begin .. end 块内调用 qry1.ExecSQL;

begin
  if byes then // omitt = True
  begin
    qry1.SQL.Text := 'UPDATE rules SET [Yes votes] = [yes votes] + 1 WHERE ruleid = "1"';
    qry1.ExecSQL;
  end
  else
  begin   
    qry1.SQL.Text := 'UPDATE rules SET [no votes] = [no votes] + 1 WHERE ruleid = "1"';
    qry1.ExecSQL;
  end;
end;

另一种调用方式可能是

begin
  if byes then // omitt = True
    qry1.SQL.Text := 'UPDATE rules SET [Yes votes] = [yes votes] + 1 WHERE ruleid = "1"'
  else
    qry1.SQL.Text := 'UPDATE rules SET [no votes] = [no votes] + 1 WHERE ruleid = "1"';
  qry1.ExecSQL;

end;

【讨论】:

    【解决方案2】:

    缩进您的代码会显示您错过了 else 块的 begin/end

    if bYes = True then
    begin
        qry1.Active := False;
        qry1.SQL.Text := 'UPDATE rules SET [Yes votes] = [yes votes] + 1 WHERE ruleid = "1"';
        qry1.ExecSQL;
        qry1.Active := True;
    end
    else
        qry1.close;
    qry1.SQL.Text := 'UPDATE rules SET [no votes] = [no votes] + 1 WHERE ruleid = "1"';
    qry1.ExecSQL;
    qry1.Open;
    

    此外,您应该确保qry1.Activeqry1.Open 没有额外执行查询。

    【讨论】:

    • 你秒杀我 :)
    • 问题:the table is always increased by a value of 2 instead of 1!。在您的代码中,您会犯与 OP 相同的错误。在更改sql 之前执行qry1.Open; !!
    猜你喜欢
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2011-10-04
    • 2012-12-13
    相关资源
    最近更新 更多