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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 981

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

Здравствуйте, эксперты!
как с помощью реестра можно вывести список баз данных, доступных на данном компьютере?

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

Вопрос задал: ss (статус: Посетитель)
Вопрос отправлен: 16 октября 2007, 15:59
Состояние вопроса: открыт, ответов: 0.


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

Всего сообщений: 5; последнее сообщение — 17 октября 2007, 14:08; участников в обсуждении: 2.
Feniks

Feniks (статус: Бакалавр), 16 октября 2007, 16:09 [#1]:

Уточните свой вопрос. О каких база данных идет речь ? Или может Вы имеете в виду список драйверов БД в ODBC ?
ss

ss (статус: Посетитель), 16 октября 2007, 16:40 [#2]:

INFORMIX
НА ПК УСТАНОВЛЕНЫ: SERVER STUDIO FOR UNFORMIX,
IBM INFORMIX CONNECT
Feniks

Feniks (статус: Бакалавр), 17 октября 2007, 13:44 [#3]:

Установка ODBC.

Автор: Johannes M. Becher (CODATA GmbH Krefeld, Germany)

...если вам нужно знать, что творится за сценой, нужно просто взглянуть на эти два файла, оба человеко-читаемых, оба расположенных в вашей директории Windows.

A) ODBCINST.INI - описание всех установленных драйверов ODBC

Секция [ODBC Drivers] в каждой строчке описывает один драйвер. Здесь прописано формальное имя драйвера, использующегося позже для идентификации драйвера.

Каждый драйвер, как вы увидите позже, имеет собственную секцию, к примеру, вот секция для Watcom :

{1} [Watcom SQL 4.0]
{2} Driver=D:WIN31SYSTEMWOD40W.DLL
{3} Setup=D:WIN31SYSTEMWOD40W.DLL
Строка 1 содержит имя секции драйвера из [ODBC Drivers].

Строка 2 сообщает Windows о том, где следует искать DLL, содержащую методы, применяемые ODBC для доступа к базам данных Watcom.

Строка 3 сообщает Windows о том, где следует искать DLL, содержащую методы, применяемые ODBC для административных целей.

Все, что имеется в файле ODBCINST.INI - теперь содержится в файле #2 (таком же легком для изучения):

B) ODBC.INI - описание всех ваших баз данных (источников данных, говоря языком ODBC)

Секция [ODBC Data Sources] в каждой строчке описывает одну базу данных; формат:

{описание базы данных} = {описание драйвера из ODBCINST.INI}

Данный файл сообщает ODBC, к каким базам данных вы хотите иметь доступ и какой драйвер для каждой конкретной базы данных для этого необходим.

Каждая база данных, как вы увидите позже, имеет собственную секцию, к примеру, вот секция PB Demo:

{1} [Powersoft Demo DB=Watcom SQL 4.0]
{2} DatabaseFile=E:PB4EXAMPLESPSDEMO.DB
{3} DatabaseName=PSDEMODB
{4} UID=dba
{5} PWD=sql
{6} Driver=D:WIN31SYSTEMWOD40W.DLL
{7} Start=D:WSQL40DBSTARTW -d -c512

Строка 1 содержит ссылку на секцию [ODBC Data Sources].

Строка 2 содержит физический путь к файлу базы данных.

Строка 3 - описание, только для вашего чтения.

Строка 4 - User ID, которое Watcom применяет для установления связи.

Строка 5 - Пароль, используемый для установления соединения.

- Это не очень секретно; если вы оставите эту строку пустой, Watcom сам спросит пароль при получении доступа к базе данных.

Строка 6 содержит имя драйвера (снова - сравните с OBDCINST.INI)

Строка 7 содержит имя движка базы данных для ее запуска (это необходимо лишь для баз данных SQL, например, в версии Client / Server).

Все это может быть отредактировано как вручную (в любом текстовом редакторе), так и в ODBCADM (ODBC Administration). Что касается меня лично, то я более не использую ODBCADM; я ощущаю себя гораздо лучше, если имею больший контроль над INI-файлами, редактируя строки вручную.

Структура секций в файле ODBC.INI может отличаться для разных драйверов, поэтому вам необходимо научиться ориентироваться по ключевым словам, описанным выше.

Предупреждение: весь опубликованный мною материал получен путем моих собственных исследований, вследствие чего я не могу гарантировать его достоверность. По крайней мере я успешно использую его для получения доступа к ODBC уже более года.

©Drkb::02678
Feniks

Feniks (статус: Бакалавр), 17 октября 2007, 13:52 [#4]:

Получаем имена ODBC-источников

uses Registry;

procedure TForm1.GetDataSourceNames(System: Boolean);
var
reg: TRegistry;
begin
ListBox1.Items.Clear;
reg := TRegistry.Create;
try
if System then
reg.RootKey := HKEY_LOCAL_MACHINE
else
reg.RootKey := HKEY_CURRENT_USER;

if reg.OpenKey('SoftwareODBCODBC.INIODBC Data Sources', False) then
begin
reg.GetValueNames(ListBox1.Items);
end;

finally
reg.CloseKey;
FreeAndNil(reg);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
//Системные DSNs
GetDataSourceNames(True);
//Пользовательские DSNs
GetDataSourceNames(False);
end;
Feniks

Feniks (статус: Бакалавр), 17 октября 2007, 14:08 [#5]:

Как создать новый DSN из программы?

Пример 1

type
{©Drkb v.3(2007): www.drkb.ru, 
®Vit (Vitaly Nevzorov) - nevzorov@yahoo.com}
 
TSQLConfigDataSource =
   function(hwndParent: Integer;
   fRequest: Integer;
   lpszDriverString: string;
   lpszAttributes: string): Smallint; stdcall;
 
function SQLConfigDataSource(hwndParent: Integer; fRequest: Integer;
lpszDriverString: string; lpszAttributes: string): Integer; stdcall;
var
func: TSQLConfigDataSource;
OdbccpHMODULE: HMODULE;
 
begin
OdbccpHMODULE := LoadLibrary('c:WINDOWSSYSTEModbccp32.dll');
if OdbccpHMODULE = 0 then raise Exception.Create(SysErrorMessage(GetLastError));
func := GetProcAddress(OdbccpHMODULE, PChar('SQLConfigDataSource'));
if @func = nil then
   raise Exception.Create('Error Getting adress for SQLConfigDataSource' +
     SysErrorMessage(GetLastError));
Result := func(hwndParent, fRequest, lpszDriverString, lpszAttributes);
FreeLibrary(OdbccpHMODULE);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
if SQLConfigDataSource(0, 1, 'Microsoft Excel Driver (*.xls)', Format('DSN=%s;DBQ=%s;DriverID=790', ['MyDSNName', 'c: 
emp  emp.xls'])) <> 1 then
   ShowMessage('Cannot create ODBC alias');
end;
PS. Ecли вы собираетесь работать с этим DSN через BDE, то надо закрыть и открыть Session, иначе он не будет доступен.

©Drkb::02675
Автор: Vit (www.delphist.com, www.drkb.ru, www.unihighlighter.com, www.nevzorov.org)
Взято с Vingrad.ru http://forum.vingrad.ru


Пример 2

Автор: Olivio Moura

Этот пример показывает один из способов создания ODBC драйвера для доступа к файлу Access MDB. Подобная операция применима к большинству файлов баз данных. Естевственно, Вам потребуется MDB файл, для того, чтобы связать его с DSN.

const 
ODBC_ADD_DSN        = 1;    // Добавляем источник данных 
ODBC_CONFIG_DSN     = 2;    // Конфигурируем (редактируем) источник данных 
ODBC_REMOVE_DSN     = 3;    // Удаляем источник данных 
ODBC_ADD_SYS_DSN    = 4;    // Добавляем системный DSN 
ODBC_CONFIG_SYS_DSN = 5;    // Конфигурируем системный DSN 
ODBC_REMOVE_SYS_DSN = 6;    // удаляем системный DSN 
 
type 
TSQLConfigDataSource = function( hwndParent: HWND; 
                                  fRequest: WORD; 
                                  lpszDriver: LPCSTR; 
                                  lpszAttributes: LPCSTR ) : BOOL; stdcall; 
 
 
procedure Form1.FormCreate(Sender: TObject); 
var 
pFn: TSQLConfigDataSource; 
hLib: LongWord; 
strDriver: string; 
strHome: string; 
strAttr: string; 
strFile: string; 
fResult: BOOL; 
ModName: array[0..MAX_PATH] of Char; 
srInfo : TSearchRec; 
begin 
Windows.GetModuleFileName( HInstance, ModName, SizeOf(ModName) ); 
strHome := ModName; 
while ( strHome[length(strHome)] <> '\' ) do 
   Delete( strHome, length(strHome), 1 ); 
strFile := strHome + 'TestData.MDB';   // Тестовая база данных (Axes = Access) 
hLib := LoadLibrary( 'ODBCCP32' );    // загружаем библиотеку (путь по умолчанию) 
if( hLib <> NULL ) then 
begin 
   @pFn := GetProcAddress( hLib, 'SQLConfigDataSource' ); 
   if( @pFn <> nil ) then 
   begin 
     // начинаем создание DSN 
     strDriver := 'Microsoft Access Driver (*.mdb)'; 
     strAttr := Format( 'DSN=TestDSN'+#0+ 
                        'DBQ=%s'+#0+ 
                        'Exclusive=1'+#0+ 
                        'Description=Test Data'+#0+#0, 
                        [strFile] ); 
     fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] ); 
     if( fResult = false ) then ShowMessage( 'Ошибка создания DSN (Datasource) !' ); 
 
     // test/create MDB file associated with DSN 
     if( FindFirst( strFile, 0, srInfo ) <> 0 ) then 
     begin 
       strDriver := 'Microsoft Access Driver (*.mdb)'; 
       strAttr := Format( 'DSN=TestDSN'+#0+ 
                          'DBQ=%s'+#0+ 
                          'Exclusive=1'+#0+ 
                          'Description=Test Data'+#0+ 
                          'CREATE_DB="%s"'#0+#0, 
                          [strFile,strFile] ); 
       fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] ); 
       if( fResult = false ) then ShowMessage( 'Ошибка создания MDB (файла базы данных) !' ); 
     end; 
     FindClose( srInfo ); 
 
     end; 
 
   FreeLibrary( hLib ); 
end 
else 
begin 
   ShowMessage( 'Невозможно загрузить ODBCCP32.DLL' ); 
end; 
end;

©Drkb::02676
Взято из http://forum.sources.ru

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

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