15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Создаём SystemDSN при помощи Delphi 5.

Автор: Olivio Moura

Совместимость: Delphi 5 (или выше)

Этот пример показывает один из способов создания 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;