Fonte de dados: configurando programaticamente uma fonte de dados ODBC
Este tópico explica como você pode configurar nomes de fonte de dados ODBC (Open Database Connectivity) programaticamente. Isso oferece flexibilidade para acessar dados sem forçar o usuário a usar explicitamente o Administrador ODBC ou outros programas para especificar os nomes das fontes de dados.
Geralmente, um usuário executa o Administrador ODBC para criar uma fonte de dados se o sistema de gerenciamento de banco de dados (DBMS) associado suportar essa operação.
Ao criar uma fonte de dados ODBC do Microsoft Access por meio do Administrador ODBC, você tem duas opções: selecionar um arquivo .mdb existente ou criar um novo arquivo .mdb. Não há nenhuma maneira programática de criar o arquivo .mdb de seu aplicativo MFC ODBC. Portanto, se seu aplicativo exigir que você coloque dados em uma fonte de dados do Microsoft Access (arquivo .mdb), você provavelmente desejará ter um arquivo .mdb vazio que possa ser usado ou copiado sempre que precisar.
No entanto, muitos DBMSs permitem a criação de fontes de dados programáticas. Algumas fontes de dados mantêm uma especificação de diretório para bancos de dados. Ou seja, um diretório é a fonte de dados e cada tabela dentro da fonte de dados é armazenada em um arquivo separado (no caso do dBASE, cada tabela é um arquivo .dbf). Drivers para outros bancos de dados ODBC, como Microsoft Access e SQL Server, exigem que alguns critérios específicos sejam atendidos antes que uma fonte de dados possa ser estabelecida. Por exemplo, ao usar o driver ODBC do SQL Server, você precisa ter estabelecido um computador SQL Server.
Exemplo SQLConfigDataSource
O exemplo a seguir usa a função de API ODBC ::SQLConfigDataSource
para criar uma nova fonte de dados do Excel chamada Nova fonte de dados do Excel:
SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Excel Files (*.xls)",
"DSN=New Excel Data Source\0"
"Description=New Excel Data Source\0"
"FileType=Excel\0"
"DataDirectory=C:\\EXCELDIR\0"
"MaxScanRows=20\0");
Observe que a fonte de dados é, na verdade, um diretório (C:\EXCELDIR); este diretório deve existir. O driver Excel usa diretórios como suas fontes de dados e arquivos como tabelas individuais (uma tabela por arquivo .xls).
Para obter mais informações sobre como criar tabelas, consulte Fonte de dados: criando programaticamente uma tabela em uma fonte de dados ODBC.
As informações a seguir discutem os parâmetros que precisam ser passados para a função ::SQLConfigDataSource
da API ODBC. Para usar ::SQLConfigDataSource
, você deve incluir o arquivo de cabeçalho Odbcinst.h e usar a biblioteca de importação Odbcinst.lib. Além disso, Odbccp32.dll deve estar no caminho no tempo de execução (ou Odbcinst.dll para 16 bits).
Você pode criar um nome de fonte de dados ODBC usando o Administrador ODBC ou um utilitário semelhante. No entanto, às vezes, é desejável criar um nome de fonte de dados diretamente do aplicativo para obter acesso sem exigir que o usuário execute um utilitário diferente.
O Administrador ODBC (normalmente instalado no Painel de Controle) cria uma nova fonte de dados colocando entradas no Registro do Windows (ou, para 16 bits, no arquivo Odbc.ini). O Gerenciador de Driver ODBC consulta esse arquivo para obter as informações necessárias sobre a fonte de dados. É importante saber quais informações precisam ser colocadas no Registro porque você precisa fornecê-las com a chamada para ::SQLConfigDataSource
.
Embora essas informações possam ser gravadas diretamente no Registro sem usar ::SQLConfigDataSource
, qualquer aplicativo que o faça depende da técnica atual que o Gerenciador de Driver usa para manter seus dados. Se uma revisão posterior para o Gerenciador de Drivers ODBC implementar a manutenção de registros sobre fontes de dados de uma maneira diferente, qualquer aplicativo que usar essa técnica será interrompido. Geralmente, é recomendável usar uma função de API quando for fornecida uma. Por exemplo, seu código será portátil de 16 bits para 32 bits se você usar a função ::SQLConfigDataSource
, pois a função grava corretamente no arquivo Odbc.ini ou no Registro.
Parâmetros SQLConfigDataSource
O seguinte explica os parâmetros da função ::SQLConfigDataSource
. Muitas das informações são extraídas da referência do programador da API ODBC fornecida com o Visual C++ versão 1.5 e posterior.
Protótipo da função
BOOL SQLConfigDataSource(HWND hwndParent,UINT fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes);
Comentários
Parâmetros e uso
hwndParent
A janela especificada como o proprietário de qualquer caixa de diálogo que o Gerenciador de Drivers ODBC, ou o driver ODBC específico, cria para obter informações adicionais do usuário sobre a nova fonte de dados. Caso o parâmetro lpszAttributes não forneça informações suficientes, uma caixa de diálogo será exibida. O parâmetro hwndParent poderá ser NULL.
lpszDriver
A descrição do driver. Este é o nome apresentado aos usuários em vez do nome do driver físico (a DLL).
lpszAttributes
Lista de atributos no formulário "keyname=value". Essas cadeias de caracteres são separadas por terminadores nulos com dois terminadores nulos consecutivos no final da lista. Esses atributos são principalmente entradas específicas do driver padrão, que entram no Registro da nova fonte de dados. Uma chave importante que não é mencionada na referência da API ODBC para essa função é "DSN" ("nome da fonte de dados"), que especifica o nome da nova fonte de dados. As entradas restantes são específicas para o driver para a nova fonte de dados. Muitas vezes, não é necessário fornecer todas as entradas porque o driver pode solicitar ao usuário caixas de diálogo os novos valores. (Para isso acontecer, defina hwndParent como NULL). Talvez você queira fornecer valores padrão explicitamente para que não seja solicitado ao usuário.
Para determinar a descrição de um driver para o parâmetro lpszDriver usando o Administrador ODBC
Execute o administrador ODBC.
Clique em Adicionar.
Isso fornece uma lista de drivers instalados e suas descrições. Use esta descrição como o parâmetro lpszDriver. Observe que você usa toda a descrição, como "Arquivos do Excel (*.xls)", incluindo a extensão de nome de arquivo e parênteses se eles existirem na descrição.
Como alternativa, você pode examinar o Registro (ou, para 16 bits, o arquivo Odbcinst.ini), que contém uma lista de todas as entradas e descrições do driver na chave do Registro "Drivers ODBC" (ou na seção [Drivers ODBC] em Odbcinst.ini).
Uma maneira de localizar os nomes de chave e os valores para o parâmetro lpszAttributes é examinar o arquivo Odbc.ini para uma fonte de dados já configurada (talvez uma configurada pelo Administrador ODBC).
Para localizar nomes de chave e valores para o parâmetro lpszAttributes
Execute o editor do Registro do Windows (ou, para 16 bits, abra o arquivo Odbc.ini).
Localize as informações de fontes de dados ODBC usando um dos seguintes:
Para 32 bits, localize a chave HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources no painel esquerdo.
O painel direito lista as entradas do formulário: "pub: REG_SZ:<nome da fonte de dados>", em que <nome da fonte de dados> é uma fonte de dados que recebeu as configurações desejadas para o driver que você pretende usar. Selecione a fonte de dados desejada, por exemplo, SQL Server. Os itens após a cadeia de caracteres "pub:" são, em ordem, o keyname e o valor a serem usados em seu parâmetro lpszAttributes.
Para 16 bits, localize a seção no arquivo Odbc.ini marcada com [<nome da fonte de dados>].
As linhas que seguem essa linha são do formulário "keyname=value". Essas são exatamente as entradas a serem usadas em seu parâmetro lpszAttributes.
Talvez você também queira examinar a documentação do driver específico que você usará. Você pode encontrar informações úteis na Ajuda online para o driver, que pode ser acessada executando o Administrador ODBC. Para o Windows NT, Windows 3.1 ou Windows 95, esses arquivos de Ajuda geralmente são colocados no diretório WINDOWS\SYSTEM.
Para obter ajuda online para o driver ODBC
Execute o administrador ODBC.
Clique em Adicionar.
Selecione o nome do driver.
Clique em OK.
Quando o Administrador de ODBC exibir as informações para criar uma nova fonte de dados para esse driver específico, clique em Ajuda. Isso abre o arquivo de Ajuda para esse driver específico, que geralmente contém informações importantes sobre o uso do driver.