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