1

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

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

这就是问题所在,由于某种原因,表总是增加 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;
4

2 回答 2

8

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

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;
于 2013-10-17T09:55:06.543 回答
2

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

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.Active并且qry1.Open没有执行额外的查询执行。

于 2013-10-17T08:50:52.290 回答