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!)
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!