2014-02-05 6 views
-1
  • Использование 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; 

ответ

3

Желательно не использовать ключевые слова SQL для таблиц и имена полей. DATE - функция во многих диалектах SQL. Если вы решите использовать зарезервированное имя слова/функции для имени таблицы/поля, вам нужно избежать этого в инструкции SQL: [Date] для SQL Server и MS Access, "Date" - для Oracle.

+0

ОК, я изменю DB на dbDate вместо Date и попробую это. –

+0

Еще одна ошибка, но спасибо, что посмотрели. Поскольку я уверен, что это вызовет проблемы в долгосрочной перспективе. –

+0

удалите точки с запятой в конце ваших операторов SQL – Igor

Смежные вопросы