| 
| 
 | Вопрос # 981/ вопрос открыт / | 
 |  Здравствуйте, эксперты!как с помощью реестра можно вывести список баз данных, доступных на данном компьютере?
 
|  |   Вопрос задал: ss (статус: Посетитель)Вопрос отправлен: 16 октября 2007, 15:59
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 17 октября 2007, 14:08; участников в обсуждении: 2. 
|   | Feniks (статус: Бакалавр), 16 октября 2007, 16:09 [#1]:Уточните свой вопрос. О каких база данных идет речь ? Или может Вы имеете в виду список драйверов БД в ODBC ? |  
|   | ss (статус: Посетитель), 16 октября 2007, 16:40 [#2]:INFORMIX НА ПК УСТАНОВЛЕНЫ: SERVER STUDIO FOR UNFORMIX,
 IBM INFORMIX CONNECT
 |  
|   | 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
  B4EXAMPLESPSDEMO.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 (статус: Бакалавр), 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 (статус: Бакалавр), 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
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |