RE: [firebase-br] Criação de DSN - ODBC

Rafael Cabral rafael.cabral em icraft.com.br
Sáb Jun 18 18:20:22 -03 2005


Oi Otto,

O fato de ter respondido a mensagem e me mostrado algumas coisas já foi o
suficiente. Não tem problema não, valeu mesmo ;). Aliás já consegui resolver
o problema.

Temos uma aplicação aqui na empresa que realiza uma conexão a um banco de
dados Firebird através de ODBC. O que estava tentando fazer é criar uma
rotina de instalação em que:

1) Instala o aplicativo na máquina através do Install Shield.
2) Realiza a instalação do driver ODBC do Firebird.
3) Abre para o usuário uma tela perguntando a localização do fdb.
4) Instala o Firebird Server caso o mesmo não esteja instalado na máquina.
Se tratando de uma aplicação stand-alone.

A minha maior dificuldade estava em criar o DSN. No C tem uma função chamada
SQLConfigDataSources que realiza as configurações de um DSN. O problema é
que não estava conseguindo criar o DSN, a função estava retornando falso
toda hora. Então com um pouco mais de calma consegui pensar e resolver.
Agora quero dividir com o pessoal da lista o resultado das minhas pesquisas.

Embaixo o código em C para realizar a criação do System DSN. Que no caso, é
a primeira opção do documento que vc achou.

#include <stdio.h>
#include "sql.h"
#include <odbcinst.h>

void criarDSN()
{
	char _driver[30];
	char _atributos[1000];
	char *_pattr;

	RETCODE retcode;

	//Atribui driver
	strcpy(_driver, "Firebird/InterBase(r) driver");

	//Atribui os parâmetros necessários para a criação do DSN -> Banco,
Charset, Dialeto, etc...
	strcpy(_atributos,
"DSN=CONNBANCO;AutoQuotedIdentifier=Y;CharacterSet=WIN1252;Client=;DbName=C:
\\Firebird\\Banco.fdb;Dialect=3;JdbcDriver=IscDbc;NoWait=Y;QuotedIdentifier=
Y;ReadOnly=N;SensitiveIdentifier=Y;;");
	_pattr = _atributos;

	//Transforma os ; em \0 (caracter de fim de string). Apenas dessa maneira
que o DSN é criado.
	while (*_pattr)
	{
		if (*_pattr == ';')
		{
			*_pattr = '\0';
			++_pattr;
		}
		++_pattr;
	}

	//Efetua a criação do DSN
	retcode = SQLConfigDataSource(NULL, ODBC_ADD_SYS_DSN, _driver, _atributos);

	if (retcode)
	{
		printf("Funcionou");
	}
	else	//Caso queiram mostrar o erro, tem uma função chamada
SQLInstallerError onde se obtém o código e o texto do erro.
	{
		printf("Ocorreu um erro ao criar o DSN");
	}
}

[]s,

Rafael Cabral

-----Original Message-----
From: Otto [mailto:ottofuch em terra.com.br]
Sent: sábado, 18 de junho de 2005 17:18
To: rafael.cabral em icraft.com.br; FireBase
Subject: Re: [firebase-br] Criação de DSN - ODBC


Ufa, primeiro tive que me lembrar o que é DSN. Em
http://www.webopedia.com/TERM/D/DSN.html
encontrei a definição:
"DSN
Short for Data Source Name. Data Source Name provides connectivity to a
database through an ODBC driver. The DSN contains database name, directory,
database driver, UserID, password, and other information. Once you create a
DSN for a particular database, you can use the DSN in an application to call
information from the database.
There are three types of DSNs:
(1) System DSN -- can be used by anyone who has access to the machine. DSN
info is stored in the registry.
(2) User DSN -- created for a specific user. Also stored in the registry.
(3) File DSN -- DSN info is stored in a text file with .DSN extension.

DSN is often used by Active Server Pages (ASP) and Visual Basic programs
when a query to a database is necessary to retrieve information.

There is also what is known as a "DSN-less connection." Instead of using a
DSN to connect to a database, the developer specifies the necessary
information right in the application. With a DSN-less connection the
developer is free to use connection standards other than ODBC, such as OLE
DB."

Por acaso, em
http://homepages.borland.com/ccalvert/TechPapers/Delphi/ADOBasics/ADOBasics.
html
encontrei o artigo
Accessing Databases Using ADO and Delphi
tendo como exemplo um arquivo clientes.dbf. Alguém procurou por acesser
arquivos *.dbf recentemente.

Conclui que você está procurando uma solução para
(3) File DSN -- DSN info is stored in a text file with .DSN extension.

Só não encontrei a maneira de fazer isto.
{:-(
Otto




----- Original Message -----
From: "Rafael Cabral" <rafael.cabral em icraft.com.br>
To: <lista em firebase.com.br>
Sent: Saturday, June 18, 2005 3:14 PM
Subject: [firebase-br] Criação de DSN - ODBC


Pessoal,

Alguém já conseguiu criar um DSN do driver ODBC do Firebird via código
usando Delphi ou C++?

[]s,

Rafael Cabral
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa






Mais detalhes sobre a lista de discussão lista