Tive que criar uma conexão ODBC de forma automática pra facilitar a vida dos usuários e sofri bastante pra entender alguns códigos em outras linguagens.
Depois que migrei tudo pro C/C++ resolvi postar a solução aqui.
void CreateODBCDriver(void)
{
typedef int WINAPI (*TSQLConfigDataSource)(HINSTANCE HWND, unsigned int fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes);
#define ODBC_ADD_DSN 1 // Adiciona uma fonte de dados (data source)
#define ODBC_CONFIG_DSN 2 // Configura a fonte de dados (data source)
#define ODBC_REMOVE_DSN 3 // Remove a fonte de dados (data source)
#define ODBC_ADD_SYS_DSN 4 // Adiciona um DSN no sistema
#define ODBC_CONFIG_SYS_DSN 5 // Configura o DSN do sistema
#define ODBC_REMOVE_SYS_DSN 6 // Remove o DSN do sistema
TSQLConfigDataSource sqlConfigDataSource;
HANDLE hLib;
bool fResult;
TSearchRec srInfo;
hLib = LoadLibrary("ODBCCP32"); // carregando a DLL
if(hLib != NULL)
{
sqlConfigDataSource = (TSQLConfigDataSource) GetProcAddress(hLib, "SQLConfigDataSource"); // selecionando a função que gerencia as entradas ODBC
if (sqlConfigDataSource != NULL)
{
// cada argumento passado em lpszAttributes deve terminar com \x0
// se hoyver necessidade ou interesse o caminho do banco pode ser informado junto com o nome em DBQ e CREATE_DBQ.
// Exemplo: DBQ=c:\\app\\db\\Database.mdb\x0
fResult = sqlConfigDataSource(NULL, ODBC_ADD_DSN ,"Microsoft Access Driver (*.mdb)", "DSN=NOME_FONTE\x0 DBQ=Database.mdb\x0 Exclusive=1\x0 Description=Criacao fonte ODBC\x0");
if( fResult == false )
{
// se não conseguir criar o registro por ausencia do banco, tentar registrar ao mesmo tempo que cria o .mdb
if(FindFirst("DataBase.mdb", 0, srInfo ) != 0)
{
fResult = sqlConfigDataSource(NULL, ODBC_ADD_DSN ,"Microsoft Access Driver (*.mdb)", "DSN=NOME_FONTE\x0 DBQ=Database.mdb\x0 Exclusive=1\x0 Description=Criacao fonte ODBC\x0 CREATE_DB=Database.mdb\x0");
if (fResult == false)
ShowMessage( "Falha ao tentar criar o banco de dados");
}
FindClose( srInfo );
}
}
FreeLibrary( hLib );
if (fResult)
ShowMessage( "Banco de dados criado." );
}
else
ShowMessage( "o sistema não pode carregar a biblioteca ODBCCP32.DLL" );
}
Pergunta
CPP
Olá galera,
Tive que criar uma conexão ODBC de forma automática pra facilitar a vida dos usuários e sofri bastante pra entender alguns códigos em outras linguagens.
Depois que migrei tudo pro C/C++ resolvi postar a solução aqui.
Espero que ajude.
(Testado no CBUILDER 5)
Documentação da Microsoft: http://support.microsoft.com/kb/142216/pt-br
Editado por CPPLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.