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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2012, 02:49   #1
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию Убить подключение к базе полностью

ЗДраствуйте,
у меня есть подключение к базе черзе IBDatabase
база на Фаирбёрте 1.5 нужно в ходе выполнения программы удалить даные из базы, удаление проходит нормально но чтобы записи припали из базы нужно перезапускать ехе фаил, я так понимаю ФБ помечает записи на удаления и при отключения из базы удаляются данные, вот вопрос там как создать события при которых ФБ вычистит записи помеченые на удаления?

Код:
IbDatabase1.Connection:=false;
IbTransaction.Action:=false;
...
IbDatabase1.Connection:=true;
IbTransaction.Action:=true;
не помогает...
Dozent вне форума Ответить с цитированием
Старый 29.04.2012, 09:04   #2
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

после как удалил сделай IbTransaction.commit и почитай про это и будет тебе счастье
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 29.04.2012, 09:11   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
удаление проходит нормально но чтобы записи припали из базы нужно перезапускать ехе фаил
Это как? Такого не бывает.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.04.2012, 09:13   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

прежде всего, похоже, что Вы путаете понятия "база данных" и "таблица базы данных". (я по молодости лет тоже долго привыкал, хотя и знал, что это совершенно разные вещи! )

проверьте, так, в виде "метода тыка":
1) commit; не забыли?

2) погуглите про транзакции и их завершение в IB
(то, что у вас остаётся незавершённая транзакция - это, имхо, самая вероятная, имхо, причина!)

3) попробуйте датасет, через который идёт обращение к таблице тоже закрыть и открыть.

4) проверьте, что у Вас датасет подключается именно через IbDatabase1.Connection. (я не знаю, как в случае этих компонент, но в ADO любой датасет может быть подключён через Connection, так и самостоятельно, через ConnectionString)


блииин... пока писал, меня уже опередили!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.04.2012, 18:12   #5
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Это как? Такого не бывает.
ну как как, запрос на делет дал, пото запрос на выборку, записи не пропали, а если делет и закрыть программу и запустить снова то записей не будит. ХОрошо почитаю...

Последний раз редактировалось Dozent; 29.04.2012 в 18:18.
Dozent вне форума Ответить с цитированием
Старый 29.04.2012, 19:21   #6
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Беда в том, что топикстартер, видимо, не предполагает что при работе с СУБД Firebird управление транзакциями должен осуществлять клиент. И только он.
В его описании все верно: перезапуск программы (а на самом деле, выход из программы провоцирует компоненты IBX автоматом закрывать все что подключено) коммитит транзакцию модифицирующего запроса.

Поэтому ТС надо бы, действительно почитать как работать с транзациями.
Например, здесь
Прик вне форума Ответить с цитированием
Старый 01.05.2012, 20:48   #7
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Всем спасибо читать много и некогда, потом прочитаю сделат IBTransaction1.Commit;

Всё работает как надо, спасибо...
Dozent вне форума Ответить с цитированием
Старый 02.05.2012, 11:14   #8
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

ВОт такой ешё вопрос
Добавляю в Тривив новые узлы, ошибка выходит когда в уже добавленый узел пытаюсь добавить дочерний ему, произожит это изза того что выборкой не возможно найти добавленый узел, делаю Commit yо это не помогает, подскажите что нужно сделать?

Код:
 begin
     //
     IBQuery1.Close;
     IBQuery1.SQL.Clear;
     IBQuery1.SQL.Add('Select * from Table1 where abindex='+IntToStr(TV.Selected.AbsoluteIndex)+';');
     IBQuery1.Open;
     id:=IBQuery1.FieldValues['id'];
      IBQuery1.Close;
      IBQuery1.SQL.Clear;
//Ñíà÷àëî íàäî ñäåëòü àïäåéò îò òåêóøåãî àáèíäåêà âûäåëåíîãî ïîòîì âñòàâêà çàïèñè ïî òåêóøåìó àáèíäåêñó
     IBQuery1.SQL.Add('update Table1 set abindex=abindex+1 where abindex>'+IntToStr(TV.Selected.AbsoluteIndex)+';');
     IBQuery1.ExecSQL;
     IBQuery1.Close;
     IBTransaction1.Commit;
     IBQuery1.SQL.Clear;
     IBQuery1.SQL.Add('insert into TABLE1 (P_ID, ABINDEX, STATUS, FNAME, TEXT ) VALUES ('+id+', '+QuotedStr(IntToStr(TV.Selected.AbsoluteIndex))+', 1, '+QuotedStr(Form3.Edit1.Text)+', 123);');
     IBQuery1.ExecSQL;
     IBQuery1.Close;
     IBTransaction1.Commit;
     Bool:=false;
    // par:=TV.Selected;
     TV.Items.AddChildObjectFirst(TV.Selected, Form3.Edit1.Text,0);
     //Par.Item[TV.Selected.Count-1].Selected:=true;
     //Par.Item[TV.Selected.Count-1].StateIndex:=3;
    // par.Selected:=true;
         // IBTransaction1.Rollback;
          IBQuery1.Close;
     IBQuery1.SQL.Clear;
     IBQuery1.SQL.Add('Select * from Table1 where abindex='+IntToStr(TV.Selected.AbsoluteIndex)+';');
     IBQuery1.Open;
//               IBTransaction1.Commit;
     Bool:=true;
     end;
 end;
Dozent вне форума Ответить с цитированием
Старый 02.05.2012, 11:36   #9
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

извеняюсь моя ошибка

Код:
     IBQuery1.SQL.Add('insert into TABLE1 (P_ID, ABINDEX, STATUS, FNAME, TEXT ) VALUES ('+id+', '+QuotedStr(IntToStr(TV.Selected.AbsoluteIndex+1))+', 1, '+QuotedStr(Form3.Edit1.Text)+', 123);');
Dozent вне форума Ответить с цитированием
Старый 02.05.2012, 11:39   #10
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Ошибка глобальная в том, что не нужно привязываться к индексам дерева, которые нестабильны.
Поле "abindex" нужно вообще убрать из таблицы БД.
При формировании дерева свойству каждого узла, которое называется Data, надо присваивать номер строки (здесь значение P_ID). Это если надо будет знать какая строка из таблицы БД относится к конкретному узлу дерева.
При добавлении узла, равно как и при удалении, нужно заново сформировать дерево. Только и всего.

P.S. И нет никакой необходимости применять функцию QuotedStr к числовым значениям.

Последний раз редактировалось Прик; 02.05.2012 в 11:41.
Прик вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключение к базе данных veter48 C# (си шарп) 0 04.04.2011 20:38
Подключение к базе _koshka БД в Delphi 0 21.05.2010 15:00
Автоматическое подключение к базе Shevali БД в Delphi 2 05.05.2010 15:36
Подключение к локальной базе Anatoly_Ali Общие вопросы C/C++ 0 12.12.2009 17:50
подключение к базе ORACLE cowboy БД в Delphi 1 17.09.2009 16:48