ошибка ExecSQL

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
NewUser
новенький
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40

ошибка ExecSQL

Сообщение NewUser »

процедура записи в БД данных из поля Edit2

Код: Выделить всё

procedure TForm1.Button4Click(Sender: TObject);
begin

     SQLQuery2.Params.ParamByName('NAME').Value:=Edit2.Text;

     try

        SQLQuery2.ExecSQL;

        except

           ShowMessage('Ошибка!');
           SQLTransaction1.RollbackRetaining;
           exit;

     end;
     
     SQLTransaction1.CommitRetaining;
     SQLQuery1.Close;
     SQLQuery1.Open;

end;


запрос в SQLQuery2

Код: Выделить всё

  INSERT INTO OTDEL
  (OTDEL_NAME)
  VALUES
  (:NAME)

параметр NAME настроен как string - input
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

А зачем так ? :) Можно ведь просто

Код: Выделить всё

SQLQuery2.SQL.Clear;
SQLQuery2.SQL.Add('INSERT INTO OTDEL (OTDEL_NAME) VALUES ' + #41 + #39 + Edit2.Text + #39 + #41);
SQLQuery2.ExecSQL;

По крайней мере я так делаю :)
На сам вопрос не смогу ответить... Возможно нужно использовать какой-нить аналог ParamDsql (из FBLib'a), или же параметры - это только для ХП...
Кстати, что именно за ошибка ? :)
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

NewUser
учимся оформлять сообщение, лучше читается, охотнее отвечают.
и текст ошибки в студию, на дворе май месяц все экстрасенсы на солнышке греются.

Brainenjii
можно еще сократить =)

Код: Выделить всё

SQLQuery2.SQL.Text := 'INSERT INTO OTDEL (OTDEL_NAME) VALUES ' + #41 + #39 + Edit2.Text + #39 + #41;
SQLQuery2.ExecSQL;


хотя параметизированые мне больше нравятся и понятнее они

Код: Выделить всё

SQLQuery2.SQL.Text := 'INSERT INTO OTDEL (OTDEL_NAME) VALUES :1' ;
SQLQuery2.Params.ParamByName('1').Value:=Edit2.Text;
SQLQuery2.ExecSQL;
NewUser
новенький
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40

Сообщение NewUser »

не помогает, выдает ошибку

Project raised exception class 'EIBDatabase error'

процедура fpc_raiseexception

использую код



Код: Выделить всё

procedure TForm1.Button4Click(Sender: TObject);
begin

     SQLQuery2.SQL.Text := 'INSERT INTO OTDEL (OTDEL_NAME) VALUES :NAME';
     SQLQuery2.Params.ParamByName('NAME').Value:=Edit2.Text;

     SQLQuery2.ExecSQL;

     SQLQuery1.Close;
     SQLQuery1.Open;

end;
haword
постоялец
Сообщения: 301
Зарегистрирован: 02.03.2006 10:34:40

Сообщение haword »

NewUser писал(а):не помогает, выдает ошибку

Project raised exception class 'EIBDatabase error'

процедура fpc_raiseexception

использую код



Код: Выделить всё

procedure TForm1.Button4Click(Sender: TObject);
begin

     SQLQuery2.SQL.Text := 'INSERT INTO OTDEL (OTDEL_NAME) VALUES :NAME';
     SQLQuery2.Params.ParamByName('NAME').Value:=Edit2.Text;

     SQLQuery2.ExecSQL;

     SQLQuery1.Close;
     SQLQuery1.Open;

end;


SQLQuery2.SQL.Text := 'INSERT INTO OTDEL (OTDEL_NAME) VALUES (:NAME)';
SQLQuery2.Params.ParamByName('NAME').Value:=Edit2.Text;

SQLQuery2.ExecSQL;

так отрабатывает?
NewUser
новенький
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40

Сообщение NewUser »

нет, не работает :(

какие необходимо установить свойства у SQLQuery? может что не верно я делаю?
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Давно, таким макаром не работал с БД, но рискну преположить:
SQLQuery2.Params.ParamByName(':NAME').Value:=Edit2.Text;
или так
SQLQuery2.Params.ParamByName('NAME').AsString:=Edit2.Text;

На какой строчке вообще вылетает ошибка?
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

какие необходимо установить свойства у SQLQuery? может что не верно я делаю?


только ДБ и трнзакцию.

ошибки берешь копируешь из окошка лазаруса с капшеном "messages"
если это не предстовляется возможным, то
ошибку можно сохранить в мемо таким способом

Код: Выделить всё

  
  try
     SQLQuery2.SQL.Text := 'INSERT INTO OTDEL (OTDEL_NAME) VALUES (:NAME)';
     SQLQuery2.Params.ParamByName('NAME').Value:=Edit2.Text;

     SQLQuery2.ExecSQL;
  except
    on E: Exception do
      memo1.lines.text := (E.Message + #13#10'with sql:'#13#10 + SQLQuery2.SQL.Text);
  end;
NewUser
новенький
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40

Сообщение NewUser »

всем спасибо. разобрался сам. была ошибка в другом месте в SQL запросе
Ответить