28/10/2010

Usando Firebird no RealBasic

Dadas às necessidades de resolver alguns problemas, precisei ler bancos de dados no Firebird. Eu suspeitava que não fosse uma tarefa tão simples, e para completar, ainda esbarrei na vaga documentação on-line.


Em virtude do apelo de uma pessoa que prezo muito, não irei expressar meu desafeto pelo Firebird neste artigo, apesar de ter esta intenção.


Como não o estudei a fundo, e também não pretendo em função de algumas das características basicas que ele apresenta, tais como a dificuldade de conexão, banco de dados ser apenas um arquivo em disco entre outras. Tratarei apenas de demonstrar como se estabelece uma comunicação com este tipo de banco de dados usando o Realbasic e o plugin ODBC.




Requisitos:


Para começar, suponho que o Firebird já esteja instalado em uma maquina que você tenha acesso (pode ser seu próprio PC ou o servidor da sua empresa que, por algum motivo obscuro optou-se por ele). Eu não irei mencionar criação de banco de dados neste artigo, nem tão pouco as sintax SQL, tendo visto que já fiquei indignado com a falha na minha primeira tentativa (select now() não funciona)

Caso ainda não o tenha instalado, vá em www.firebirdsql.org, lá tem tudo que você precisa saber para instalá-lo.


Em segundo lugar, você precisa do drive ODBC especifico para ele. O qual pode ser encontrado em firebirdsql ODBC. Baixe e instale.


Em terceiro e tão importante quanto, seu RB deve possuir o plugin ODBC. O qual já deve existir na pasta ...\Extras\Database Plugins\ODBC aonde está instalado o RB. E se ainda não estiver na pasta ...\Plugins, é so copialo e reiniciar o rb. (Eu sei que você já sabe disso, mas tem gente q não sabia!)


Bom... Com esses detalhinhos resolvidos vamos nos conectar.


Temos 3 métodos simples para fazer isso.


- O primeiro e mais fácil é você ir ao Administrador de Fonte de Dados ODBC e criar um DSN.

  • Na guia Fonte de dados de usuários, clique em adicionar, na próxima tela (Criar nova fonte de dados) selecione o drive “Firebird/InterBase(r) driver”, clique em concluir. Na próxima tela (Firebird ODBC Setup), dê um nome ao seu DSN (ex: fb_test), depois, localize o banco de dados, que deve ser um fdb ou um gdb. Preencha o Database Accounte com seu login e depois Password (o padrão é SYSDBA e masterkey) (É um saco escrever manual!)


Vamos a diante. Agora no Realbasic:

Dim db As New ODBCDatabase //Instanciamos o objeto ODBC

Dim sDSN() as String //String para conter os parâmetros

//é assim q eu uso, pois Array são sempre mais rápidas q concatenação,

// mas você pode fazer diferente.


sDSN.Append "DSN= fb_test "

//Local do seu banco de dados

sDSN.Append "Dbname= C:\ Endereço_do_banco\banco_de_dados.GDB"


db.DataSource = Join(sDSN,";") //Preciso falar o que o join faz?


if db.connect Ten

MsgBox “Conexão bem sucedida!”

Else

MsgBox “Não foi desta vez!” + EndOfLine + db.ErrorMessage

End if


- A próxima conexão não fará uso de um DSN, o que pode facilitar a distribuição dos programas(e também não irá criar um DSN automaticamente para você)


Dim db As New ODBCDatabase //Instanciamos o objeto ODBC

Dim sDSN() as String //String para conter os parâmetros


//Local do seu banco de dados

sDSN.Append "Dbname= C:\Endereço_do_banco\banco_de_dados.GDB"

//O Nome do drive ODBC que você instalou

sDSN.Append "Driver=Firebird/InterBase(r) driver"

sDSN.Append "UID=SYSDBA" //Usuário

sDSN.Append "PWD=masterkey" //A senha(vc tb pode mandar em MD5 tambem)


db.DataSource = Join(sDSN,";")


if db.connect Ten

MsgBox “Conexão bem sucedida!”

Else

MsgBox “Não foi desta vez!” + EndOfLine + db.ErrorMessage

End if


- Por ultimo, vamos nus conectar remotamente ao banco de dados (é... isso é possível sim). Para isso na maquina cliente deverá ter o drive ODBC instalado. Mas, não podemos esquecer que sempre deixam algo de fora. Tem uma Dll de nome fbclient.dll que está na pasta system32 do servidor e deve ser copiada para o system32 do cliente (aproposito eu estou usando o windows)


Ficano do resultado assim:


Dim db As New ODBCDatabase //Instanciamos o objeto ODBC

Dim sDSN() as String //String para conter os parâmetros


sDSN.Append "Driver=Firebird/InterBase(r) driver"

sDSN.Append "Dbname=192.168.0.100:/Endereço_do_banco/banco_de_dados.GDB"

sDSN.Append "port=3050"

sDSN.Append "protocol=TCPIP"

sDSN.Append "CHARSET=NONE"

sDSN.Append "PWD=masterkey"

sDSN.Append "UID=SYSDBA"


db.DataSource = Join(sDSN,";")


if db.connect Ten

MsgBox “Conexão bem sucedida!”

Else

MsgBox “Não foi desta vez!” + EndOfLine + db.ErrorMessage

End if

Agora que você já se conectou ao Firebird, vamos abrir umas tabelas.


Dim rs As RecordSet


rs = db.SQLSelect("SELECT * FROM TB_VENDAS")

Só !

Eu adoro estas poucas linhas do RealBasic.


Mas já que são poucas. Veja também como listar todas as tabelas do banco de dados:


Dim a As String

r = db.TableSchema


Do until r.EOF


for n as integer = 1 to r.Fieldcount

a = a + r.IdxField( n ).Value + " >-> "

next

a = a + EndOfLine

r.MoveNext

loop


EditField1.Text = a

Por hoje é tudo pe pe ssoal!