Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 315

/ вопрос открыт /

Доброго времени суток уважаемые эксперты! Подскажите пожалуйста, как сделать проверку наличия конкретной базы данных, присутствует ли она в том же каталоге где программа или отсутствует, если отсутствует то произвести подключение уже в программе если нет, то продолжить прогресс «ProgressCyl». Пробую делать вот таким кодом но у меня, выдает ошибку, и я не уверен что у меня вообще правельный способ проверки, подскажите есть ли еще варианты?! Премного благодарен заранее за помощь!

Приложение:
  1. procedure TForm1.Timer1Timer(Sender: TObject);
  2. begin
  3. With ProgressCyl1 do
  4. begin
  5. Position:=Position+1;
  6. /////////////////////
  7. 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;
  8.  
  9. then
  10. begin
  11. datamodule3.ADOTable1.Active:=true;
  12. end
  13. else
  14. datamodule3.ADOTable1.Active:=false;
  15.  
  16. begin
  17. OpenDialog1.Execute;
  18. DataModule3.ADOConnection1.Close;
  19. DataModule3.ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'
  20. +'Data Source='+OpenDialog1.FileName+ ';Persist Security Info=false ';
  21. DataModule3.ADOConnection1.Open;
  22. datamodule3.ADOTable1.Active:=TRUE;
  23. end;


alexlafa Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: alexlafa (статус: Посетитель)
Вопрос отправлен: 24 мая 2011, 20:35
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 11; последнее сообщение — 8 июня 2011, 21:55; участников в обсуждении: 4.
bugmenot

bugmenot (статус: 3-ий класс), 24 мая 2011, 21:00 [#1]:

Цитата (alexlafa):

если отсутствует то произвести подключение уже в программе если нет

казнить нельзя помиловать

если притиснуть кнопочку F1, то появится след. текст, его необходимо прочитать (Produce/Solve можно игнорировать)
виконання програми розпочинається з того самого мiсця, де призупинилося.

alexlafa

alexlafa (статус: Посетитель), 24 мая 2011, 21:45 [#2]:

Если можно поподробней, как использовать? А то пробую, не получается! (
androschuk.a

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

alexlafa (статус: Посетитель), 26 мая 2011, 16:27 [#4]:

Можно уточнить в какое событие мы вставляем этот код, а так же какого типа будит эта переменная LocationDB, я поставил "стринг"?!
androschuk.a

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

alexlafa (статус: Посетитель), 31 мая 2011, 21:32 [#6]:

НАписал на событие OnCreate Form1, вроде ошибок нет, запускаю программу и выдает ошибку, останавливаеться на вот этой строке!! "DataModule3.ADOConnection1.ConnectionString=ConnStr;"
androschuk.a

androschuk.a (статус: Посетитель), 31 мая 2011, 22:38 [#7]:

И какая ошибка там?
alexlafa

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

androschuk.a (статус: Посетитель), 31 мая 2011, 23:08 [#9]:

ересь какая то. А в отладчике если поставить точку прерывания что передается в строке ConnStr ?
corban

corban (статус: 2-ой класс), 8 июня 2011, 09:29 [#10]:

а зачем все это в таймере? чтоб вири не утащили базу? ADOConnection1 у тебя что постоянно открывается/закрывается?
alexlafa

alexlafa (статус: Посетитель), 8 июня 2011, 21:55 [#11]:

Все это я сделал, для того что бы, если вдруг с базой что нибудь сделают, например перенесут в другой каталог, или переменуют, не было ошибок! А в таймере я сделал, потому что использовал progresbar!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:49
Выполнено за 0.03 сек.