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 に答える