Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

Процесс не выгружается   Найти похожие ветки 

 
Belkova ©   (2005-06-30 20:14) [0]

Мастера Delphi! Посоветуйте, пожалуйста.  Процесс при закрытии главной формы не выгружается. В диспечере задач смотрю:  в приложениях ничего нет, а в процессах остается. Что делать?


 
Юрий Зотов ©   (2005-06-30 20:19) [1]

Есть ли обработчики, срабатывающие при закрытии формы или приложения? Если да, покажите их код.


 
Belkova ©   (2005-06-30 20:29) [2]

Таких обработчиков нет.


 
Belkova ©   (2005-06-30 20:34) [3]

В файле проекта есть код для того чтобы не запускалась копия программы
var Rez:THandle;
begin
Rez:=CreateFileMapping(HWND($FFFFFFFF),nil,PAGE_READWRITE,0,1024,"PrjAlfa.exe"); //èìÿ ôàéëà
if (GetLastError<>ERROR_ALREADY_EXISTS) then
begin
 Application.Initialize;
 Application.CreateForm(TFSYS, FSYS);
 Application.CreateForm(TFLogin, FLogin);
{Создание форм}
 Application.Run;
 CloseHandle(Rez);
end
А главная форма просто вызывается Close, в событии OnClose ничего не прописано.


 
Юрий Зотов ©   (2005-06-30 21:26) [4]

Попробуйте поставить CloseHandle(Rez) после end:

Rez := CreateFileMapping(...);
if GetLastError <> ERROR_ALREADY_EXISTS then
begin
 ...
end;
CloseHandle(Rez);


 
Belkova ©   (2005-06-30 21:39) [5]

Не выгружается.


 
Юрий Зотов ©   (2005-07-01 03:13) [6]

Чудес не бывает - значит, что-то где-то Вы все же перекрыли.


 
Просто Джо ©   (2005-07-01 03:46) [7]


> [3] Belkova ©   (30.06.05 20:34)

А как называется класс главной формы?


 
Belkova ©   (2005-07-01 08:41) [8]

TForm


 
Belkova ©   (2005-07-01 08:48) [9]

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


 
Digitman ©   (2005-07-01 08:53) [10]


> Belkova


что у тебя вообще в приложении делается-то ?
в угадайку играть будем ?


 
Belkova ©   (2005-07-01 09:07) [11]

Вообще-то приложение работает с БД. Главная форма вызывает форму, которая  производит соединение с БД. (Там заводится пароль и Юзер).


 
Digitman ©   (2005-07-01 09:09) [12]


> Belkova ©   (01.07.05 09:07) [11]


приводи код


 
Belkova ©   (2005-07-01 09:22) [13]

На главной форме есть меню, в котором вызов диалога для пароля, и выход из приложения.
Flogin.Show
и
FDM.DBAlfa.Connected:=False;
fSYS.Close;
В форме Flogin Есть поле для ввода пароля и юзера
и кнопочка Ok, на которую
  ConnectToIniFile;
  fDM.DBAlfa.Params.Values["Password"]:=EdPassword.text;
  fDM.DBAlfa.Params.Values["user_name"]:=EDUserName.Text;
  try
   fDM.DBAlfa.Connected:=True ;
   FLogin.Close;
   FDir.Show
   except
   MessageDlg("Неправильный пароль",mtError,[mbOk],0);
   FDM.DBAlfa.Connected:=False;
  end;

procedure TFLogin.ConnectToIniFile;
var Cfg:TIniFile; S_Temp:String;
begin
if FDM.DBAlfa.Connected then FDM.DBAlfa.Connected:=False;
 Cfg:=TIniFile.Create(ExtractFilePath(ParamStr(0))+"connect.ini");
 S_Temp:=Cfg.ReadString("CONFIG","Server","localhost");
 if S_Temp="localhost" then
 begin
 fDM.DBAlfa.DatabaseName:=Cfg.ReadString("CONFIG","Path","");
 end else
 begin
  fDM.DBAlfa.DatabaseName:=Cfg.ReadString("CONFIG","Server","")+":"+Cfg.ReadString("CONFIG","Path","");
 end;
 Cfg.Free;
end;


 
Digitman ©   (2005-07-01 09:34) [14]

СУБД - InterBase ?

что такое fDM, fDir ? где , как, когда создаются , что в них творится ?


 
Belkova ©   (2005-07-01 09:44) [15]

СУБД - InterBase
FDM модуль данных, где все Query, dataSet и пр.
fdir форма, на которой расположен прайс и вызываются все остальные формы, которые выписывают документы и прочии торговые операции. Создаются все формы в проекте
Application.Initialize;
Application.CreateForm(TFSYS, FSYS);
Application.CreateForm(TFLogin, FLogin);
и т.д.


 
evvcom ©   (2005-07-01 09:47) [16]

Попробуй типа:
try
 WriteLnLog("Подключение...");
 fDM.DBAlfa.Connected:=True ;
 WriteLnLog("Подключился");

Естественно WriteLnLog надо реализовать самой. После закрытия и "невыгруза" посмотреть лог-файл.

Хотя скорее всего в логе будет "Подключился". Вероятно fDM.DBAlfa.Connected := True; запускает отдельный поток и в нем пытается асинхронно подключиться. В этих случаях в грамотно написанных компонентах предусматривают способы извещения основного потока об удаче/неудаче подключения, а также должны быть какие-нибудь свойства таймаута при соединении. Если есть такие события, то "Подключился" или "Не подключился" надо вынести туда.


 
evvcom ©   (2005-07-01 09:49) [17]


> что такое fDM, fDir

Плюс к этому что такое DBAlfa?


 
Belkova ©   (2005-07-01 09:54) [18]

DBAlfa Это компонент IBDateBase.


 
evvcom ©   (2005-07-01 10:15) [19]

В TIBDateBase есть обработчик AfterConnect. В нем и пишем WriteLnLog("Подключился"); тестируем и смотрим лог. Возможно на некоторых машинах существуют проблемы с подключением, поэтому и не выгружается сразу. Должно выгружаться по истечении какого-то более длительного времени.


 
Belkova ©   (2005-07-01 10:20) [20]

По истечении приемлемого времени не выгружается. Понаблюдаю еще.
Обработчик напишу, посмотрю. Спасибо.


 
Tor ©   (2005-07-01 10:31) [21]

Проверку пароля лучше производить в файле главной формы а не на кнопке ОК в форме вода пароля. Показыватьее как модальную возвращать mrOK и все это в цикле(в место рекурсии) там можно выводить сообщение о повторной попытке. Могу кинуть пример.
А при закрытии приложения ты закрываешь соединение с базой и всеми таблицами?


 
Belkova ©   (2005-07-01 10:56) [22]

Спасибо. Я поняла, но от примера не откажусь
belkova@alfacom.perm.ru
При закрытии делаю DBAlfa.Connected:=false;
Полагаю, что таблицы при этом тоже закроются.


 
Tor ©   (2005-07-01 11:03) [23]

Незнаю, я лично сначала закрываю все таблицы а потом БД. Щас найду и вышлю.


 
evvcom ©   (2005-07-01 13:07) [24]


> При закрытии делаю DBAlfa.Connected:=false;

> Незнаю, я лично сначала закрываю все таблицы а потом БД

destructor TDataSet.Destroy;
begin
 Destroying;
 Close;
 ...

destructor TCustomConnection.Destroy;
begin
 inherited Destroy;
 SetConnected(False);
 ...


Вывод: проблема не в этом.


 
Faraday   (2005-07-01 13:46) [25]

Попробуй после IBDataBase.Close поставить Sleep(1000).
Если не поможет - вставь в событие FormCloseQuery:
procedure TfmMainForma.FormCloseQuery(Sender: TObject;
 var CanClose: Boolean);
var n:Integer;
begin
n:=MessageBox(Application.Handle,Pchar("Закончить работу с прогой ?"),PChar("Подтверждение"),MB_YESNO + MB_ICONQUESTION);
if n=IDYES then
begin
Fl_Close:=true;
CanClose:=True;
end
else
CanClose:=false;
end;

Как ни странно, но мне помогало.


 
Faraday   (2005-07-01 13:48) [26]

Fl_Close:=true; - это я из своей проги скопировал - надо удалить.


 
evvcom ©   (2005-07-01 13:52) [27]


> Faraday   (01.07.05 13:46) [25]

Шаман, да и только. Чудеса какие-то рассказываешь.

Тогда уж по тексту, элегантнее писать:
CanClose := n = IDYES;
вместо всего этого наворота с проверкой булевой переменной и присвоения констант другой.


 
Belkova ©   (2005-07-01 13:54) [28]

Спасибо, попробую.


 
Belkova ©   (2005-07-01 14:07) [29]

К сожалению не помогло.


 
Stakan ©   (2005-07-01 14:09) [30]

Belkova ©   (01.07.05 13:54)
Попробуй как вариант принудительно разрывать соединение с базой в файле .dpr (перед CloseHandle)


 
evvcom ©   (2005-07-01 14:15) [31]


> Belkova ©   (01.07.05 14:07) [29]

Ну а [19] пробовала? Что в логе? У тебя скорее всего проблема с коннектом, поэтому и [30] не поможет.


 
Belkova ©   (2005-07-01 14:23) [32]

Пишет подключился.


 
Belkova ©   (2005-07-01 14:27) [33]

Перед перед CloseHandle разрывать соединение попробовала, не помогло.


 
КиТаЯц ©   (2005-07-01 14:47) [34]

Знаю, что ща народ ржать будет, но... вот реальный кусок из моей программы:

procedure TModule.DataModuleDestroy(Sender: TObject);
begin
 null;  // ХЗ зачем это надо, но ошибка при закрытии почему-то пропала
end;


(TModule = class(TDataModule), где, собственно все компоненты IBX и лежат)


 
3DxFantastika ©   (2005-07-02 08:46) [35]

"экстремальный" выход: ExitProcess(0);


The ExitProcess function ends a process and all its threads.

VOID ExitProcess(

   UINT uExitCode  // exit code for all threads  
  );

но не рекомендуется ..



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.043 c
1-1120131813
salexn
2005-06-30 15:43
2005.07.18
Не работает функция SaveKey или что не так делаю?


1-1120061348
LaMaX
2005-06-29 20:09
2005.07.18
Визуальный переход к нужной строке в TRichEdit или TMemo.


8-1111307719
seregka
2005-03-20 11:35
2005.07.18
Преобразование в ч/б


14-1119868771
Priest
2005-06-27 14:39
2005.07.18
Как подключить ноутбук к компу по FireWire


1-1119854437
AlexG
2005-06-27 10:40
2005.07.18
Как создать экземпляр TOleStream?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский