Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2011, 16:00   #1
svyatoi777
Пользователь
 
Аватар для svyatoi777
 
Регистрация: 06.01.2011
Сообщений: 29
По умолчанию Доступ в InterBase по аналогии udl и ADO

Здравствуйте! Если работать с БД Access, то подключившись к нему с помощью ADO, есть возможность создать udl файл, в котором в дальнейшем можно редактировать путь к базе. Я работаю с БД InterBase. Возможно ли сделать так же, как и в случае с ADО, чтобы был некий cfg, в котором можно изменить путь к БД?
svyatoi777 вне форума Ответить с цитированием
Старый 21.01.2011, 16:06   #2
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Конечно возможно.
_Engine_ вне форума Ответить с цитированием
Старый 21.01.2011, 16:10   #3
svyatoi777
Пользователь
 
Аватар для svyatoi777
 
Регистрация: 06.01.2011
Сообщений: 29
По умолчанию

А как это реализовать? Просто компонент доступа к IB базе не имеет возможности подключения к UDL. Да и драйверов в списке я не обнаружил. Может есть ещё какой-либо упрощенный способ? Или писать форму с заполнением параметров вручную? Просто ситуация такова, что если например много пользователей будут коннектиться к БД, то им проще "раскидать" такой файл по компам и все проблемы. Нежели прописывать пути у каждого индивидуально.
svyatoi777 вне форума Ответить с цитированием
Старый 21.01.2011, 16:13   #4
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Ничто не мешает в строке ADO-коннекта указать заранее инсталлированный провайдер Interbase OLE DB.
mss вне форума Ответить с цитированием
Старый 21.01.2011, 16:16   #5
svyatoi777
Пользователь
 
Аватар для svyatoi777
 
Регистрация: 06.01.2011
Сообщений: 29
По умолчанию

Я подключаюсь через IBDatabase, в котором прописан путь к БД. А если БД поменяет путь? Исходников нет. И как тогда пользователю быть? Вот для этого я и хочу найти аналогию UDL.
svyatoi777 вне форума Ответить с цитированием
Старый 21.01.2011, 16:30   #6
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> через IBDatabase, в котором прописан путь к БД

Если он там "жестко" прописан в дизайн-тайм и нет умения/возможности его изменить, то о каком UDL и CFG может идти речь ?

А программисту, устроившего такой геморрой пользователю и не оставившего даже исходники - пожизненный эцих с гвоздями)
mss вне форума Ответить с цитированием
Старый 21.01.2011, 16:35   #7
svyatoi777
Пользователь
 
Аватар для svyatoi777
 
Регистрация: 06.01.2011
Сообщений: 29
По умолчанию

Так вот речь и идет о том, чтобы избавить от гемороя пользователя. Я например не могу предугадать, по какому пути будет располагаться БД, посему и хочу что-то придумать в виде udl. Можно написать утилиту, в которой ручками можно прописать путь и всё ок будет, но проблема в том, что это придется сделать у каждого пользователя на компе. Потому и хочу универсальный файл с путями, чтобы закинуть его в папку с программой и забыть о настройках подключения.
svyatoi777 вне форума Ответить с цитированием
Старый 21.01.2011, 17:07   #8
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Не проверял но должна работать:
Код:
{******************************************************************************}
{**                 Функция для загрузки адресса БД в IBDataBase             **}
{******************************************************************************}
Function SetDBName(IBDataBase: TIBDatabase; IniFileAdr: TIniFile): HRESULT;
{** загрузка будет происходить из секции, которая носит имя компонента       **}
{** IBDataBase. Имя параметра = "DatabaseName"                               **}
begin
  with IBDataBase do
  begin
    // на всяк отключим на БД
    close;

    // дергаем изи ини файла адрес IBDataBase
    DatabaseName := IniFileAdr.ReadString(Name,
      'DatabaseName', '');

    // проверяем стоит ли подключать IBDataBase
    if DatabaseName <> '' then
    begin
      Open;
    else
    begin
     // не айс =\
     Result := STG_E_FILENOTFOUND;
     Exit;
    end;

  end; {with}

  // все чики-пуки ^_^
  Result := S_OK;
end;
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 21.01.2011, 17:27   #9
svyatoi777
Пользователь
 
Аватар для svyatoi777
 
Регистрация: 06.01.2011
Сообщений: 29
По умолчанию

SNUPY, Спасибо! Ты понял суть моего вопроса. Код полезный. Буду разбираться. А вот ещё тогда не большой вопросик к тебе. Допустим в файле xxx.ini у меня есть одна строка DataBase: xxx.gdb.

Путь к БД мне нужно, чтобы прописался сразу, как только пользователь запустит программу. Где этот код прописать? В create стартовой формы? Правильно мыслю? А для пользователя уже вылетит стандартное окно с логином и паролем.
svyatoi777 вне форума Ответить с цитированием
Старый 21.01.2011, 17:56   #10
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

наверно так:
Код:
{******************************************************************************}
{**            продцедура вызваемая во время инициализации окна Form1        **}
{******************************************************************************}
procedure TForm1.FormCreate(Sender: TObject);
{**  В данной продцедуре происходит назначние адреса БД для компонента       **}
{**  IBDataBase1 (даннве достаються из файла "\xxx.ini")                     **}
var
  IniFile: TIniFile;
begin

  // открываем ини-файл "xxx.ini" который лежит в одной папке с ЕХЕ-программы
  IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'xxx.ini');

  try

    // устанавливаем адрес БД
    if Failed(SetDBName(IBDataBase1, IniFile)) then
    begin
      // что то пошло не так =\
      // напугаем пользователя :D
      MessageDlg('Произошла ошибка при подключении к БД.' +
        ' Обратитесь к одмину!!!!',mtError, [mbOK], 0);
    end;

  finally
    // он больше нам не пригодиться =)
    IniFile.Free;

  end;

end;
Помог? Ну так нажми на весы!

Последний раз редактировалось SNUPY; 21.01.2011 в 19:28.
SNUPY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по UDL Lamerovich БД в Delphi 2 24.11.2009 12:15
InterBase EdNovice БД в Delphi 1 11.05.2007 12:12
InterBase 6.5 san4es БД в Delphi 0 12.12.2006 20:03