ошибка ExecSQL

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

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

ошибка ExecSQL

Сообщение NewUser » 14.05.2007 16:34:03

процедура записи в БД данных из поля 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
NewUser
новенький
 
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40

Сообщение Brainenjii » 14.05.2007 20:37:09

А зачем так ? :) Можно ведь просто
Код: Выделить всё
SQLQuery2.SQL.Clear;
SQLQuery2.SQL.Add('INSERT INTO OTDEL (OTDEL_NAME) VALUES ' + #41 + #39 + Edit2.Text + #39 + #41);
SQLQuery2.ExecSQL;

По крайней мере я так делаю :)
На сам вопрос не смогу ответить... Возможно нужно использовать какой-нить аналог ParamDsql (из FBLib'a), или же параметры - это только для ХП...
Кстати, что именно за ошибка ? :)
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Attid » 15.05.2007 01:45:01

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;
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение NewUser » 15.05.2007 09:56:25

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

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;
NewUser
новенький
 
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40

Сообщение haword » 15.05.2007 10:55:52

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;

так отрабатывает?
haword
постоялец
 
Сообщения: 301
Зарегистрирован: 02.03.2006 11:34:40

Сообщение NewUser » 15.05.2007 11:50:22

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

какие необходимо установить свойства у SQLQuery? может что не верно я делаю?
NewUser
новенький
 
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40

Сообщение shade » 15.05.2007 13:11:24

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

На какой строчке вообще вылетает ошибка?
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Attid » 15.05.2007 13:40:33

какие необходимо установить свойства у 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;
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение NewUser » 15.05.2007 13:46:07

всем спасибо. разобрался сам. была ошибка в другом месте в SQL запросе
NewUser
новенький
 
Сообщения: 97
Зарегистрирован: 08.05.2007 13:28:40


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40

Рейтинг@Mail.ru