| 
| 
 | Вопрос # 5 315/ вопрос открыт / | 
 |  Доброго времени суток уважаемые эксперты! Подскажите пожалуйста, как сделать проверку наличия конкретной базы данных, присутствует ли она в том же каталоге где программа или отсутствует, если отсутствует то произвести подключение уже в программе если нет, то продолжить прогресс «ProgressCyl». Пробую делать вот таким кодом но у меня, выдает ошибку, и я не уверен что у меня вообще правельный способ проверки, подскажите есть ли еще варианты?! Премного благодарен заранее за помощь! Приложение:Переключить в обычный режим procedure TForm1.Timer1Timer(Sender: TObject);beginWith ProgressCyl1 dobeginPosition:=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; thenbegindatamodule3.ADOTable1.Active:=true;endelse datamodule3.ADOTable1.Active:=false;  beginOpenDialog1.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! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |