Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IBTransaction, Добавляет, но не удаляет... 
:(
    Опции темы
rOOxus
Дата 10.2.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 95
Регистрация: 28.8.2006

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



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

P.S.: Использую свойства всех компонентов по-умолчанию.
PM MAIL   Вверх
ksili
Дата 11.2.2008, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

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



Так он их не удаляет наверно потому что их ещё там нету (вы же их ещё не прокоммитили!)
Попробуйте выполнить всё это в одном скрипте в IBExpert'e, вот увидите, что на эти delet'ы он вернёт ошибку


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
rOOxus
Дата 11.2.2008, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 95
Регистрация: 28.8.2006

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



Я первым делом попробовал выполнить эти же действия в сетке редактирования данных таблицы IBExpertа: добавил пять записей, потом три удалил и закоммитил... все корректно осталось две, а в моей программе остаються все пять  smile.
У меня такое чуство, что я где-то аццки протупил, но где не могу понять... это же должго быть поще пареной репы  smile 

Это сообщение отредактировал(а) rOOxus - 11.2.2008, 09:01
PM MAIL   Вверх
ksili
Дата 12.2.2008, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

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



Ну просто IBExpert несколько умнее, чем кажется. Когда там вручную запись добавляешь, это не выполняется запрос, а просто в гриде добавляется строка. Запрос выполняется только когда нажимаете коммит, он видит две стоки в гриде, вот их и коммитит.

Повторяю: нельзя удалить то, чего ещё нет


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
jsa
Дата 13.2.2008, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

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



rOOxus, ес-но будет так, все данные будут в буфере базы, а реальные изменения будут после переконекта, если хочешь сразу, делай так:
IBTransaction.StartTransaction;
...... // insert or update
IBTransaction.Commit;



--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
rOOxus
Дата 13.2.2008, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 95
Регистрация: 28.8.2006

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



Господа, я прошу прощения, но мне кажеться вы не о том толкуем...
Вчера под впечатлением от таких событий пошел к товарищу и вместе мы произвели такой вот тест:
  • Создаеться база данных (ну например 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

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

ID TXT
3 NULL
4 NULL

Не поленитесь проделайте это эксперемент у себя. Интересно что получиться?





PM MAIL   Вверх
Deniz
Дата 13.2.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



rOOxus, а если сделать такой же тест у тебя? Именно с созданием новой БД и нового клиента?
Еще укажи полные версии Delphi, IBX, FireBird/InterBase.
PS: Можешь прилепить сюда свои исходники.


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


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 95
Регистрация: 28.8.2006

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



Сервер - FB 1.5.3.4870-0
IDE - C++ Builder 6
IBX - 2007.07.20
Создал новую базу в ней табличку... написал элементарное клиентское приложение... вроде все работает нормально.  Добавляю, удаляю, коммичу... все корректно.
Короче дело явно в старой БАЗЕ.  Что же с ней то не так было?
Старую базу рисовал в Дизайнере БД, потом экспортировал в скрипт и запускал его... Может в скрипте что-то не так... (он кстати прилагаеться)


Это сообщение отредактировал(а) rOOxus - 13.2.2008, 14:55

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  BASE.sql 45,19 Kb
PM MAIL   Вверх
Deniz
Дата 13.2.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ты прикалываешься, там список таблиц кошмарный (слишком много), или у тебя со всеми так?
Проверь права на удаление.
Возможно в программе есть события на удаление.


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


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 95
Регистрация: 28.8.2006

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



В программе нет никаких событий вообще... Заметил что глюк возникает именно с теми записями, где есть пустные поля
PM MAIL   Вверх
ksili
Дата 14.2.2008, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

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



Цитата(rOOxus @  13.2.2008,  18:54 Найти цитируемый пост)
Короче дело явно в старой БАЗЕ.  Что же с ней то не так было?

Может в ней был триггер, который при добавлении записи создавал в другой таблице записи, связанные внешним ключом с этими записями. Поэтому их было просто так уже не удалить 


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
rOOxus
Дата 14.2.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 95
Регистрация: 28.8.2006

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



Вот собсно пример того как глючит. Если с помощью DBGrid добавить несколько записей с пустым полем TXT, потом удалить и нажать кнопочку, которая коммитит транзакцию, то удаленные записи не исчезнут.

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Transaction_Delphi_4_forum.rar 35,69 Kb
PM MAIL   Вверх
Deniz
Дата 15.2.2008, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(rOOxus @  13.2.2008,  17:54 Найти цитируемый пост)
Сервер - FB 1.5.3.4870-0
не открывается твоя база(у меня fb 1.5.3), в какой версии делал?


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


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 95
Регистрация: 28.8.2006

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



Ну и у меня firebird 1.5.3... делел IBExpert'ом 2007.07.20...
PM MAIL   Вверх
Akella
Дата 15.2.2008, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Цитата(ksili @  12.2.2008,  12:44 Найти цитируемый пост)
Когда там вручную запись добавляешь, это не выполняется запрос, 

выполняет
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

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

1. Версию InterBase (Firebird, Yaffil)

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

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

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

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


 




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


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

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