Buscar

Criando drivers odbc através do delphi

Código

Unit Unit1;
  interface
  uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
  type
    TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  var
    Form1: TForm1;

  implementation

  {$R *.DFM}

  procedure CreateODBCDriver(Const   cDSNName,cExclusive,cDescription,cDataBase,cDefaultPath,cConfigSql,cDriver: string);

  type

    TSQLConfigDataSource = function( hwndParent: HWND; fRequest: WORD; lpszDriver: LPCSTR;  lpszAttributes: LPCSTR ): BOOL; stdcall;

  const
    ODBC_ADD_DSN = 1; // Adiciona uma fonte de dados (data source)
    ODBC_CONFIG_DSN = 2; // Configura a fonte de dados (data source)
    ODBC_REMOVE_DSN = 3; // Remove a fonte de dados (data source)
    ODBC_ADD_SYS_DSN = 4; // Adiciona um DSN no sistema
    ODBC_CONFIG_SYS_DSN = 5; // Configura o DSN do sistema
    ODBC_REMOVE_SYS_DSN = 6; // Remove o DSN do sistema
  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 + cDatabase; // Teste com access (Axes = Access)
      hLib := LoadLibrary( pChar(cDefaultPath) ); // carregando para o diretório padrão
      if( hLib <> NULL ) then
      begin
        @pFn := GetProcAddress( hLib, pChar(cConfigSql) );
        if( @pFn <> nil ) then
        begin
          strDriver := cDriver;
          strAttr := Format( 'DSN=%s'+#0+  'DBQ=%s'+#0+'Exclusive=%s'+#0+'Description=%s'+#0+#0,[cDSNName,strFile,cExclusive,cDescription] );
          fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] );
          if( fResult = false ) then
            ShowMessage( 'Falha ao tentar criar o DSN (Data source).' );
          if( FindFirst( strFile, 0, srInfo ) <> 0 ) then
          begin
            strDriver := cDriver;
            strAttr := Format( 'DSN=%s'+#0+'DBQ=%s'+#0+'Exclusive=%s'+#0+'Description= %s'+#0+#0+'CREATE_DB="%s"'#0+#0, [cDSNName,strFile,cExclusive,cDescription,strFile]);
            fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] );
            if( fResult = false ) then
              ShowMessage( 'Falha ao tentar criar o banco de dados' );
          end;
          FindClose( srInfo );
       end;
       FreeLibrary( hLib );
        if fResult then
          ShowMessage( 'Banco de dados criado.' );
    end
    else
    begin
      ShowMessage( 'o sistema não pode carregar a biblioteca ODBCCP32.DLL' );
    end;
  end;

  procedure TForm1.Button1Click(Sender: TObject);
  begin
    CreateOdbcDriver('Cludelphi DSN','1','clubedelphi','clubedelphi.MDB','ODBCCP32','SQLConfigDataSource','Microsoft Access Driver (*.mdb)');
  end;

  end.

{  Concluções: Com esta dica você poderá criar drivers ODBC em tempo de execução, softwares de instalação, economizando tempo e deixando suas aplicações mais dinâmicas. }
                       

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Banco de dados
Adicionada dia: 17/11/03
Por: Miguel Machado
Visualizada: 5922 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009