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

Previous  Top  Next

    
 

 

 

Code:

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:\WINDOWS\SYSTEM\odbccp32.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:\temp\temp.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

 

 


 

Автор: Olivio Moura

 

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

Code:

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