Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2010, 14:11   #11
Domanoff
Форумчанин
 
Регистрация: 05.03.2010
Сообщений: 125
По умолчанию

Цитата:
Сообщение от Dark_Spirit Посмотреть сообщение
а полностью код процедуры которым заполняешь таблицу
Код:
procedure TForm3.Button1Click(Sender: TObject);
begin
   IBQuery1.SQL.Clear;

 IBQuery1.SQL.Text:='INSERT INTO MEROPRIAT(ID_MEROPRIAT,NAME,DAT) VALUES(gen_id(GEN_MEROPRIAT_ID,1),:N, :D)';
 IBQuery1.ParamByName('N').Value:=Edit1.text;
 IBQuery1.ParamByName('D').Value:=DateTimePicker1.Date;

end;

end.
и все таки с этой ашибкой активации IBQuery1 надо разобраться
пожалейте новичка

Последний раз редактировалось Domanoff; 16.04.2010 в 14:22.
Domanoff вне форума Ответить с цитированием
Старый 16.04.2010, 14:38   #12
bezOn
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Domanoff Посмотреть сообщение
согласен,но в актив она все равно не становится с такой же ошибкой...
ТемныйДух правильно говорит.

Свойство "Active" для TQuery используется когда происходит выборка.
И правильно открывать набор программно, когда например создается форма (onCreate)
Например:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  {Открываем уже созданный запрос.}
  IBQuery1.Open;

end;
Так же, в этом событии, можно и любой запрос оформить;

А вот когда идёт вставка (INSERT) или изменение данных (UPDATE), тогда нужно использовать ExecSQL.
Например сохраняем данные по нажитию кнопки:

Код:
procedure TForm1.btnSaveClick(Sender: TObject);
begin
  TRY
    IBQuery2.SQL.Clear;
    IBQuery2.SQL.ADD('INSERT INTO MEROPRIAT');
    IBQuery2.SQL.ADD('(ID_MEROPRIAT, NAME)');
    IBQuery2.SQL.ADD('VALUES');
    IBQuery2.SQL.ADD('(:ID, :Name, :Date)'); {Ошибка, поле Date не заявлено в INSERT}
       IBQuery2.ParamByName('ID').asInteger := GEN_ID(GEN_MEROPRIAT_ID, 1);
       IBQuery2.ParamByName('Name').asString := Edit1.Text;
       IBQuery2.ParamByName('Date').asDateTime := DateTimePicker1.Date;

       IBQuery2.ExecSQL;
  EXCEPT
    Application.MessageBox(
      'Ошибка вставки (создания) новой записи!',
      'Создание отменено', MB_OK+MB_ICONERROR);
  END;

end;
В секции INSERT, у тебя не хватает объявленного поля, который ты используешь в параметрах (Date), это приведет к ошибке.
Вот если бы ты объявил поле, а в значениях (Values) его не указал, оно было бы сохранено пустым.

---
Ещё раз, если открываем запрос, используем IBQuery.Open
Если хотим Вставить/Изменить/Удалить данные, используем IBQuery.ExecSQL;
bezOn вне форума Ответить с цитированием
Старый 16.04.2010, 14:50   #13
Domanoff
Форумчанин
 
Регистрация: 05.03.2010
Сообщений: 125
По умолчанию

INSERT INTO MEROPRIAT(ID_MEROPRIAT,NAME,DAT) VALUES(gen_id(GEN_MEROPRIAT_ID,1),: N, :D) это разве не заявленное?
пожалейте новичка
Domanoff вне форума Ответить с цитированием
Старый 16.04.2010, 14:54   #14
bezOn
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Domanoff Посмотреть сообщение
...это разве не заявленное?
Это заявленное, просто я смотрел первое сообщение.
bezOn вне форума Ответить с цитированием
Старый 16.04.2010, 15:09   #15
Domanoff
Форумчанин
 
Регистрация: 05.03.2010
Сообщений: 125
По умолчанию

Цитата:
Сообщение от bezOn Посмотреть сообщение
Это заявленное, просто я смотрел первое сообщение.
глядите че происходит, генератор(правильно обьявленный а не так как в вашем варианте - делфя не определяет генератор. ) срабатывает и в базе меняется, а вот сами значения name и dat не вставляются(((( + конфликтует с русским языком(но дело не в базе там нормально все)
пожалейте новичка
Domanoff вне форума Ответить с цитированием
Старый 16.04.2010, 15:33   #16
bezOn
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Domanoff Посмотреть сообщение
... генератор(правильно обьявленный а не так как в вашем варианте - делфя не определяет генератор. )
ну я рад что генератор работает.

Цитата:
Сообщение от Domanoff Посмотреть сообщение
...конфликтует с русским языком...
В чем это выражается?

Как создавали базу данных? Как у БД настроена национальную кодировка символов? Тут как бы есть над чем подумать.
Например полю типа "Date", как бэ всё равно каким языком идёт дата. Русским или Анг.

А вот символьные поля "Char" и "VarChar" для них уже необходимо указывать национальную кодировку.
bezOn вне форума Ответить с цитированием
Старый 16.04.2010, 15:36   #17
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

Цитата:
Код:
procedure TForm3.Button1Click(Sender: TObject);
begin
   IBQuery1.SQL.Clear;

 IBQuery1.SQL.Text:='INSERT INTO MEROPRIAT(ID_MEROPRIAT,NAME,DAT) VALUES(gen_id(GEN_MEROPRIAT_ID,1),:N, :D)';
 IBQuery1.ParamByName('N').Value:=Edit1.text;
 IBQuery1.ParamByName('D').Value:=DateTimePicker1.Date;

end;
перед end; нужно дописать строку: IBQuery1.ExecSQL;
Тяжело быть бестолковым.....

Последний раз редактировалось Dark_Spirit; 16.04.2010 в 15:43.
Dark_Spirit вне форума Ответить с цитированием
Старый 16.04.2010, 15:48   #18
bezOn
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Domanoff Посмотреть сообщение
...генератор(правильно обьявленный а не так как в вашем варианте - делфя не определяет генератор. )...
Я давно неработал именно с компонентами InterBase, но насколько я помню, там есть "IBStoredProc", которому как раз можно назначить созданный генератор в БД и потом "правильно" работать c ним в Delphi.

т.е. получать сгенерированный ID до того, когда происходит вставка записи.

Последний раз редактировалось bezOn; 16.04.2010 в 15:52.
bezOn вне форума Ответить с цитированием
Старый 16.04.2010, 15:48   #19
Domanoff
Форумчанин
 
Регистрация: 05.03.2010
Сообщений: 125
По умолчанию

Цитата:
Сообщение от bezOn Посмотреть сообщение
ну я рад что генератор работает.


В чем это выражается?

Как создавали базу данных? Как у БД настроена национальную кодировка символов? Тут как бы есть над чем подумать.
Например полю типа "Date", как бэ всё равно каким языком идёт дата. Русским или Анг.

А вот символьные поля "Char" и "VarChar" для них уже необходимо указывать национальную кодировку.
да нормально там все настроено в IBEXPERTE все работает, да и вообще все работало, расскажите почему щас поля не заполняются?!?(
пожалейте новичка
Domanoff вне форума Ответить с цитированием
Старый 16.04.2010, 15:49   #20
Domanoff
Форумчанин
 
Регистрация: 05.03.2010
Сообщений: 125
По умолчанию

Цитата:
Сообщение от Dark_Spirit Посмотреть сообщение
перед end; нужно дописать строку: IBQuery1.ExecSQL;
в этом варианте при работе выдает ошибку SQL error code - 303
пожалейте новичка

Последний раз редактировалось Domanoff; 16.04.2010 в 15:51.
Domanoff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Directx10 ошибка подключения d3dx10.lib mibin Общие вопросы C/C++ 2 20.01.2010 15:33
Ошибка подключения (Interbase+BDE) Andre1723 Помощь студентам 3 27.05.2009 15:11
Ошибка в драйверах после подключения к TV Saladin Операционные системы общие вопросы 3 21.02.2009 21:28
Ошибка после подключения в инет V.N.Ermak Безопасность, Шифрование 3 27.12.2008 19:29
Ошибка подключения к БД CruiserD БД в Delphi 5 26.10.2007 14:42