0

这是我的代码:

procedure TForm4.BitBtn1Click(Sender: TObject);    
var      
    spinval, iVotes: integer;    
begin    
    if DBLookupComboBox1.Text = ' ' then    
    begin    
        ShowMessagePos('Please select a candidate.', 1000, 500);    
    end    
    else    
    begin    
        spinval := SpinEdit1.value;    
        ADOQuery1.Active := false;    
        ADOQuery1.SQL.Text := 'Update Candidate_table set votes = ''' +
            inttostr(spinval + Candidatetable.fieldbyname('Votes').AsInteger) + 
            ''' where Name = ''' + DBLookupComboBox1.Text + '''';    
        ADOQuery1.ExecSQL;    
        ADOQuery1.Active := false;    
        ADOQuery1.SQL.Text := 'Select * from Candidate_table';    
        ADOQuery1.Active := true;    
        MessageDlgPos('Thank you for voting. You will be logged out.' , mtInformation, [mbOK], 0, 1000, 500);    
        Form4.Hide;    
        Form2.Show;    
    end    
end;

我的问题是,每次单击此按钮时它都会计数(特定行和列“投票”设置为默认值 0,每次单击按钮时,它必须加上 spinedit 值和列的值“投票”。)

现在使用此代码,它只是替换值。我做错了什么 ?

提前致谢。

4

1 回答 1

3

如果使用参数,这将更清晰、更安全、更快。此外,您可以直接在查询中引用旧列值,而不是从当前查询中获取旧值。

尝试这个:

ADOQuery1.SQL.Text := 
    'Update Candidate_table set votes = votes + :number where Name = :candidate';
ADOQuery1.Parameters.ParamByName('number').Value := spinval;
ADOQuery1.Parameters.ParamByName('candidate').Value := DBLookupComboBox1.Text;
ADOQuery1.ExecSQL;
于 2013-09-05T22:00:36.663 回答