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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.066 c
4-1165140028
Чапаев
2006-12-03 13:00
2007.04.29
Named pipe


3-1170742393
Ванек
2007-02-06 09:13
2007.04.29
Ключевые поля и связи


2-1176299333
BatonPolnii
2007-04-11 17:48
2007.04.29
Округление чисел


1-1172822802
Jan
2007-03-02 11:06
2007.04.29
array of array Integer


2-1176329072
SerJaNT
2007-04-12 02:04
2007.04.29
Удалить дубликаты в ListBox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский