| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Обновление информации в DBGrid |
| Автор: Darked 28.11.2007, 16:47 | ||||
| Доброе время суток. Господа программеры, подскажите пожалуйста в чём упущение. Есть TIBDataBase, TIBQuey, TIBTransaction, TDataSource, TDBGrid, где и планируется отображать результаты работы TIBQuery. База FireBird 2.0. Так вот, пишу такое событие по нажатию кнопки:
И в момент "qibQuery.Active := True;" программа падает с ошибкой:
Таблица, куда производится запись пустая. В чём ошибка? |
| Автор: DimW 28.11.2007, 17:51 | ||
а так:
при выполнении qibQuery.Active := True; ты вставляешь позицию повторно, зачем? достаточно qibQuery.ExecSQL; о каком отображении идет речь? для начала хотя бы select * from persons нужно в qibQuery.SQL заталкать. |
| Автор: pavelv 29.11.2007, 05:47 | ||
Ругается на первичный ключ, или дублирование записи или может значение какое-то null пытаешься запихнуть где ему таковым быть нельзя(хотя вроде другая ошибка должна быть). А так подытожив слова DimW:
Вообще совет, если ты работаешь с одной таблицей и намерен постоянно добавлять, удалять и редактировать записи в ней используй компонент TibTable, я так понял у тебя InterBase. Компонент простой и удобный, и всякой фигни с дополнительными запросами чудить не нужно. |
| Автор: Darked 29.11.2007, 07:45 |
| Да, зачем мне лишний компонент тянуть (это я про TIBTable), хочу разобраться именно с TIBQuery. Должно же как - то это работать. Собственно вопрос как обновить данные в TDBGrid. Потому что, так то всё работает, записи в базу добавляются, но проблема в отображении на экране изменений. |
| Автор: DimW 29.11.2007, 08:40 |
| pavelv, в последней строке кода не qibQuery.ExecSQL;, а qibQuery.Active := True; Darked, ты понимаешь разницу между добавлением данных в БД и их считыванием?! ну так вот когда все таки решишься на этот шаг тогда и получишь данные в гриде. pavelv, теде написал код который делает то что ты хочешь, с учетом моих замечаний. это спорный вопрос, скорее он не лишний, а вспомогательный. |
| Автор: Darked 29.11.2007, 10:07 | ||
Согласен, некорректно выражал мысли. Разницу понимаю )) Если делать выборку, то всё работает и обновляется не вопрос, меня интересует вопрос - когда я вставляю в таблицу данные, как мне отобразить эти изменения в таблице? То есть добавил записьи чтобы эти изменения отобразились в DBGrid, поэтому и начал эксперементировать со свойством Active. Догадываюсь что возможно я как - то неправильно транзакцию делаю.... или не делаю её вообще ;( Завершение транзакции я делаю лишь только так TIBTransaction.CommitRetaining; Может тут что не так? |
| Автор: Deniz 29.11.2007, 11:55 |
| НИКОГДА НИКОМУ не использовать. Использовать только TIBDataSet если мне не изменяет память, то когда в запросе написано select ... from ..., то IBX по барабану что вызывать Open, ExecSQL или Active:=True результат один. |
| Автор: pavelv 29.11.2007, 12:36 |
| Darked я так понимаю мы тебе что-то другое говорим, поясни фразу:-"меня интересует вопрос - когда я вставляю в таблицу данные, как мне отобразить эти изменения в таблице?". Ты новый данные хочешь как-то выделить на фоне остальных чтоли? P.S> Deniz что ты так на TibTable наезжаешь? Если не трудно поясни, а то уж сколько его использую и никогда проблем не замечал. |
| Автор: Darked 29.11.2007, 12:52 | ||
Есть такое мнение что настоящие программисты не используют T*Table, всё вручную через SQL, то есть применение их есть дурной тон. Да нет, в таблице есть данные, эта таблица отображается в DBGrid. Я добавляю строку и хочу чтобы DBGrid сделал REFRESH, то есть обновил отображаемые данные и показал таблицу с учётом добавленной записи. |
| Автор: Darked 29.11.2007, 14:39 |
| Всем большое спасибо!!!!! Код, который pavelv работает, я не обратил внимание на добавку qibQuery.SQL.Add('select * from persons'); Теперь всё работает. |
| Автор: Deniz 29.11.2007, 16:42 | ||||
Читайте http://www.ibase.ru Например http://www.yandex.ru/yandsearch?text=IBTable&SUBMIT=%CD%E0%E9%F2%E8%21&serverurl=www.ibase.ru&server_name=www.ibase.ru&referrer1=http%3A%2F%2Fwww.ibase.ru&referrer2=www.ibase.ru Если имя Димы Кузьменко Вам о чем-то говорит, стоит прислушаться. |
| Автор: Darked 30.11.2007, 12:35 |
| Тема закрыта ) |