Форум: "Начинающим";
Текущий архив: 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.06 c