Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление информации в DBGrid, TIBQuery 
V
    Опции темы
Darked
Дата 28.11.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 26.2.2004
Где: Южный Урал

Репутация: нет
Всего: нет



             Доброе время суток.
  Господа программеры, подскажите пожалуйста в чём упущение. Есть TIBDataBase, TIBQuey, TIBTransaction, TDataSource, TDBGrid, где   и планируется отображать результаты работы TIBQuery. База FireBird 2.0. Так вот, пишу такое событие по нажатию кнопки:
Код

procedure TMainF.BitBtn1Click(Sender: TObject);
begin

  qibQuery.Active := False;
  qibQuery.Close;
  qibQuery.SQL.Clear;

  qibQuery.SQL.Add('INSERT INTO persons (pers_id, name, family, PERS_CONT_ID, PERS_TECH_ID) '+
                       'VALUES (1,''name'', ''Family'', 1, 1)');

  qibQuery.ExecSQL;

  qibQuery.Active := True;
end;


   И в момент "qibQuery.Active := True;" программа падает с ошибкой: 
Цитата

Exception class EIBInterBaseError with message 'violation of PRIMARY or UNIQUE KEY constraint "INTEG_10" on table "PERSONS"

   
   Таблица, куда производится запись пустая. В чём ошибка?


--------------------
Veni, Vidi, Vici !!!
PM MAIL ICQ   Вверх
DimW
Дата 28.11.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 5
Всего: 44



а так: 
Код

procedure TMainF.BitBtn1Click(Sender: TObject);
begin

  qibQuery.Close;
  qibQuery.SQL.Clear;

  qibQuery.SQL.Add('INSERT INTO persons (pers_id, name, family, PERS_CONT_ID, PERS_TECH_ID) '+
                       'VALUES (1,''name'', ''Family'', 1, 1)');

  qibQuery.ExecSQL;

end;


при выполнении qibQuery.Active := True; ты вставляешь позицию повторно, зачем? достаточно qibQuery.ExecSQL;

Цитата(Darked @  28.11.2007,  16:47 Найти цитируемый пост)
где   и планируется отображать результаты работы TIBQuery

о каком отображении идет речь? для начала хотя бы select * from persons нужно в qibQuery.SQL заталкать.

PM MAIL ICQ   Вверх
Darked
Дата 28.11.2007, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 26.2.2004
Где: Южный Урал

Репутация: нет
Всего: нет



DimW,  дело в том, что как только проходит qibQuery.ExecSQL, то в DBGrid сразу информация исчезает, DBGrid переходит к своему первоначальному виду, пропадают все столбцы и строки, как будто я его только поместил на форму и ни к чему не подсоединял.
  Вот и не начал с TIBQuery эксперементировать.

Цитата(DimW @  28.11.2007,  17:51 Найти цитируемый пост)
о каком отображении идет речь? для начала хотя бы select * from persons нужно в qibQuery.SQL заталкать.

   Ну, в будущем ))



--------------------
Veni, Vidi, Vici !!!
PM MAIL ICQ   Вверх
pavelv
Дата 29.11.2007, 05:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Ругается на первичный ключ, или дублирование записи или может значение какое-то null пытаешься запихнуть где ему таковым быть нельзя(хотя вроде другая ошибка должна быть). А так подытожив слова DimW:
Код

procedure TMainF.BitBtn1Click(Sender: TObject);
begin

  qibQuery.Close;
  qibQuery.SQL.Clear;

  qibQuery.SQL.Add('INSERT INTO persons (pers_id, name, family, PERS_CONT_ID, PERS_TECH_ID) '+
                       'VALUES (1,''name'', ''Family'', 1, 1)');

  qibQuery.ExecSQL;

  qibQuery.Close;
  qibQuery.SQL.Clear;

  qibQuery.SQL.Add('select * from persons');

  qibQuery.ExecSQL;

end


Вообще совет, если ты работаешь с одной таблицей и намерен постоянно добавлять, удалять и редактировать записи в ней используй компонент TibTable, я так понял у тебя InterBase. Компонент простой и удобный, и всякой фигни с дополнительными запросами чудить не нужно. 

PM MAIL   Вверх
Darked
Дата 29.11.2007, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 26.2.2004
Где: Южный Урал

Репутация: нет
Всего: нет



   Да, зачем мне лишний компонент тянуть (это я про TIBTable), хочу разобраться именно с TIBQuery. Должно же как - то это работать. Собственно вопрос как обновить данные в TDBGrid. Потому что, так то всё работает, записи в базу добавляются, но проблема в отображении на экране изменений.


--------------------
Veni, Vidi, Vici !!!
PM MAIL ICQ   Вверх
DimW
Дата 29.11.2007, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 5
Всего: 44



pavelv, в последней строке кода не qibQuery.ExecSQL;, а qibQuery.Active := True;

Darked, ты понимаешь разницу между добавлением данных в БД и их считыванием?!
Цитата(Darked @  28.11.2007,  21:07 Найти цитируемый пост)
Ну, в будущем ))

ну так вот когда все таки решишься на этот шаг тогда и получишь данные в гриде.
pavelv, теде написал код который делает то что ты хочешь, с учетом моих замечаний.


Цитата(Darked @  29.11.2007,  07:45 Найти цитируемый пост)
Да, зачем мне лишний компонент тянуть 

это спорный вопрос, скорее он не лишний, а вспомогательный.
PM MAIL ICQ   Вверх
Darked
Дата 29.11.2007, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 26.2.2004
Где: Южный Урал

Репутация: нет
Всего: нет



Цитата(DimW @  29.11.2007,  08:40 Найти цитируемый пост)
Darked, ты понимаешь разницу между добавлением данных в БД и их считыванием?!

   Согласен, некорректно выражал мысли. Разницу понимаю )) Если делать выборку, то всё работает и обновляется не вопрос, меня интересует вопрос - когда я вставляю в таблицу данные, как мне отобразить эти изменения в таблице? То есть добавил записьи чтобы эти изменения отобразились в DBGrid, поэтому и начал эксперементировать со свойством Active. Догадываюсь что возможно я как - то неправильно транзакцию делаю.... или не делаю её вообще ;(
   
  Завершение транзакции я делаю лишь только так TIBTransaction.CommitRetaining; Может тут что не так?


--------------------
Veni, Vidi, Vici !!!
PM MAIL ICQ   Вверх
Deniz
Дата 29.11.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Цитата(pavelv @  29.11.2007,  08:47 Найти цитируемый пост)
используй компонент TibTable
 НИКОГДА НИКОМУ не использовать.
Использовать только TIBDataSet

Цитата(DimW @  29.11.2007,  11:40 Найти цитируемый пост)
не qibQuery.ExecSQL;, а qibQuery.Active := True;
если мне не изменяет память, то когда в запросе написано select ... from ..., то IBX по барабану что вызывать Open, ExecSQL или Active:=True результат один.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
pavelv
Дата 29.11.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Darked я так понимаю мы тебе что-то другое говорим, поясни фразу:-"меня интересует вопрос - когда я вставляю в таблицу данные, как мне отобразить эти изменения в таблице?". Ты новый данные хочешь как-то выделить на фоне остальных чтоли?

P.S> Deniz что ты так на TibTable наезжаешь? Если не трудно поясни, а то уж сколько его использую и никогда проблем не замечал.
PM MAIL   Вверх
Darked
Дата 29.11.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 26.2.2004
Где: Южный Урал

Репутация: нет
Всего: нет



Цитата(pavelv @  29.11.2007,  12:36 Найти цитируемый пост)
P.S> Deniz что ты так на TibTable наезжаешь? Если не трудно поясни, а то уж сколько его использую и никогда проблем не замечал. 

    Есть такое мнение что настоящие программисты не используют T*Table, всё вручную через SQL, то есть применение их есть дурной тон.


Цитата(pavelv @  29.11.2007,  12:36 Найти цитируемый пост)
Ты новый данные хочешь как-то выделить на фоне остальных чтоли?

     Да нет, в таблице есть данные, эта таблица отображается в DBGrid. Я добавляю строку и хочу чтобы DBGrid сделал REFRESH, то есть обновил отображаемые данные и показал таблицу с учётом добавленной записи.


--------------------
Veni, Vidi, Vici !!!
PM MAIL ICQ   Вверх
Darked
Дата 29.11.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 26.2.2004
Где: Южный Урал

Репутация: нет
Всего: нет



    Всем большое спасибо!!!!! Код, который pavelv работает, я не обратил внимание на добавку qibQuery.SQL.Add('select * from persons');
    Теперь всё работает.


--------------------
Veni, Vidi, Vici !!!
PM MAIL ICQ   Вверх
Deniz
Дата 29.11.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Цитата(pavelv @  29.11.2007,  15:36 Найти цитируемый пост)
Deniz что ты так на TibTable наезжаешь? Если не трудно поясни, а то уж сколько его использую и никогда проблем не замечал. 

Цитата(Darked @  29.11.2007,  15:52 Найти цитируемый пост)
  Есть такое мнение что настоящие программисты не используют T*Table, всё вручную через SQL, то есть применение их есть дурной тон.


Читайте www.ibase.ru
Например вот здесь
Если имя Димы Кузьменко Вам о чем-то говорит, стоит прислушаться.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Darked
Дата 30.11.2007, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 26.2.2004
Где: Южный Урал

Репутация: нет
Всего: нет



    Тема закрыта )


--------------------
Veni, Vidi, Vici !!!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.