Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.29;
Скачать: CL | DM;

Вниз

Глюк при запуске откомпиленного проекта   Найти похожие ветки 

 
ZevSS ©   (2007-04-04 22:24) [0]

Глюк какой-то хитрый у меня в программе. Программа: клиент БД на MSSQL Server 2000 + ADO. Компилю проект на своем компе. Запускаю готовый exe"шник на своем компе - все Ok. Переношу этот exe"шник на другой комп и при загрузке вылетает ошибка "Runtime error 216" и, естественно, приложение не запускается.  НО! Если откомпилить проект на этом компе (где экзшник вылетает с ошибкой), то все работает на этом компе нормуль. Что это такое? Использую Delphi 7, компоненты ADO. Кроме стандартных компонентов использую EhLib 3.6 и JEDI Vcl. HELP!


 
Плохиш ©   (2007-04-05 11:29) [1]


> при загрузке вылетает ошибка "Runtime error 216"

Стоит проверить свой код на наличие следующих обработчиков исключений

try
....
except
end;


216 - это ошибка доступа к памяти...


 
ZevSS ©   (2007-04-05 22:00) [2]

А что именно проверять-то? Ну да, естественно, у меня есть такие обработчики исключений. Но ведь прога на некоторых компах запускается, а на некоторых вылетает :( Тем более вся это фигня, имхо, происходит в процессе выполнения Application.Initialization. Если это моя недоработка, то что именно смотреть и как исправлять? Нужно довольно срочно с этим разобраться.


 
Loginov Dmitry ©   (2007-04-05 22:23) [3]

проверь, нет ли каких ДатаСетов с Active=True


 
ZevSS ©   (2007-04-06 00:35) [4]

У меня все работает через ADOStoredProcedure и ADOQuery. Все эти компоненты коннектятся с б\д через один ADOConnection. У всех компонентов Active := False. Все датасеты открываются при запуске программы и закрываются при OnDestroy формы. Проверял неоднократно, т.к. сегодня пол дня пытался определить из-за чего этот глюк. На некоторых компах все Ok, на других - рантайм эррор. :( Может это из-за того, что у меня mainform нет? По идее основная форма у меня frmMain. Вот так у меня выглядит файл проекта. Тогда если смотреть в Projecr->Options, то там mainform отсутствует и в autocreate form есть только датамодуль DMConnect.
Но почему ж тогда на машине, где вылетает ошибка - после перекомпиляции проекта все Ok? Дурдом.

program KadriEND;

uses
 Forms,
 Controls,
 Dialogs,
 UMain in "UMain.pas" {frmMain},
 UDMConnect in "UDMConnect.pas" {DMConnect: TDataModule},
 UAddSotrudnik in "UAddSotrudnik.pas" {frmAddSotrudnik},
 UDMAddSotrudnik in "UDMAddSotrudnik.pas" {DMAddSotrudnik: TDataModule},
 UGlobalVars in "UGlobalVars.pas",
 UDMMain in "UDMMain.pas" {DMMain: TDataModule},
 UDMDelSotrudnik in "UDMDelSotrudnik.pas" {DMDelSotrudnik: TDataModule},
 UEditSotrudnik in "UEditSotrudnik.pas" {frmEditSotrudnik},
 UDMEditSotrudnik in "UDMEditSotrudnik.pas" {DMEditSotrudnik: TDataModule},
 UAbout in "UAbout.pas" {frmAbout},
 UDMEditMestoSlujbi in "UDMEditMestoSlujbi.pas" {DMEditMestoSlujbi: TDataModule},
 UDMEditDembel in "UDMEditDembel.pas" {DMEditDembel: TDataModule},
 UEditDembel in "UEditDembel.pas" {frmDembelSotrudnik},
 UDMEditSpecZvanie in "UDMEditSpecZvanie.pas" {DMEditSpecZvanie: TDataModule},
 UAddSpecZvanie in "UAddSpecZvanie.pas" {frmAddSpecZvanie},
 UPhotoPreview in "UPhotoPreview.pas" {frmPhotoPreview},
 UDMEditSlujUdost in "UDMEditSlujUdost.pas" {DMEditSlujUdost: TDataModule},
 UDMEditTravms in "UDMEditTravms.pas" {DMEditTravms: TDataModule},
 UAddTravm in "UAddTravm.pas" {frmAddTravms},
 UAddMestoSlujbi in "UAddMestoSlujbi.pas" {frmAddMestoSlujbi},
 UDMEditSemPolojenie in "UDMEditSemPolojenie.pas" {DMEditSemPolojenie: TDataModule},
 UAddRodstvennik in "UAddRodstvennik.pas" {frmAddRodstvennik},
 UDMEditVziskanija in "UDMEditVziskanija.pas" {DMEditVziskanija: TDataModule},
 UAddVziskanie in "UAddVziskanie.pas" {frmAddVziskanie},
 UDMEditAtt in "UDMEditAtt.pas" {DMEditAtt: TDataModule},
 UAddAtt in "UAddAtt.pas" {frmAddAtt},
 UDMOtpuska in "UDMOtpuska.pas" {DMOtpuska: TDataModule},
 UAddOtpusk in "UAddOtpusk.pas" {frmAddOtpusk},
 UDMSlujbaChp in "UDMSlujbaChp.pas" {DMSlujbaChp: TDataModule},
 UAddChp in "UAddChp.pas" {frmAddChp},
 UDMTrud in "UDMTrud.pas" {DMTrud: TDataModule},
 UAddTrud in "UAddTrud.pas" {frmAddTrud},
 UAddZagran in "UAddZagran.pas" {frmAddZagran},
 UDMZagran in "UDMZagran.pas" {DMZagran: TDataModule},
 UDMPPiP in "UDMPPiP.pas" {DMPPiP: TDataModule},
 UAddPerepodgotovka in "UAddPerepodgotovka.pas" {frmAddPerepodgotovka},
 UDMGosVlast in "UDMGosVlast.pas" {DMGosVlast: TDataModule},
 UAddGosVlast in "UAddGosVlast.pas" {frmAddGosVlast},
 UDMPovKval in "UDMPovKval.pas" {DMPovKval: TDataModule},
 UAddPovKval in "UAddPovKval.pas" {frmAddPovKval},
 UDMProdlenie in "UDMProdlenie.pas" {DMProdlenie: TDataModule},
 UAddProdlenie in "UAddProdlenie.pas" {frmAddProdlenie},
 UDMObrazovanie in "UDMObrazovanie.pas" {DMObrazovanie: TDataModule},
 UAddObrazUchr in "UAddObrazUchr.pas" {frmAddObrazUchr},
 UAddLang in "UAddLang.pas" {frmAddLang},
 UAddUchStepen in "UAddUchStepen.pas" {frmAddUchStepen},
 UAddUchZvanie in "UAddUchZvanie.pas" {frmAddUchZvanie},
 UAddNagrad in "UAddNagrad.pas" {frmAddNagrad},
 UDMNagrads in "UDMNagrads.pas" {DMNagrads: TDataModule},
 UDMArmy in "UDMArmy.pas" {DMArmy: TDataModule},
 DMKILL in "DMKILL.pas" {DMDeleteRecord: TDataModule},
 UDMPhotoView in "UDMPhotoView.pas" {DMPhotoView: TDataModule},
 USecurity in "USecurity.pas" {frmSecurity};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TDMConnect, DMConnect);
 frmSecurity := TfrmSecurity.Create(Application);
 try
  DMConnect.ADOConnection.Close;
  if not DMConnect.ADOConnection.Connected then
   if frmSecurity.ShowModal = mrCancel
     then Application.Terminate
   else
   begin
    try
      DMConnect.ADOConnection.ConnectionString := Concat("Provider=SQLOLEDB.1;",
      "Persist Security Info=False;User ID=",
      frmSecurity.EditLogin.Text, ";Initial Catalog=",
      frmSecurity.EditBase.Text, ";Data Source=",
      frmSecurity.EditServer.Text);
      DMConnect.ADOConnection.Provider := "SQLOLEDB.1";
      DMConnect.ADOConnection.Open(frmSecurity.EditLogin.Text,
                                   frmSecurity.EditPassword.Text);
      Application.CreateForm(TDMPhotoView, DMPhotoView);
      Application.CreateForm(TDMMain, DMMain);
      Application.CreateForm(TDMAddSotrudnik, DMAddSotrudnik);
      Application.CreateForm(TDMDelSotrudnik, DMDelSotrudnik);
      Application.CreateForm(TDMEditSotrudnik, DMEditSotrudnik);
      Application.CreateForm(TDMEditMestoSlujbi, DMEditMestoSlujbi);
      Application.CreateForm(TDMEditDembel, DMEditDembel);
      Application.CreateForm(TDMEditSpecZvanie, DMEditSpecZvanie);
      Application.CreateForm(TDMEditSlujUdost, DMEditSlujUdost);
      Application.CreateForm(TDMEditTravms, DMEditTravms);
      Application.CreateForm(TDMEditSemPolojenie, DMEditSemPolojenie);
      Application.CreateForm(TDMEditVziskanija, DMEditVziskanija);
      Application.CreateForm(TDMEditAtt, DMEditAtt);
      Application.CreateForm(TDMOtpuska, DMOtpuska);
      Application.CreateForm(TDMSlujbaChp, DMSlujbaChp);
      Application.CreateForm(TDMTrud, DMTrud);
      Application.CreateForm(TDMZagran, DMZagran);
      Application.CreateForm(TDMPPiP, DMPPiP);
      Application.CreateForm(TDMGosVlast, DMGosVlast);
      Application.CreateForm(TDMPovKval, DMPovKval);
      Application.CreateForm(TDMProdlenie, DMProdlenie);
      Application.CreateForm(TDMObrazovanie, DMObrazovanie);
      Application.CreateForm(TDMNagrads, DMNagrads);
      Application.CreateForm(TDMArmy, DMArmy);
      Application.CreateForm(TDMDeleteRecord, DMDeleteRecord);
      Application.CreateForm(TfrmMain, frmMain);      
    except
      ShowMessage("Error Server Connection!");
      Application.Terminate;
    end;
   end;
 finally
   frmSecurity.Free;
 end;
 Application.Run;
end.


 
Германн ©   (2007-04-06 00:49) [5]

Первый раз вижу такой dpr !!!


 
BiN ©   (2007-04-06 01:04) [6]


> ZevSS ©   (04.04.07 22:24)


Попробуй в модуле JclStrings.pas в процедуре LoadCharTypes заменить строку
   GetStringTypeExA(LOCALE_USER_DEFAULT, CT_CTYPE1, @CurrChar, SizeOf(AnsiChar), CurrType);
на
Win32Check(GetStringTypeExA(LOCALE_USER_DEFAULT, CT_CTYPE1, @CurrChar, SizeOf(AnsiChar), CurrType));

Было дело, я обжигался...


 
Плохиш ©   (2007-04-06 03:33) [7]


> ZevSS ©   (06.04.07 00:35) [4]

Афигеть.

1. Mainform становиться первая созданная форма с Owner = Application.
2. У ADOConnection есть свойство Properties.
3. Бедный пользователь, которому показываются сразу все эти кучей созданные формы.


 
SlymRO ©   (2007-04-06 04:18) [8]

Плохиш ©   (06.04.07 3:33) [7]
Бедный пользователь, которому показываются сразу все эти кучей созданные формы

Я тоже децл офигел от обилия автосозданных форм :)
Представляю что творится в DMConnect !
Автар! Динамики добавь!
DMMain - тоже датамодуль? если да то до него формы имеются...
ZevSS ©   (06.04.07 0:35) [4]
DMConnect.ADOConnection.Close;
 if not DMConnect.ADOConnection.Connected then

А смысл? Всегда выполнится.

frmSecurity.Free; - а че так поздно?

frmSecurity := TfrmSecurity.Create(nil);//зачел лишний раз без надобности Application пользовать?
try
 if frmSecurity.ShowModal <> mrOk then //я привык проверять на OK оптимист
 Exit;//Легко и просто :)
finally
 frmSecurity.Free;
end;

//.. твоя мултиформенная лабуда

Application.Run;
end.


 
sniknik ©   (2007-04-06 09:03) [9]

добавлю к уже сказанному

> DMConnect.ADOConnection.Close;
зачем первым действием закрытие коннекта и только после настройка свойств? единственное обьяснение требуемости такого, что в дизайне он у тебя открыт, а раз открыт то и при создании датамодуля тоже открывается(пытается) вот и потребовалось иначе свойств не назначить... а раз открыт то на какоето, возможно только на рабочей машине доступное, соединение/базу... попадается машина у которой база из дизайна недоступна вот тебе и ошибка (не обязательно та что словил, но гарантировано когданибудь "нарвешся").

назначение свойств (лучше через Properties как сказали, нагляднее) можно делать в событии создания датамодуля, смысла выносить код в dpr не вижу.

> except
>   ShowMessage("Error Server Connection!");
а вот за такое с работы увольняют... (я бы точно увольнял, уж очень много от подобного стиля проблем... у нас 2 трети ЦТО можно было бы распустить если бы не проги с такими "маскировками" реальных глюков. (продаем не только свое ПО...))
вот с чего ты решил что там именно "Error Server Connection!"? только с того что сам его словил? или какой другой сакральный смысл? при таком количестве авто созданных форм неужели нигде нет кода в onCreate, или невозможна ошибка от чегото другого а не только коннекта? и даже если от коннекта, знать причину глюка (которая в незамаскированной ошибке прописана) при обслуживании программы очень важно.

это вообше, а конкретно тут, ловля ексепта не нужна. видел в автоматом созданном dpr чтонибудь подобное? ну вот, и у себя убери.

p.s. посмотрел у себя, обычно автоматом создаю только датамодуль и главную форму, остальное по мере надобности... похоже противоположная крайность показанного. ;о)


 
Игорь Шевченко ©   (2007-04-06 12:57) [10]

Германн ©   (06.04.07 00:49) [5]


> Первый раз вижу такой dpr !!!


ну посмотри еще:

var
 WasConnected: ShortInt;
begin
 Application.Initialize;
 Application.Title := "FOO";
 Application.CreateForm(TfrmMain, frmMain);
 Application.CreateForm(TdmData, dmData);
 Application.CreateForm(Tdm0, dm0);
 Application.CreateForm(Tdm1, dm1);
 Application.CreateForm(Tdm2, dm2);
 Application.CreateForm(Tdm3, dm3);
 Application.CreateForm(Tdm4, dm4);
 Application.CreateForm(Tdm5, dm5);
 Application.CreateForm(Tdm6, dm6);
 Application.CreateForm(Tdm7, dm7);
 Application.CreateForm(Tdm8, dm8);
 Application.CreateForm(Tdm9, dm9);
 Application.CreateForm(Tdm10, dm10);
 Application.CreateForm(Tdm11, dm11);
 Application.CreateForm(Tdm12, dm12);
 Application.CreateForm(Tdm13, dm13);
 Application.CreateForm(Tdm14, dm14);
 Application.CreateForm(Tdm15, dm15);
 Application.CreateForm(Tdm16, dm16);
 Application.CreateForm(Tdm17, dm17);
 Application.CreateForm(Tdm18, dm18);
 Application.CreateForm(Tdm19, dm19);
 Application.CreateForm(Tdm20, dm20);
 Application.CreateForm(Tdm21, dm21);
 Application.CreateForm(Tdm22, dm22);
 Application.CreateForm(Tdm23, dm23);
 Application.CreateForm(Tdm24, dm24);
 Application.CreateForm(Tdm25, dm25);
 Application.CreateForm(Tdm26, dm26);
 Application.CreateForm(Tdm27, dm27);
 Application.CreateForm(Tdm28, dm28);
 Application.CreateForm(Tdm29, dm29);
 Application.CreateForm(Tdm30, dm30);
 Application.CreateForm(Tdm31, dm31);
 Application.CreateForm(Tdm32, dm32);
 Application.CreateForm(Tdm33, dm33);
 Application.CreateForm(Tdm34, dm34);
 try
   dlgConnect := TdlgConnect.Create(Application);
   WasConnected := dlgConnect.ShowModal;
 finally
   dlgConnect.Free;
 end;
 if WasConnected <> 1 then begin
   Application.ShowMainForm := false;
   PostMessage(frmMain.Handle, WM_CLOSE, 0, 0);
 end;
 Application.Run
end.


P.S. все имена изменены :)


 
Германн ©   (2007-04-06 13:19) [11]


> Игорь Шевченко ©   (06.04.07 12:57) [10]
>
> Германн ©   (06.04.07 00:49) [5]
>
>
> > Первый раз вижу такой dpr !!!
>
>
> ну посмотри еще:

Фуууу :)


 
sniknik ©   (2007-04-06 13:41) [12]

> ну посмотри еще:
а я обычно пишу так ...


uses .....

begin
 Application.Initialize;
 Application.CreateForm(TdmData, dmData); //считаем что датамодуль используется в форме с логином

 with TdlgConnect.Create(nil) do
 try
    if dlgConnect.ShowModa <> mrOKl  then begin
      dmData.Free; //не всегда обязательно, но желательно, проще чем закрывать конекты и т.д. так все разом чистится
      Exit;
   end;
 finally
   dlgConnect.Free;
 end;

 Application.Title := "FOO";
 Application.CreateForm(TfrmMain, frmMain);
 ... //тут формы требующие автосоздания... но обычно все одним Main-ом и заканчивается, остальное по мере надобности
 Application.Run;
end.


имхо проще, нагляднее, лучше, без ненужных действий...


 
Игорь Шевченко ©   (2007-04-06 17:04) [13]

sniknik ©   (06.04.07 13:41) [12]
Германн ©   (06.04.07 13:19) [11]

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


 
_Аноним   (2007-04-06 17:14) [14]


> except
>       ShowMessage("Error Server Connection!");
>       Application.Terminate;
>     end;

Вот это великолепно.
Следующим вопросом будет:
"У меня программа при старте вываливается с ошибкой ""Error Server Connection!", как бы мне понять, в чем именно дело"?

А вот никак при таком раскладе


 
sniknik ©   (2007-04-06 17:19) [15]

> автоматом создаются не формы, а датамодули
опс... ну, это не очевидно/легко пропустить по подобным названиям, я думал формы. (кстати в [4] судя по TDM.... тоже датамодули)


 
ZevSS ©   (2007-04-07 13:58) [16]

Немного мы ушли, имхо, от обсуждения коренного вопроса.
1. Как тут уже заметили, все что у меня создается в дпр-е - это действительно датамодули, кроме frmMain (она же основная форма приложения).
2. Приложение еще далеко не закончено, поэтому "Error server connection" на данном этапе вполне меня устраивает. Позже будет естественно исправлено.
А теперь вернусь к коренному вопросу: Взял я свой исходный код и откомпилил его на компьютере (А), где exe-шник, созданный на моем компьютере вылетал с ошибкой. Так вот этот экзешник А запускается на всех компах к которым я получил доступ. В чем был глюк я не пойму.


 
Loginov Dmitry ©   (2007-04-07 14:03) [17]

> Так вот этот экзешник А запускается на всех компах к которым
> я получил доступ. В чем был глюк я не пойму.


А отладчик на что?


 
ZevSS ©   (2007-04-08 13:16) [18]

Удалено модератором
Примечание: Задай вопрос в отдельной ветке



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

Текущий архив: 2007.04.29;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.028 c
2-1176440360
allucard
2007-04-13 08:59
2007.04.29
Как создать папку?


2-1175845690
=Teddy=
2007-04-06 11:48
2007.04.29
Как определить возраст папки?


5-1152871960
Solomenko
2006-07-14 14:12
2007.04.29
Свойство типа TForm в компоненте не работает


11-1157112447
Vorontsov
2006-09-01 16:07
2007.04.29
Проблема с формами


15-1174495968
SkySpeed
2007-03-21 19:52
2007.04.29
Как исправить ошибку с повреждённым файлом реестра?..............