![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не сохранются данные при работе с TIBTable [D6, FireBird]
sanich © (2005-12-20 11:38:00)Здраствуйте.
У меня возникла такая проблема:
Есть БД на FireBird. Я к ней подключаюсь через компоненты: TIbDatabase, TIBTable, TIBTransaction, TDataSource ну и TDBGridEh. При наборе строк в TDBGridEh неокторые данные почему-то просто не записываются: при выходе из программы и новом запуске некоторые данные просто пропадают.
Может кто-нибудь знает в чем проблема. Я раньше работал через BDE и теперь вот такие бяки вылезают.
tech (2006-01-08 02:57:00) [1]Не обижайтесь, по Вашим описаниям действительно непонятно, что происходит. Сбросьте мне исходники и базу, я посмотрю.
sanich (2005-12-22 14:29:00) [2]
> Да ну тебя. Не интересно с тобой. Все только "беды" свои
> описываешь, а конкретно что и как делаешь не говоришь.
Спасибо!!! :)
Sergey13 (2005-12-22 13:08:00) [3]2[13] sanich © (22.12.05 13:04)
Да ну тебя. Не интересно с тобой. Все только "беды" свои описываешь, а конкретно что и как делаешь не говоришь.
sanich (2005-12-22 13:04:00) [4]
> > 2. Нижимаю кнопку, делаю post для DataSource и у меня
> запускается запрос, который выбирает значения из таблицы.
>
> Каких данных? Которые только что запостил? Их там может
> еще и "не быть" если это делается в разных транзакциях и
> пишущая незакомичена.
Вот в том-то и дело, что часть из них записывается, а часть нет (причем не останних, а произвольным образом).
А вообще действительно, надо отказаться от TIBTable и переходить на DataSet.
Sergey13 (2005-12-22 12:10:00) [5]2[10] sanich © (22.12.05 11:42)
> 2. Нижимаю кнопку, делаю post для DataSource и у меня запускается запрос, который выбирает значения из таблицы.
Каких данных? Которые только что запостил? Их там может еще и "не быть" если это делается в разных транзакциях и пишущая незакомичена.
>Проверяю длину выбраных полей (они должны быть стандартными) и если поле ен заполнено, то вывожу сообщение, что такая-то запись не полностью заполнена.
Такие вещи делаются не так. Во первых можно в БД указать, что поле должно быть заполнено. Можно также задать некоторые условия заполненности поля. Наконец есть тригеры, в которых можно не дать записать не то что нужно.
А у тебя идет работа по принципу - сам накакал и сам же об этом сказал самому себе.
Курдль (2005-12-22 11:53:00) [6]
> sanich © (22.12.05 11:42) [10]
Кароче. Рекомендации лучших собаководов гласят следующее.
1. Данные получать через T...DataSet с кэшированными обновлениями.
2. Данные посылать в БД с помощью T...DataBase.Apply([T..DataSet1, T..DataSetN]);
Все. Никаких транзакций и геморроев! Делфя все сама сделает!
sanich (2005-12-22 11:42:00) [7]
> >а потом запускаю проверку на заполнение полей через запрос
> как это реализовано? Что дает проверка? Почему проверку
> на заполнение сделал после заполнения?
Нет пытался и явно управлять транзакциями, но убедился, что не хватает знаний, раньше работал через БДЕ.
> А кроме наблюдений за странным поведением твоей программы,
> что ты еще выяснил? Ошибка то в ней, в программе. А у тебя
> одни наблюдения и никакой конкретики.
1. Заполнил таблицу значениями (где-то 40 записей).
2. Нижимаю кнопку, делаю post для DataSource и у меня запускается запрос, который выбирает значения из таблицы. Проверяю длину выбраных полей (они должны быть стандартными) и если поле ен заполнено, то вывожу сообщение, что такая-то запись не полностью заполнена.
3. Вот и полчается, что смотрю на экран - данные есть, а запрос говорит, что их нету. Выключаю программу и запускаю снова - действительно нету :).
Sergey13 (2005-12-22 11:14:00) [8]2[6] sanich © (22.12.05 11:05)
>Вообще, заметил
А кроме наблюдений за странным поведением твоей программы, что ты еще выяснил? Ошибка то в ней, в программе. А у тебя одни наблюдения и никакой конкретики.
>а потом запускаю проверку на заполнение полей через запрос
как это реализовано? Что дает проверка? Почему проверку на заполнение сделал после заполнения?
Anatoly Podgoretsky (2005-12-22 11:11:00) [9]sanich © (22.12.05 11:05) [6]
У тебя наверно используется кеширование.
Курдль (2005-12-22 11:10:00) [10]
> Я к ней подключаюсь через компоненты: TIbDatabase, TIBTable,
> TIBTransaction, TDataSource
Скажу тебе по секрету, что работать с базой через T...Table - моветон.
Брось ты это, - делай сразу нормально!
sanich (2005-12-22 11:05:00) [11]:) Смешно, ха-ха, а у меня сердце болит
Вообще, заметил, что еще во время работы программы данные в gride есть, а в БД часть этих данных уже нету.
Тоесть, заполняю строки, а потом запускаю проверку на заполнение полей через запрос, и получается, что перед собою данные вижу, часть из них записаны в таблице, а часть нет(причем не записываются как полностью строки так и только отдельные поля). Может как-то можно синхронизировать данные в Gride и таблице БД?
Курдль (2005-12-21 17:33:00) [12]
> Johnmen © (20.12.05 12:09) [1]
>
> Видимо у тебя неявно откатываются транзакции.
> Посему - рули ими сам, явно.
Я понял! Ты - транзакционный маниак! :)
sanich (2005-12-21 16:47:00) [13]Ничего не получается - в отдельных записях просто некоторые поля не записываются и все. Ничего не могу понять... :(
Johnmen (2005-12-20 12:20:00) [14]Во всех компонентах, где это есть, отключить автокоммит/автороллбэк.
У TIBTransaction есть StartTransaction и т.д.
Обязательно почитай хелп по этим методам!
sanich (2005-12-20 12:15:00) [15]Я пытался. Но как отключить автоматическое управление транзакциями?
У меня Delphi6 и такой опции у TIBTransaction нету.
Johnmen (2005-12-20 12:09:00) [16]Видимо у тебя неявно откатываются транзакции.
Посему - рули ими сам, явно. Чтобы потом не было мучительно и непонятно....:)