更新数据库中的记录

时间:2014-02-05 04:49:29

标签: sql delphi ms-access delphi-xe2

  • 使用TADOCommand更新记录。
  • 使用TADOCommand插入新记录。
  • 表格名称为Board
  • 使用MS Access数据库

我收到错误

  

UPDATE / INSERT INTO语句中的语法错误

我可以很好地连接和检索数据。以前从未添加或更新过数据。

我的数据库列如下所示

ID (auto number)   
SN (text)  
CardType (text)  
Desc (memo)  
dbDate (date)  
Tech (text)

代码如下所示:

procedure TForm2.BSaveClick(Sender: TObject);
const
   sqlStringNew = 'INSERT INTO Board (SN,CardType,Desc,dbDate,Tech) VALUES (:aSN,:aCardType,:aDesc,:aDate,:aTech);';
   sqlStringUpdate = 'UPDATE Board SET SN=:aSN, CardType=:aCardType, Desc=:aDesc, dbDate=:aDate, Tech=:aTech WHERE ID = :aID;';
var
  ADOCommand : TAdoCommand;
begin
  ADOCommand := TADOCommand.Create(nil);

   // updating a board
   if NewBoard = false then
   begin
      try
        ADOCommand.Connection := adoConnection1;
        ADOCommand.Parameters.Clear;
        ADOCommand.Commandtext := sqlStringUpdate;
        ADOCommand.ParamCheck := false;
        ADOCommand.Parameters.ParamByName('aSN').Value := ESerialNumber.Text;
        ADOCommand.Parameters.ParamByName('aCardType').Value := ECardType.Text;
        ADOCommand.Parameters.ParamByName('aDesc').Value := MDescription.Text;
        ADOCommand.Parameters.ParamByName('aDate').Value := strtodate(EDate.Text);
        ADOCommand.Parameters.ParamByName('aTech').Value := ETech.Text;
        ADOCommand.Parameters.ParamByName('aID').Value := UpdateID;
        ADOCommand.Execute;
      finally
        ADOCommand.Free;
      end;
      Showmessage('Update Complete');
   end;

  //if a new board
  if NewBoard = True then
    Begin
      try
        ADOCommand.Connection := adoConnection1;
        ADOCommand.Parameters.Clear;
        ADOCommand.Commandtext := sqlStringNew;
        ADOCommand.ParamCheck := false;
        ADOCommand.Parameters.ParamByName('aSN').Value := ESerialNumber.Text;
        ADOCommand.Parameters.ParamByName('aCardType').Value := ECardType.Text;
        ADOCommand.Parameters.ParamByName('aDesc').Value := MDescription.Text;
        ADOCommand.Parameters.ParamByName('aDate').Value := strtodate(EDate.Text);
        ADOCommand.Parameters.ParamByName('aTech').Value := ETech.Text;
        ADOCommand.Execute;
      finally
        ADOCommand.Free;

      end;
      NewBoard := false;
      BSave.Enabled := false;
      NoEdit;
      Showmessage('New Record Added');
    End;
end;

1 个答案:

答案 0 :(得分:3)

建议不要对表和字段名使用SQL关键字。 DATE是许多SQL方言中的函数。如果选择对表/字段名使用保留字/函数名,则必须在SQL语句中对其进行转义:对于SQL Server和MS Access [Date],对于Oracle,"Date"