Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Подключение БД


Автор: Black_Joker 9.9.2005, 07:11
Как подключить БД не прописывая псевдоним БД?

Надо приносить работу на проверку к начальнику на кафедру.
Машина в ужасном состоянии. Регулярно падает, переустанавливается или просто "исчезают" файлы.

Автор: Alex 9.9.2005, 07:28
http://forum.vingrad.ru/index.php?showtopic=29524&view=findpost&p=214449

Автор: bas 9.9.2005, 12:50
В TTable::TableName прописывать путь GetCurrentDir+имя файла.
Добавлено @ 12:51
Второй путь создавать (проверять) alias програмно при старте проги и уничтожать при закрытии

Автор: Black_Joker 16.9.2005, 10:59
А пример можно???


TableName прописывать путь GetCurrentDir+имя файла - получилось для *.db
подскажите, как это же действие реализовать для *.mdb - Акцесовские БД
(В виду своей ленности пользую свою стареньку базу сделанную в акцессе)

Автор: Guest 16.9.2005, 11:52
Вот пожалуйста

кидаешь на форму ADOConnected


MainPath := ExtractFilePath(Application.ExeName);//считывание главного пути
ADOConnected.Connected := False; //отключить связь с БД
ADOConnected.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=' + MainPath + 'Base.mdb;' +
'Mode=Share Deny Read|Share Deny Write;' +
'Persist Security Info=False'

а все остальные компоненты завязываешь через ADOConnected


Автор: offline 16.9.2005, 11:54
опс забыл войти smile

и все работает

Автор: bas 16.9.2005, 12:00
Пишу на ВСВ но код надеюсь понятен.
Код

 DBIEnv         Env;
 TStringList * pslAliasParams= new TStringList();
 TStringList * MyList = new TStringList();
 AnsiString TmpDir=GetCurrentDir();
 AnsiString asDir,DirBde;
 try
 {
 DirBde=TmpDir+"\\BDE" ;
 memset(&Env, 0, sizeof(DBIEnv));
 strcpy(Env.szWorkDir, DirBde.c_str());
  DbiInit(&Env);
 DirBde=TmpDir+"\\BDE\\idapi32.cfg" ;
 strcpy(Env.szIniFile,DirBde.c_str());
  DbiInit(&Env);
   } catch(...)
     {
      ShowMessage("\\BDE\\idapi.cfg. Обратитесь к администратору !!!") ;
      Application->Terminate();
     }


 if (!Session->IsAlias ("SOBRDBF") )
 {

   ShowMessage("Нет Aliasa SOBRDBF. Введите параметры к базе данных!!! ");
       try
    {
     MyList->Add("PATH="+TmpDir);
     Session->AddAlias("SOBRDBF", "FOXPRO", MyList);
     Session->GetAliasParams("SOBRDBF",pslAliasParams);
     asDir=pslAliasParams->Strings[0].SubString(6,255);
      if (InputQuery("SobrDbf Alias Путь ","Path",asDir))
       {
        pslAliasParams->Clear();
        pslAliasParams->Add("PATH="+asDir);
        Session->ModifyAlias ("SOBRDBF",pslAliasParams);
        Session->SaveConfigFile ();
       }
    }
    catch(...)
     {
      ShowMessage("Ошибка изменения Aliasa. Обратитесь к администратору !!!") ;
      Application->Terminate();
     }
 }


Цитата(Black_Joker @ 16.9.2005, 07:59)
как это же действие реализовать для *.mdb - Акцесовские БД

mdb - это один файл и надо указать только путь к нему а для каждой таблице уже не надо.
Из хелпа
Код

This example creates an alias for an InterBase database server:

TStringList MyList = new TStringList();

try
{
  MyList->Add("SERVER NAME=IB_SERVER:/PATH/DATABASE.GDB");
  MyList->Add("USER NAME=MYNAME");
  Session1->AddAlias("NewIBAlias", "INTRBASE", MyList);
}
__finally
{
  delete MyList;
}

Автор: Alex 16.9.2005, 21:53
bas, здесь в общето форум по Delphi smile

Автор: bas 19.9.2005, 09:42
Цитата(Alex @ 16.9.2005, 18:53)
здесь в общето форум по Delphi

BDE - общее , а перевести не сложно, тем более что в хелпе BDE - это есть.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)