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

Вниз

Запуск программы с базой из автозагрузки   Найти похожие ветки 

 
Radiy   (2002-10-17 17:40) [0]

Здравствуйте мастера!
Чтобы из автозагрузки открыть прогу с базой, прописываю (по совету shiknik)
Такую процедуру ( см. ниже ).
Компилет нормально ( по Ctrl+F9 ) а по Run ( по F9 ) пишет ошибка :
Project WARM.exe raised exception class EaccessViolation with message Access Violation at
И т.д.
Подскажите пожалуйсто, может что-то пропустил или еще, что ?

procedure TForm1.FormCreate(Sender: TObject);
var
StrPath:string;

StrPath:=ExtractFilePath(Application.ExeName);
dmwarm.ADOConnection1.ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0; Data Sources="+
StrPath+"WARM.exe;DefaulDir="+
"Persist Securiti Info=False"+
StrPath+"Initial Catalog=";
End;


 
Андрей Прокофьев   (2002-10-17 17:49) [1]

Вот так и написано?!
По совету Sniknik?!

procedure TForm1.FormCreate(Sender: TObject);
var
StrPath:string;

StrPath:=ExtractFilePath(Application.ExeName);
dmwarm.ADOConnection1.ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0; Data Sources="+
StrPath+"WARM.exe;DefaulDir="+
"Persist Securiti Info=False"+
StrPath+"Initial Catalog=";
End;

Не знаю, что там насчет StrPath+"WARM.exe (?!),
но
"Persist Securit y Info=False;" +
"Initial Catalog=" + StrPath;
значительно лучше!


 
sniknik   (2002-10-17 17:53) [2]

я такого не советовал!!! WARM.exe было WARM. MDB


 
Radiy   (2002-10-17 17:54) [3]

> Андрей Прокофьев
Спасибо
> Не знаю, что там насчет StrPath+"WARM.exe (?!),
А что путь программы указывать не надо ?


 
Radiy   (2002-10-17 17:58) [4]

> shiknik
Спасибо

Я наверное ошибся и правдо *.mdb , попробую сейчас


 
sniknik   (2002-10-17 17:59) [5]

моя версия.
StrPath: = ExtractFilePath(Application.ExeName);

ADOConnect1.ConnectionString:=
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+
StrPath+"WARM.mdb"+
";Persist Security Info=False";

называется найди 10 отличий! :0))
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1034523579&n=1
DefaulDir= тоже лишнее, глючить на нем будет.


 
Андрей Прокофьев   (2002-10-17 17:59) [6]


StrPath+"WARM. MDB"

2 sniknik
:)


 
Radiy   (2002-10-17 18:06) [7]

Попробовал от (17.10.02 17:59)
Все равно ошибка и без DefaulDir=
указывает при F9 на строчку
dmwarm.ADOConnection1.ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0; Data Sources="+


 
sniknik   (2002-10-17 18:15) [8]

а что пишет?
возможно ошибка до, и при компиляции? протрассируй по F7(F8).
и самое главное что пишет?


 
Radiy   (2002-10-17 18:19) [9]


Попробую сейчас. А вот это пишет по F9 "Project WARM.exe raised exception class EaccessViolation with message Access Violation at И т.д.
"а при компиляции все отлично - ничего не пишет, а по F7(F8) не знаю, сейчас попробую.


 
Андрей Прокофьев   (2002-10-17 18:22) [10]

dmwarm.ADOConnection1

dmwarm - что это? модуль данных? Создается ли он? Как?


 
sniknik   (2002-10-17 18:23) [11]

а у тебя случайно коннект не активен?
ADOConnection1.Connected:= False;
поставь на всякий случай до присваивания. (но после проверки убери)


 
sunwheel   (2002-10-17 18:26) [12]

После + добавь StrPath+ и т.д. См. Radiy (17.10.02 17:40)


 
sniknik   (2002-10-17 18:26) [13]

черт точно, не усек! Андрей Прокофьев © (17.10.02 18:22)!
модуль с данными должен создаватся первым до любых действий с ним!


 
Radiy   (2002-10-17 18:42) [14]

Совершенно верно - модуль данных
dmwarm - модуль.
А по F7 программа зацикливается на
function NearestIndex(Value: Byte; const Bytes: array of Byte): Byte;
var
B, I: Byte;
Diff, DiffMin: Word;
begin
Result := 0;
B := Bytes[0];
DiffMin := Abs(Value - B);
for I := 1 to High(Bytes) do begin
B := Bytes[I];
Diff := Abs(Value - B);
if Diff < DiffMin then begin
DiffMin := Diff;
Result := I;
end;
end;
end;

var
I: Integer;
begin
{ For 7 Red X 8 Green X 4 Blue palettes etc. }
for I := 0 to 255 do begin
TruncIndex04[I] := NearestIndex(Byte(I), Scale04);
TruncIndex06[I] := NearestIndex(Byte(I), Scale06);

И что делать ?
ADOConnection1.Connected:= False; - это сделать, а потом?



 
sniknik   (2002-10-17 18:53) [15]

ADOConnection1.Connected:= False; это только для проверки на случай если у тебя еще и в отладчике коннект открыт.

но тут скорее прав Андрей Прокофьев © (17.10.02 18:22)

ошибка ведь на присвоении а не открытии коннекта.
проще всего перенеси всю конструкцию с
StrPath: = ExtractFilePath(Application.ExeName);

ADOConnect1.ConnectionString:=
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+
StrPath+"WARM.mdb"+
";Persist Security Info=False";

в сам модуль данных на его создание (onCreate), не ошибешся. В общем попробуй.


 
Radiy   (2002-10-17 18:55) [16]


ADOConnection1.Connected:= False; Сделал и все равно ошибка
выскакивает по F9 если дальше продолжить то программа запускаеться с базой
Подскажите пожалуйсто, может еще что может быть не так!


 
Radiy   (2002-10-17 19:00) [17]

> Николай, (shiknik)
Спасибо огромное!!!
Сейчас сделаю.


 
Radiy   (2002-10-17 19:16) [18]

Наверное сегодня не мой день.
Поместил все в модуль все равно ошибка, но когда сделал
ADOConnection1.Connected:= False; то заработало но естес-но
с пустой базой, хотя Я делал ADOConnection1.Connected:= False;
в основной программе то не работало


 
sniknik   (2002-10-17 19:22) [19]

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

от одной избавился уже дело. пробуй дальше пока прет! сегодня именно твой день. ведь получается же.


 
Андрей Прокофьев   (2002-10-17 19:28) [20]

У вас так:

В DPR файле

program ...;
...
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TDMWarm, dmwarm);
Application.Run;
end.

В модуле данных:
var
dmwarm : TDMWarm;

procedure TDMWarm.DataModuleCreate(Sender: TObject);
begin

ADOConnection1.Connected := false;

ADOConnection1.ConnectionString := "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+
StrPath+"WARM.mdb"+
";Persist Security Info=False";

ADOConnection1.Connected := true;
end;

Что за ошибка?
Если Access Violation - то скорее всего не создается какой-то объект, к которому Вы обращаетесь.







 
Radiy   (2002-10-17 20:42) [21]

> Андрей Прокофьев

Да-да именно такой код
прям как смотрите на экран.

> Николай
Что-то кручу и так и эдок, никак!
Но нонечно добить это надо, попробовал всю строку засунуть

procedure TDMWarm.DataModuleCreate(Sender: TObject);
begin

ADOConnection1.Connected := false;
ADOConnection1.ConnectionString:=

"Provider=Microsoft.Jet.OLEDB.4.0;"+
"User ID=Admin;Data Source="+
StrPath+"WARM.mdb"+
"Mode=Share Deny None;Extended Properties="";"+
"Locale Identifier=1033;Jet OLEDB:System database="";"+
"Jet OLEDB:Registry Path="";Jet OLEDB:Database Password=ser;"+
"Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;"+
"Jet OLEDB:Global Partial Bulk Ops=2;"+
"Jet OLEDB:Global Bulk Transactions=1;"+
"Jet OLEDB:New Database Password="";"+
" Jet OLEDB:Create System Database=False;"+
"Jet OLEDB:Encrypt Database=False;"+
"Jet OLEDB:Compact Without Replica Repair=False;"+
"Jet OLEDB:SFP=False";
ADOConnection1.Connected := true;
end;

Попробую поковырять еще.


 
Radiy   (2002-10-17 21:17) [22]

>Андрей Прокофьев
Вы правы с ошибкой Access Violation
Какжись немного дапер по F7 дошол да и вобще стопорит на
Application.CreateForm(TForm2, Form2);В DPR файле
Там у меня еще одна простенькая форма (без базы)
но непонятно, почему там ведь ничего нет?!


 
sniknik   (2002-10-17 21:56) [23]

Зачем так жестоко? :-)
Вполне достаточно той строки что я дал. (она полная и рабочая) сделай с ней после добавляй чего надо но все параметры прописывать это чересчур.
единственное добавь раз у тебя база запаролена
ADOConnection1.ConnectionString:=
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+
StrPath+"WARM.mdb"+
";Persist Security Info=False;Jet OLEDB:Database Password=ser";
м все! ничего больше, пока во всяком случае.

по поводу ошибки
нельзя использовать обьект до того как он создан.
пример имеем 2 формы
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
в Form1 при создании (onCreate) ты не имееш права использовать обьекты из Form2 т.к. их еще нет (любое присвоение даст ошибку). Потом на onShow или других событиях (после того как создание всех форм завершится) можно но тоже лутше не надо, во избежание. :-)


 
Radiy   (2002-10-18 06:17) [24]

> shiknik
Все конечно объяснили хорошо,но что предпринять, я не знаю...


 
sniknik   (2002-10-18 08:44) [25]

ну хотя бы попробовать поменять местами
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm1, Form1);
тогда в Form1 можно работать с Form2, ведь она уже создастся.
получится если только у тебя еще и в Form2 на Form1 ссылок нет. Если есть то менять программу чтобы не было.

еще можно сделать "ход конем"
перенести работу с другой формой в другое событие в onShow например (оно вызывается после создания всех форм)
так например (once нужна если делаеш Hide форме чтобы не инициализировалась каждый раз)
в главном модуле
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
в модуле первой формы
procedure TForm1.FormShow(Sender: TObject);
const once: boolean= true;
begin
if once then begin
Form2.OperActive:= false;
once:= false;
end;
end;


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


 
Radiy   (2002-10-18 10:10) [26]

> shiknik
Спасибо Николай !
Я попробую так. Ликвидирую все лишнее(пока конечно), т.е.Form2.
Да и посмотрю, что будет.Но мне кажется дело в другом, почему
по F9 компилятор показывает ВСЕГДА на одну строчку
ADOConnection1.ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0; Data Хотя ,понятно почему, наверное из-за Form2.



 
Radiy   (2002-10-18 16:10) [27]

Кажется дошол, т.е. нашел немного.
Вобшем работает, компилет нормально но когда запускаю
Именно из автозагрузки пишет:
Could not find file ‘C\Windows\Главное меню\Программы\Авто-ка\WARM.mdb;
Как я понял прога не может найти базу.
В целях эксперемента я туда кидал базу (в автозагрузку), то все работало!
А код вот такой:

procedure TdmPhone.DataModuleCreate(Sender: TObject);
var
StrPath:string;
begin
ADOConnection1.Connected:= False;

StrPath:=ExtractFilePath(Application.exeName);

ADOConnection1.ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + StrPath + "WARM.mdb;" + "Persist Security Info=False";

ADOConnection1.Connected := true;

ADOtb1.Active:=True;
ADOQury1.Active:=True;
ADOtb2.Active:=True;
ADOtb3.Active:=True;
ADOtb4.Active:=True;
ADOtb5.Active:=True;
ADOtb6.Active:=True;
ADOtb7.Active:=True;
ADOQury2.Active:=True;
ADOtb8.Active:=True;

ADOtbN.Active:=True;

end;
Причем обязательное условие – нужно очистить поле в инспекторе в строке “ConnectionString”
для компонента ADOConnection !!!

Так вот, что сделать, чтоб прога могла найти базу.
Ведь неизвестно куда User бросит программу, неделать же инсталя


 
sniknik   (2002-10-18 16:36) [28]

ты наверно саму прогу в директорию автозагрузки положил раз она начала искать базу в
C\Windows\Главное меню\Программы\Авто-ка\WARM.mdb
вот эта строка
StrPath:=ExtractFilePath(Application.exeName);
как раз и берет путь того места откуда прога ваполняется mdb должен рядом лежать (чего и добивались в принципе)

располагай базу и программу всегда рядом. например в папке C:\Base
а в автозагрузку вставь линк не exe-шник. тогда должно запускатся. и юзерам на носу порубай, рядом и все тут! :-)) Или делай сканирование дисков для поиска своей базы мало ли куда они ее засунут.


 
Radiy+   (2002-10-18 17:29) [29]

> sniknik
OK!
База всегда лежала рядом с exe-шником.
Спасибо!



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

Форум: "Базы";
Текущий архив: 2002.11.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.012 c
1-21605
Beginner-Designer
2002-10-25 17:21
2002.11.07
Как очистить:


1-21671
Злой!!!
2002-10-28 08:48
2002.11.07
Как обработать клик, если кнопка создается внутри программы?


1-21614
Пиноккио
2002-10-23 22:31
2002.11.07
Использование Canvas.PainTo


3-21375
irmantukas
2002-10-17 14:06
2002.11.07
Помогите разабратся с индексами


1-21681
Vitalik
2002-10-28 07:53
2002.11.07
Создание визуальных компонентов





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