Array
(
)

Como gerar Varios ODBC's automaticamente

Pedro Silva
   - 08 abr 2011

Boa Tarde Pessoal,
Busquei muito no forum antes de postar porem não achei nada exato, e preciso da ajuda de vocês,
Tenho um sistema Delphi 7 com base de dados SQL Server 2000, porem toda a vez que eu instalo o servidor do sistema ou as estações tenho o incomodo de ter que Adicionar as fontes ODBC's onde sigo o mesmo fluxo: Painel de controle > Ferramentas administrativas > Fontes de dados (ODBC) > Fonte de dados do usuário e efetuar o registro, pesquisei na web e não encontrei até o momento nenhuma ferramenta ou lógica que fizesse a instalação das ODBC's, pois montei um instalador para o sistema, nele instalamos os programas para a estação e configuramos dll's e por final temos que inserir as fontes para que o sistema possa acessar a base de dados do servidor, gostaria que após as instalações dos programas o instalador mesmo executasse um ".exe" e finalizasse essa configuração. Se alguem tem alguma sugestão? ou Resposta? Por favor!?!?!?!
OBS: As configurações do OBDC são SQL Server > Nome / Servidor > Com Ident e senha > selciona o banco de dados padrão e conclui.Dos dados da configuração eu preciso de 4 registros, o que preciso que seja automático Nomes, Ident / Senha e Banco de dados que sempre será o mesmo e será definido como os nomes, pela programação do script, somente o servidor que tem que ser selecionado, pois pucas vezes não é o Servidor da rede.
Se alguem conseguir me ajudar, fico muito grato,atualmente não entendo muito de delphi somente estou montando o instalador do sistema.

Pedro Silva
   - 11 abr 2011

Boa Tarde,
Seguindo com informações que coletei até o momento caso facilite na ajuda a solucionar o problema,
Cada ODBC tem um registro no sistema, com todas a maioria de suas informações menos a sua senha, no Regedit ela vem em "HKCU > Software > ODBC > ODBC.INI > ..." porem efetui um teste, ao invés de geralo diretamente com o sistema de ferramentas do windows, só gerei alguns comandos pelo compilador da NSIS que gera meu instalador:
  WriteRegStr HKCU "Software\ODBC\ODBC.INI\Teste" "(Padrão)" "(Valor não definido)"  WriteRegStr HKCU "Software\ODBC\ODBC.INI\Teste" "Database" "demonstracao"  WriteRegStr HKCU "Software\ODBC\ODBC.INI\Teste" "Driver" "C:\Windows\system32\SQLSRV32.dll"  WriteRegStr HKCU "Software\ODBC\ODBC.INI\Teste" "LastUser" "sysdba"  WriteRegStr HKCU "Software\ODBC\ODBC.INI\Teste" "Server" "SERVIDOR"
porem no registro ele cria a pasta teste, mas no gerenciador do Banco de dados ela não aparece, se alguem souber uma forma similar a criação destes ODBC's eu fico muito grato,
Muito Obrigado Pela Atenção,Pedro Henrique.

Pedro Silva
   - 13 abr 2011

Finalizando! Consegui a solução parcialmente,
Aqui no Dev Meidia, encontrei um aplicativo para o Delphi que efetua o registro de uma OBDC, porem não consegui alterar o cod para que ele gere uma OBDC com senha e usuario e Alteralo para SQL Server, segue o codigo que puder me ajudar:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Variants;
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('Decis','1','clubedelphi','clubedelphi.MDB','ODBCCP32','SQLConfigDataSource','WINDOWS\system32\SQLSRV32.dll');end;
end.

Pedro Silva
   - 13 abr 2011



Citação:

  CreateOdbcDriver('Decis','1','clubedelphi','clubedelphi.MDB','ODBCCP32','SQLConfigDataSource','WINDOWS\system32\SQLSRV32.dll');end;
end.
 

este final está incorreto o certo é:
CreateOdbcDriver('Decis','1','clubedelphi','clubedelphi.MDB','ODBCCP32','SQLConfigDataSource','Microsoft Access Drive (*.mdb));
end.