|
Вопрос # 5 315/ вопрос открыт / |
|
Доброго времени суток уважаемые эксперты! Подскажите пожалуйста, как сделать проверку наличия конкретной базы данных, присутствует ли она в том же каталоге где программа или отсутствует, если отсутствует то произвести подключение уже в программе если нет, то продолжить прогресс «ProgressCyl». Пробую делать вот таким кодом но у меня, выдает ошибку, и я не уверен что у меня вообще правельный способ проверки, подскажите есть ли еще варианты?! Премного благодарен заранее за помощь!
Приложение: Переключить в обычный режим- procedure TForm1.Timer1Timer(Sender: TObject);
- begin
- With ProgressCyl1 do
- begin
- Position:=Position+1;
- /////////////////////
- if DataModule3.ADOConnection1.ConnectionString= StrScan ('Provider=Microsoft.Jet.OLEDB.4.0;User
ID=Admin;Data Source=Database.mdb;Mode=Share Deny None;Extended Properties="";Jet
OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database
Password="";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:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet
OLEDB:SFP=False') <>nil;
-
- then
- begin
- datamodule3.ADOTable1.Active:=true;
- end
- else
- datamodule3.ADOTable1.Active:=false;
-
- begin
- OpenDialog1.Execute;
- DataModule3.ADOConnection1.Close;
- DataModule3.ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'
- +'Data Source='+OpenDialog1.FileName+ ';Persist Security Info=false ';
- DataModule3.ADOConnection1.Open;
- datamodule3.ADOTable1.Active:=TRUE;
- end;
 |
Вопрос задал: alexlafa (статус: Посетитель)
Вопрос отправлен: 24 мая 2011, 20:35
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 11; последнее сообщение — 8 июня 2011, 21:55; участников в обсуждении: 4.
|
bugmenot (статус: 3-ий класс), 24 мая 2011, 21:00 [#1]:
Цитата (alexlafa):
если отсутствует то произвести подключение уже в программе если нет
казнить нельзя помиловать
если притиснуть кнопочку F1, то появится след. текст, его необходимо прочитать (Produce/Solve можно игнорировать)
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
alexlafa (статус: Посетитель), 24 мая 2011, 21:45 [#2]:
Если можно поподробней, как использовать? А то пробую, не получается! (
|
|
androschuk.a (статус: Посетитель), 25 мая 2011, 12:05 [#3]:
Эта ересь долбит еще и в таймере, прогресс бар использовать не эффективно, потому что на первых порах он пролетает, а на подключении повиснет все приложение. Вот что то написал, могут быть ошибки, поскольку писал в блокноте.
const
C_PROVIDER = 'Microsoft.Jet.OLEDB.4.0';
C_PASSWORD = '""';
C_DATASOURCE = 'Database.mdb';
C_PSI ='True';
var
ConnStr:WideString;
AppPath:string;
LocationDB:string;
begin
AppPath = ExtractFilePath(ParamStr(0));
LocationDB =AppPath+C_DATASOURCE;
if not FileExists(LocationDB) then
begin
showmessage('Подключите базу данных');
Exit;
end;
ConnStr:=Format('Provider=%s;password=%s;Data Source=%s;Persist Security
Info=%s',[C_PROVIDER,C_PASSWORD,C_DATASOURCE,C_PSI]);
DataModule3.ADOConnection1.ConnectionString=ConnStr;
try
DataModule3.ADOConnection1.Connected:=true;
datamodule3.ADOTable1.Open;
except
on E:Exception do ShowMessage('Ошибка:'+E.Message);
end
end;
|
|
alexlafa (статус: Посетитель), 26 мая 2011, 16:27 [#4]:
Можно уточнить в какое событие мы вставляем этот код, а так же какого типа будит эта переменная LocationDB, я поставил "стринг"?!
|
|
androschuk.a (статус: Посетитель), 27 мая 2011, 10:39 [#5]:
LocationDB :string
можно к примеру на onCreate формы, или на onClick кнопки... вариантов масса.
Можно также вынести каждый элемент ConnectionString в глобальные переменные и описать так:
var
C_PROVIDER : string= 'Microsoft.Jet.OLEDB.4.0';
C_PASSWORD : string = '""';
C_DATASOURCE : string = 'Database.mdb';
C_PSI : string ='True';
Тогда будет возможность изменять в процессе віполнения программы, к примеру подключиться к другой БД.
|
|
alexlafa (статус: Посетитель), 31 мая 2011, 21:32 [#6]:
НАписал на событие OnCreate Form1, вроде ошибок нет, запускаю программу и выдает ошибку, останавливаеться на вот этой строке!! "DataModule3.ADOConnection1.ConnectionString=ConnStr;"
|
|
androschuk.a (статус: Посетитель), 31 мая 2011, 22:38 [#7]:
И какая ошибка там?
|
|
alexlafa (статус: Посетитель), 31 мая 2011, 22:48 [#8]:
Project Project1.exe raised exception class EAccessViolation with message ‘Access violation at address 00474C4A in module ‘Project1.exe’.Read of address 000002F4’
|
|
androschuk.a (статус: Посетитель), 31 мая 2011, 23:08 [#9]:
ересь какая то. А в отладчике если поставить точку прерывания что передается в строке ConnStr ?
|
|
corban (статус: 2-ой класс), 8 июня 2011, 09:29 [#10]:
а зачем все это в таймере? чтоб вири не утащили базу? ADOConnection1 у тебя что постоянно открывается/закрывается?
|
|
alexlafa (статус: Посетитель), 8 июня 2011, 21:55 [#11]:
Все это я сделал, для того что бы, если вдруг с базой что нибудь сделают, например перенесут в другой каталог, или переменуют, не было ошибок! А в таймере я сделал, потому что использовал progresbar!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|