Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Lazarus и FireBird


Автор: ilya198293 19.7.2013, 13:31
Пишу приложение с использованием lazarus и firebird.

Глюк наблюдается на клиентской машине. На самом сервере firebird глюка нет.

При создании главной формы пишу:
Код

FBCon.Connected:=true;


В процессе работы программы открываю/закрываю окна.
В них использую:
Код

F_GlForm.SQLTrans.Active:=true;

INSERT/UPDATE/DELETE

F_GlForm.SQLTrans.Active:=false;


На главной форме при закрытии пишу
Код

procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  FBCon.Connected:=false;
  CloseAction:=caFree;
end;  


И выходит стандартное windowое сообщение о не правильной работе приложения.
Не понятно почему такое происходит.
Прошу подсказать.
Заранее благодарен.

Автор: Alexeis 19.7.2013, 15:30
  Если убрать строчку FBCon.Connected:=false; перестает падать?

Автор: ilya198293 19.7.2013, 17:42
Я её недавно добавил в надежде, что перестанет падать.

Автор: Alexeis 19.7.2013, 21:34
  Попробуй поставить в деструкторах объектов формы бряки (в том числе и деструкторе формы). Бывают такие траблы из-за попытки повторного уничтожения объекта. Т.е. объект уже был удален автоматически встроенным механизом + где-то еще руками уничтожается или наоборот, удален руками, но владелец объекта не был уведомлен об этом событии и удаляет сам повторно. 

Автор: ilya198293 20.7.2013, 02:56
Цитата(Alexeis @  19.7.2013,  21:34 Найти цитируемый пост)
 Попробуй поставить в деструкторах объектов формы бряки (в том числе и деструкторе формы)


Ничего не понял.

Автор: ilya198293 20.7.2013, 05:28
Только что провёл эксперимент.
Тот клиентский компьютер на котором проводились первичные эксперименты и там где наблюдается глюк настроен местным админом и там ограничены права. Глюк возникает даже если просто запустить программу и тут же выйти.
По сути выполняется только:

Код

FBCon.Connected:=true;


и

Код

procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  FBCon.Connected:=false; {эту строку пробовал убирать ничего не помогает}
  CloseAction:=caFree;
end;


На домашнем компе с правами админа, такая ситуация не возникает.
Где-то проблема в администрировании клиентского компа.

Автор: Akella 20.7.2013, 10:29
Цитата(ilya198293 @  19.7.2013,  13:31 Найти цитируемый пост)
F_GlForm.SQLTrans.Active:=true;
INSERT/UPDATE/DELETE
F_GlForm.SQLTrans.Active:=false;


а где commit?

Добавлено через 2 минуты и 10 секунд
Цитата(ilya198293 @  20.7.2013,  05:28 Найти цитируемый пост)
Только что провёл эксперимент.
Тот клиентский компьютер на котором проводились первичные эксперименты и там где наблюдается глюк настроен местным админом и там ограничены права. Глюк возникает даже если просто запустить программу и тут же выйти.

значит FB тут не причём
смотри, куда твоя программа лезет, в какую папку или реестр
куда  пишет?
особенно критично, если ты пишешь в папки типа c:\program files\, c:\, c:\windows\

Добавлено через 2 минуты и 35 секунд
сделай тестовый пустой проект, будет ли проблема?

Автор: ilya198293 20.7.2013, 12:19
commit подразумевается под выполнением INSERT/UPDATE/DELETE.
все необходимые данные вставляются, обновляются и удаляются. всё работает.
при запуске программы выполняется процедура:

Код

procedure TF_GlForm.FormCreate(Sender: TObject);
begin
  DecimalSeparator := '.';
  PathINI := ExtractFilePath(ParamStr(0)) + 'settings.ini';
  IniF := TIniFile.Create(PathINI);
  FBCon.HostName := IniF.ReadString('DATABASE', 'Host', '');
  DBPath := IniF.ReadString('DATABASE', 'DataBasePath', '');
  FBCon.DatabaseName := DBPath;
  FBCon.UserName := IniF.ReadString('DATABASE', 'user_name', '');
  FBCon.Password := IniF.ReadString('DATABASE', 'password', '');
  FBCon.Connected := True;
  FormDan := 0;
end;            


при закрытии приложения:

Код

procedure TF_GlForm.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  FBCon.Connected := False;
  CloseAction := caFree;
end;   


Папка с программой, библиотекой подключение к серверу (fbclient.dll) и сетингс-файлом лежит на рабочем столе.

Происходит только чтение данных из файла settings.ini.
Записи никакой нет.
Данные читаются нормально. Если бы не считались, то не запустилась бы программа.

Автор: Keeper89 21.7.2013, 01:55
ilya198293, 

скорее всего проблема в расположении файла ParamStr(0)) + 'settings.ini'.

И, да, вопросы:
  • где уничтожается IniF?
  • зачем CloseAction:=caFree? Она сама уничтожится, стоит заменить FormClose на FormDestroy.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)