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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2008, 17:03   #1
r00xus
Пользователь
 
Регистрация: 12.02.2008
Сообщений: 12
По умолчанию IBTransaction

На форме клиентского приложения имеються компоненты IBDatabase IBTransaction IBTable DataSource DBGrid.
Для записи изменений в таблицу БД использую метод IBTransaction->Commit() но не все изменения попадают в таблицу!
Если например я добавил несколько записей через IBTable->Insert(), потом несколько из этих же записей удалил IBTable->Delete(), а потом выполнил IBTransaction->Commit(), то удаление не выполняеться так как будто я и не выполнял IBTable->Delete(), а только IBTable->Insert().
В чем тут может быть дело?

P.S.: Использую свойства всех компонентов по-умолчанию.
r00xus вне форума Ответить с цитированием
Старый 12.02.2008, 18:46   #2
Domovoy
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 254
По умолчанию

IBTransaction1.StartTransaction;
////твои действия
IBTransaction1.Commit;// или IBTransaction1.Rollback
и сделай двойной щелчок на компоненте и выбери тип транзакции
Domovoy вне форума Ответить с цитированием
Старый 12.02.2008, 21:33   #3
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

IBTable в топку и используй IBQuery и работай через запросы!!!
dron-s вне форума Ответить с цитированием
Старый 13.02.2008, 10:09   #4
r00xus
Пользователь
 
Регистрация: 12.02.2008
Сообщений: 12
По умолчанию

Вчера под впечатлением от таких событий пошел к товарищу и вместе мы произвели такой вот тест:
  • Создаеться база данных (ну например 001.fdb) с помощью IBExpert.
  • В ней делаеться табличка TAB01 с полями ID INTEGER, TXT VARCHAR(10)
  • Создаеться элементарное клиентское приложение, в котором присутствует связка IBDatabasу->IBTransaction->IBTable->DataSource->DBGrid (ну и еще DBNavigator) у транзакции не устанавливаються никакие свойства! Все по-умолчанию.
  • Выполняються следущие действия: в TAB01 добавляються записи методом Insert:
    ID TXT
    1 NULL
    2 NULL
    3 NULL
    4 NULL
    Потом методом Delete удаляються записи
    ID TXT
    1 NULL
    2 NULL
  • Выполняються методы
    Код:
    IBTransaction.Commit;
    IBTable.Open;
Результат:

На моем Ноуте

ID TXT
1 NULL
2 NULL
3 NULL
4 NULL

А У ТОВАРИЩА :shok :

ID TXT
3 NULL
4 NULL

У меня СУБД FB 1.5 у товарища FB 2.0... Тестили и у меня и у него!
Кто-нибудь может объяснить почему одна и та же прогамма на разных машинах сработала по-разному?
Не поленитесь проделайте это эксперемент у себя. Интересно что получиться?
r00xus вне форума Ответить с цитированием
Старый 13.02.2008, 11:21   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
у транзакции не устанавливаються никакие свойства! Все по-умолчанию
А у IBTable ?
Свойство CachedUpdates в каком состоянии у вашего приятеля и у вас ?
mihali4 вне форума Ответить с цитированием
Старый 13.02.2008, 15:05   #6
r00xus
Пользователь
 
Регистрация: 12.02.2008
Сообщений: 12
По умолчанию

to mihali4 ну обижаешь конечно же false...
Тут видимо дело в самой БД. Я попробовал все повотрить новая база, новая табличка и все ок! Работает корректно. только со старой все плохо. по-прежнему глючит. видимо что-то пошло не так при создании.
Старую я рисовал в Дизайнере БД IBExpert'а а потом экспортировал в скрипт и запускал. Может в скрипте что-то не так... или в парметрах его запуска? Собсно скрипт вот
Вложения
Тип файла: rar BASE.rar (3.8 Кб, 21 просмотров)

Последний раз редактировалось r00xus; 13.02.2008 в 15:08.
r00xus вне форума Ответить с цитированием
Старый 13.02.2008, 21:49   #7
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

что-то с кєшированием....

попробуйте не компонент использовать , а просто писать:
ADOConnection1.BeginTrans;
{Insert Delete......... }
ADOConnection1.CommitTrans;


или переоткрытие DataSource сделать нужно...
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Pitbull вне форума Ответить с цитированием
Старый 14.02.2008, 17:33   #8
r00xus
Пользователь
 
Регистрация: 12.02.2008
Сообщений: 12
По умолчанию

Вот собсно пример того как глючит. Если с помощью DBGrid добавить несколько записей с пустым полем TXT, потом удалить и нажать кнопочку, которая коммитит транзакцию, то удаленные записи не исчезнут.
Вложения
Тип файла: rar Transaction_Delphi_4_forum.rar (35.7 Кб, 19 просмотров)
r00xus вне форума Ответить с цитированием
Ответ


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