Question

  • Using TADOCommand to update a record.
  • using TADOCommand to insert a new record.
  • Name of table is Board
  • Using MS Access database

I get an error

Syntax error in UPDATE/INSERT INTO statement

I can connect and retrieve data just fine. Just never added or updated data before.

My database columns looks like this

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

Code looks like this:

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;
Was it helpful?

Solution

It is advisable not to use SQL keywords for table and field names. DATE is a function in many SQL dialects. If you choose to use a reserved word/function name for a table/field name, you have to escape it in SQL statement: [Date] for SQL Server and MS Access, "Date" - for Oracle.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top