Como gerar Varios ODBC's automaticamente
08/04/2011
0
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
Posts
11/04/2011
Pedro Silva
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.
13/04/2011
Pedro Silva
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.
13/04/2011
Pedro Silva
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.
Clique aqui para fazer login e interagir na Comunidade :)