Clipper On Line • Ver Tópico - Iniciante xHarbour - Como acessar .Fdb .Gdb
Página 1 de 6

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 11 Dez 2012 11:48
por thekey
Ola pessoal,

Sou velho em clipper e bebê em xharbour, Preciso de uma informação muito básica, no intuito de simplesmente consultar um arquivo.fdb.

Já consegui instalar minha pasta c:\xharbour e consegui configurar um .bat para compilação.
Meu problema é:

Preciso de um exemplo de como acessar e consultar um banco .FDB (firebird).

Preciso antes deste exemplo, instruções de libs necessarias para este acesso e quais e como acessar os comandos de coneccao.

Como fica o prg no incio ? uso #include ? quais ? a compilacao é diferente para acessar Sgdb´s ?

Mas por favor o exemplo e explicacao mais simples enxuta e possivel, pois como sabemos que está chegando agora, se depara com muitas novidades comparando com nosso clipper 5.3 dos velhos tempos.

Abracos.
thekey.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 11 Dez 2012 19:11
por Wanderlei
Olá,
Na pasta do xHarbour tem uma contrib do Rodrigo Moreno que mostra como utilizar o Firebird nativo, mas vc pode utilizar a lib SQLRDD ou SQLLIB para este acesso, a vantagem é que vc não muda nada na maneira de usar os arquivo só a conexão que é diverente mas nada complicado.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 12 Dez 2012 08:08
por thekey
Ok wanderlei, obrigado pela pre-disposicao em me ajudar.

1-Onde pego esta contrib? Nao tenho na minha pasta do xharbour.
2-Se eu for usar as libs que vc falou, como faco para inclui-las na compilacao ?

Thekey.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 12 Dez 2012 10:38
por jelias
Amigo,

thekey escreveu:1-Onde pego esta contrib? Nao tenho na minha pasta do xharbour.

Faz parte do pacote xHarbour.

thekey escreveu:2-Se eu for usar as libs que vc falou, como faco para inclui-las na compilacao ?

Gostaria de ressaltar que: SQLRDD é uma lib comercial, ou seja precisa adiquirir a solução. SQLLIB eu acho que é free somente para Mysql. Existe o Mediator (free) somente para uso com Mysql, eu nunca usei mais vários amigos aqui usam em produção e pode-se constatar em seus relatos que funciona sem problemas.
- Aqui você encotra informações sobre a SQLRDD http://www.xharbour.com.br/sqlrdd.html
- Neste outro sobre a SQLLIB http://www.vailton.com.br/
- Sobre o Mediator pode-se encontrar em http://www.otc.pl/index.asp?s=76&l=2
E no link abaixo é um post antigo do colega Dudu_xBase que contribui na época disponibilizando sua experiencia com Mediator
[url]viewtopic.php?f=43&t=3566&hilit=mediator[/url]

Um ponto muito importante é conhecer bem as opções já no começo antes de escolher as ferramentas, lib's, etc. Como está no início do processo, gaste tem pesquisando, conversando com colegas aqui do fórum, verá que o nível que conhecimento aqui supreende, temos amigos "escovadores de bit's".
Vamos tentar traçar um caminho: Gostaria de ressaltar que não quero influenciar o amigo, apenas apresentar minha opnião baseada em minhas esperiências desde que faço parte desta família. Respeito qualquer quem não concorde com as informações abaixo.

Harbour / xHarbor
Hoje eu tenho acompanho os dois projetos. É claro para mim que o Harbour está em franca evolução e apresenta ser um projeto mais maduro e polido. Entretanto, ambos são projetos estáveis.

Compiladores BCC / Mingw, MSVC
Ambos são muito bons, hoje acredito que e o mais rádpido seja MSVC. Eu ainda uso hoje BCC 5.8.2

Lib's visuais
HBQT(free): Biblioteca gráfica multiplataforma para Harbour que usa o poder da QT framework que é mantida pela Nokia. Muitos dizem que é o futuro. Porém, tem poucos usuários e ainda está amadurecendo.
HWGUI(free): Também mutiplataforma para Harbour/xHarbour. Eu particularmente gostei muito e estou migrando meus sistemas usando HWGUI. A hwgui tem outro forum no qual os desenvolvedores podem te ajudar, inscreva-se no Yahoo.
http://br.dir.groups.yahoo.com/group/hwguibr/
MINIGUI(free): Tem muitos usuários e é uma ótima opção. Irá encontrar muita coisa sobre ela aqui no fórum. Nunca usei. Também existe outro fórum com muitas informações http://br.groups.yahoo.com/group/miniguibrasil/
FIVEWIN(comercial): Acho que foi uma das primeiras GUI do mercado. Já usei em um pequeno projeto, mais não me adaptei. Fórum http://www.fivewin.com.br/forum/default.asp
Tem outras, porém as apresentadas acima já servem de base para aprendizado.

RDD para acesso banco de dados
SQLRDD(comercial): Trabalha somente com xHarbour. Pode-se acessar vários banco de dados PosgresSQL(free),Mysql(free), Oracle(comercial), Firebird(free), Sqlserver(comercial/free), etc.
SQLLIB(free/Comercial): Trabalha com Harbour/xHarbour. É free para Mysql e pago para outros SGDB's.
MEDIATOR(free/Comercial): É free para Mysql e pago para outros SGDB's.
Todos estes RDD's sobre irá trabalhar com a mesma sintaxe xBase: Ou seja, DBUSEAREA(), SELECT, DBAPPEND(), REPLACE, DELETED(), DBSEEK(). Com poucas mudanças irá conseguir trabalhar com motores SQL.

ODBC Windows
Nunca usei, entretanto muito amigos usam e funciona legal.
Nestes tópicos talvez você encontre a resposta para sua dúvida: http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=12624&p=73085&hilit=odbc#p73085
http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=11289&p=64447&hilit=firebird+xharbour#p64447
http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=9800&hilit=firebird+xharbour
Baixe este exemplo para que possa estudar.
http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=9800&hilit=firebird+ramon
Tem também um ótimo post do Mestre Rochinha: http://www.pctoledo.com.br/forum/viewtopic.php?f=42&t=6772&hilit=acesso+nativo

Acesso nativo
Muda a maneira de programar, você irá usar comandos SQL para acesso ao banco de daddos. SELECT, INSERT, UPDATE.

Espero ter ajudado, e peço desculpa se desviei um pouco o assunto.

Abraços,

Júlio

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 12 Dez 2012 11:23
por thekey
Julio,
Voce é ótimo.

Porem minhas duvidas sao do tamanho da sua resposta; Enorme! rsrsrs.

Em minha inocencia clippeira, preciso contar com sua já comprovada experiencia e aconselhar de forma PRATICA, LEGAL E GRATUITA uma maneira simples de abrir um arquivo .fdb (firebird).

Por exemplo, peço que dentro de sua experiencia me mostre aqui com um exemplo de prg como abrir uma tabela em arquivo .fbd e gravar um campo em uma variavel.

Eu instalei aqui o pacote xharbour (nao comercial, nao buider).

Peço um exemplo inclusive de quais .CH .LIB vou precisar.

Grato.
Abraco.s
Ruy-thekey

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 12 Dez 2012 14:24
por jelias
Amigo,

Se voltar a mensagem acima irá perceber que tem um link onde você pode baixar uma sisteminha de agenda completo em Firebird. Acesso via ODBC.
Neste mesmo exemplo você irá ver todo o processo, inclusão, exclusão, alteração de dados, filtros por faixa de dados. Está tudo no código fonte.
Este sistema pode ser baixado de http://www.pctoledo.com.br/download/agenda.rar

Este empreendimento não será indolor, todavia o resultado será satisfatório!
Se a roda prender, dá um grito que o pessoal ajuda!

Sds,
Júlio.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 13 Dez 2012 13:44
por thekey
Amigão,

Juntando tudo que consegui reunir até agora, estou conseguindo abrir e acessar, até que enfim.
Acredito que tem outros interessados nisto (sempre vai ter); a estes, estou aprendendo aqui e pretendo criar um tema especifico para isto de forma bem simples em um tutorial bem resumido e pratico.
Aguardem eu terminar para postar aqui.

Como eu apanhei para caramba para INICIAR em xharbour ja estou criando um tema chamado:

INICIANTE XHARBOUR - Criando as pastas e bats de compilaçao.

Pra quem estava tão patético como eu para começar.

Abraços e colocarei o tutorial simplificado do acesso firebird neste mesmo topico aguardem !]
Abracos a todos.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 13 Dez 2012 14:19
por jelias
Amigo,

Parabéns. Fico feliz em saber que está conseguindo evoluir!
Sua contribuição será importante para todos.

Sds,
Júlio

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 15 Dez 2012 21:51
por thekey
Jelias e Amigos,

Como prometido, estou postando aqui, de maneira resumida, rápida e pratica de como acessar .FBD .GDB. com Xharbour.

Lógico, para iniciantes.

Como observei a grande dificuldade de encontrar um roteiro direto de como fazer, e visto que minha cabeça ainda é de clippeiro antigo, acredito que o artigo será útil para quem está chegando, pois sei exatamente a dificuldade de um novato (Sou um).

Publiquei o artigo aqui www.girashop.com.br/xharbour

Agradeço de coração a toda esta extraordinária comunidade de ajuda mútua, pelo meu ainda precoce aprendizado.

Abraços Ruy Maurício.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 23 Set 2016 09:36
por Hasse
Bom dia.

Tentando abrir um arquivo "DentalOff.FDB" com o Flamerobin é gerado o erro mostrado no anexo.

Como faço para contornar este problema ?

Obrigado pela atenção.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 23 Set 2016 10:52
por Hasse
Usando o exemplo do Rodrigo Moreno, gera erro -902 na linha de abertura do arquivo "DentalOff.fdb"

db := FBConnect( "DentalOff.fdb", "sysdba", "masterkey" )

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 23 Set 2016 11:19
por fladimir
Desculpe a pergunta q pode parecer obvia, mas muitas vezes esquecemos do óbvio... o Firebird esta instalado em versão compativel com o Banco FDB em questão e o mais importante o Server esta com masterkey e sysdba padrão? pq já peguei casos em q era outra senha devido terem alterado.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 23 Set 2016 11:51
por Hasse
A versão do Firebird que tenho instalado é a 2.5

No caso do usuario e senha eu não sei. Usei o padrão.
O aplicativo é de uma softwarehouse que vende um enlatado que gera este FDB com os dados dos meus pacientes.
Eu desejo ler alguns dados do arquivo, e neste momento é gerado o citado erro.
Já entrei em contato com a empresa e o suporte afirma desconhecer algo neste sentido.
Notei uma extrema má vontade da parte deles.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 23 Set 2016 12:22
por Itamar M. Lins Jr.
Ola!
Precisamos do FDB vazio ou com algo se possível para testarmos aqui.
Eu acesso esses e outros bancos aqui sem problemas usando o SQLMIX.

Saudações,
Itamar M. Lins Jr.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 23 Set 2016 12:51
por Hasse
Infelizmente, vazio eu não tenho. Somente com dados.
O tamanho é de 14 MB
Compactado 2MB.
Segue no Anexo.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 23 Set 2016 13:03
por Itamar M. Lins Jr.
Ola!
Aqui deu esse erro.
SQL Message : -820
wrong or obsolete version

Engine Code    : 335544379
Engine Message :
unsupported on-disk structure for file C:\fontes\DentalOff.FDB; found 32779.10, support <Missing arg #4 - possibly status vector overflow>.<Missing arg #5 - possibly status vector overflow>


Saudações,
Itamar M. Lins Jr.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 23 Set 2016 13:07
por Itamar M. Lins Jr.
Ola!
Pelo que li até agora tem que instalar uma versão mais antiga. 2 ou 2.1

Saudações,
Itamar M. Lins Jr.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 23 Set 2016 16:14
por Hasse
OK. Entendi.

Para instalar uma versão anterior é necessário desinstalar a atual ?

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 25 Set 2016 11:28
por Hasse
Bom dia.

Num Manual do Firebird encontrei uma tabela de erros, com o erro -902:

SQLCODE   GDSCODE       Symbol Message Text
-902     335544721      network_error Unable to complete network request to host "@1"

Realmente parece ser erro de Password.

Nos testes usei as versões 2.5, 2.1 e 2.0. Os resultados sempre foram idênticos.

Se for este o caso, há alguma chance de acessar o banco ????

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 25 Set 2016 11:47
por Hasse
Ao colega Itamar.

O erro -820 que você reportou, neste mesmo manual informa:

SQLCODE  GDSCODE     Symbol               Message Text

-820     335544356   obsolete_metadata    Metadata is obsolete
-820     335544379   wrong_ods            Unsupported on - disk structure for file @1; found @2.@3, support @4.@5
-820     335544437   wrodynver            Wrong DYN version
-820     335544467   high_minor           Minor version too high found @1 expected @2
-820     335544881   need_difference      Difference file name should be set explicitly for database on raw device


Ou seja, dentro do código -820 há várias sub-classes.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 25 Set 2016 13:27
por Itamar M. Lins Jr.
Ola!
Fiz outro teste com xBaseView e me parece que a senha não é "mastekey", ai fica difícil abrir.

Saudações,
Itamar M. Lins Jr.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 25 Set 2016 14:28
por Hasse
Bom dia.

Bem, se fica difícil, paciência.

Fico sem opção. E decepcionado. Fazer o quê !!!!!! Nem sempre a gente pode ganhar.
"Para ganhar é preciso saber perder !!!!!!"

De qualquer forma, agradeço muito mesmo pela atenção.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 26 Set 2016 12:44
por Hasse
Bom dia colegas.

Tenho um outro banco Firebird, que abro normalmente com o Flamerobin, mas não consigo abrir com o aplicativo gerado no xHarbour.

Copiei o PRG do site http://www.w3schools.com/sql/sql_intro.asp, que segue no Anexo.

Ele dá erro de Windows: O programa deixou de funcionar.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 26 Set 2016 13:01
por Itamar M. Lins Jr.
Ola!
xHarbour eu nem sei se funciona...
Tente com o Harbour já postei aqui o acesso etc, via SQLMIX.

cRdd  := RDDSETDEFAULT( "SQLMIX" )
cAttributes:="Server=;Database=127.0.0.1:c:\dados\tabelas.fdb;User=SYSDBA;Password=masterkey;Driver={Firebird/InterBase(r) driver};"
nConn := RDDINFO( RDDI_CONNECT,{"ODBC",cAttributes} )

IF nConn == 0
   hwg_Msginfo( "Não conectado ao servidor: " + str(RDDINFO( RDDI_ERRORNO )) + hb_eol() + RDDINFO( RDDI_ERROR ) )
   RDDSETDEFAULT( cRdd )
   RETURN
ENDIF

DBUSEAREA( .T.,"SQLMIX", "select * from TB_PRODUTOS_BARRAS", "xa" )
index on id TO temp1
DBUSEAREA( .T.,"SQLMIX", "select * from TB_PRODUTOS_ESTOQUE", "xb" )
index on id TO temp2

//...Coloque aqui suas rotinas etc...

RddInfo(RDDI_DISCONNECT)
RDDSETDEFAULT( cRdd )



Veja que não tem nada de mais, tudo muito simples de entender.
Para incluir, alterar. Veja a sintaxe em qualquer lugar da NET.

Saudações,
Itamar M. Lins Jr.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 26 Set 2016 14:42
por janio
Olá,

O Leonardo (Sygecon) disponibilizou um utilitário de exportação para dbf para diversos BD, incluindo o firebird.

Ja tentou com ele?

Ja usei para MySql e Firebird e foi showw!

http://sagierp.com.br/devel/xbase/sql2dbf.rar

Janio

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 26 Set 2016 16:02
por Hasse
Boa tarde Janio.

Eu já havia visto este exemplo, mas ele é todo desenvolvido para HWGUI. Eu não tenho esta LIB instalada, o que não seria problema, mas não sei trabalhar com ela.

Claro, se não houver outra opção, terei que ver se consigo adaptá-la para MiniGui. E, nesta LIB estou mal e mal arranhando.

De qualquer forma, te agradeço a gentileza.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 26 Set 2016 17:21
por Hasse
Ao Janio:
Realmente o exemplo do Leonardo funciona. Por sorte o executável acompanhou o projeto e deu para testar.
Agora é derrubar as barreiras e ver se adapto para MiniGui.

Ao Itamar:
Quem sabe será uma boa opção o SQLMIX.
Inicialmente fiquei encantado com aquele exemplo que utiliza a LIB nativa de conexão com o Firebird (espero que eu tenha entendido corretamente esse detalhe....., mas pode ser que ela seja do Harbour, opção que nem me ocorreu....)
O SQLMIX usa o ODBC como o ADO, correto ? O ADO pareceu-me ter alguns pontos que ainda não funcionam corretamente. Para conseguir fazer funcionar, tive que alterar alguns detalhes no módulo ADOxb.prg.

Vou estudar o SQLMIX e depois ver o que vou fazer, contando com o auxílio dos colegas.

Obrigado.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 26 Set 2016 20:45
por Itamar M. Lins Jr.
Ola!
O SQLMIX usa o ODBC como o ADO

Ola o SQLMIX, não usa ADO. ADO é da M$ só roda no windows. OBDC funciona em muitas plataformas.
ADO é método de conexão da M$ por ela já descontinuado, mas muito utilizado.
O ADO funciona corretamente assim como o SQLMIX.
No xHarbour nada disso é garantido(SQLMIX/ADO), sujeito o pessoal querer te vender o SQLRDD.
O SQLMIX não precisa de nada apenas do Harbour 3.2 ou 3.4 pode testar ai com a Minigui, que tem vários exemplos. Não precisa de lib gráfica nenhuma o ADO a mesma coisa, os dois são uma boa para migrar para SQL (linguagem) o DB depois você escolhe é o menos importante. Entender os conceitos é o pulo do gato, ferramentas gratuitas (boas) não faltam.

Saudações,
Itamar M. Lins Jr.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 26 Set 2016 20:57
por Itamar M. Lins Jr.
Mais uma observação da minha parte.
SQLMIX é universal, ADO (só no windows) porém ADO tem exemplos "as pencas" ai na internet.
SQLMIX traz o resultado em DBF. Uma mão na roda para nós! ADO tem que criar algo similar.
SQLMIX usamos append, rlock etc... no ADO são outros comandos MOVE FIRST, etc que não estamos acostumados.
Já os comandos SQL são todos universais.
Estou só explicando ou tentando explicar como manipulamos o resultado do SELECT... tanto faz ser em ADO ou SQMIX, precisamos manipular o resultado da sentença e o SQLMIX, é facil.

Saudações,
Itamar M. Lins Jr.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 27 Set 2016 07:26
por Hasse
Bom dia Itamar.

Muito legal a tua explicação. Ficou fácil perceber as diferenças.
Certamente irei mergulhar nos estudos do SQLMIX.

Mais uma vez, obrigado pela gentileza e paciência.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 27 Set 2016 21:38
por Hasse
Bom dia Itamar.

Caramba, passei o dia pesquisando o SQLMIX, e agora, ao final do dia, estou como o filósofo grego, Sócrates: "só sei que nada sei".
Está extremamente complicado pela enorme confusão de comandos e funções usados nos exemplos que consegui juntar.

Selecionei 5 exemplos básicos:
EXEMPLO 1  .................................................
nConn := rddInfo( RDDI_CONNECT, { "MYSQL", "192.168.2.99", "egbadm","12345","egba" } )

============================================================================

EXEMPLO 2  .................................................
c_Rdd := RDDSETDEFAULT( "SQLMIX" )
cAttributes:="Server=;Database=127.0.0.1:c:\dados\tabelas.fdb;User=SYSDBA;Password=masterkey;Driver={Firebird/InterBase(r) driver};"
nConn := RDDINFO( RDDI_CONNECT, { "ODBC", cAttributes } )

============================================================================

EXEMPLO 3  .................................................
nConn := RDDINFO(RDDI_CONNECT,{"ODBC","Server=.\SQLEXPRESS;Driver={SQL Server};dsn=;Uid=sa;database=test;pwd=pass" },'SQLMIX' )

============================================================================

EXEMPLO 4  .................................................
db := FBConnect("Small.gdb", "sysdba", "masterkey")

============================================================================

EXEMPLO 5  .................................................
vMEU_SQL    := "FIREBIRD=" + vHOST + ":" + vDATABASE + ";UID=" + vUSUARIO :+
               ";PWD=" + vSENHA + ;";charset=" + vCHARSET
nCnn := SR_AddConnection( CONNECT_FIREBIRD, vMEU_SQL )

FINALIZANDO:

Não encontrei exemplos coerentes (na minha curta visão do SQLMIX), e acho que isto que achei na NET não representa o TODO desta LIB.

Assim, meu amigo, me dê um empurrão, explicando as diferenças acima citadas.
E ainda, se possível, me fornecer uma função de conexão, com a respectiva string, sem o uso do ODBC, que é um complicador na hora da distribuição do aplicativo.

É evidente que ainda faltam muitos passos e muitas horas de queima-neurônios para finalizar a aplicativo que tenho em mente.
E espero contar com os valiosos ensinamentos dos colegas.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 28 Set 2016 21:42
por Hasse
Bom dia Itamar.

Seguindo o fio da meada, selecionei um PRG que suponho seja SQLMIX puro (sem ODBC).

#include "dbinfo.ch"
#include "error.ch"
#include "hbrddsql.ch"
#include "firebird.ch"   // PARA FIREBIRD
*
REQUEST HB_GT_WIN_DEFAULT                                                 && Janela DOS - Temporário para testes.
*
REQUEST SDDMY, SQLMIX
ANNOUNCE RDDSYS
*
PROCEDURE Main()
rddSetDefault( "SQLMIX" )

IF rddInfo( RDDI_CONNECT, { "MYSQL", "G:\Dev\DentalOff\Small.gdb", "egbadm","12345","egba" } ) == 0
    ? "Unable connect to the server 1"
    RETURN
ENDIF
dbUseArea( .T. , , "SELECT * FROM produtos", "prod" )
qout( "OK table 1" )

IF rddInfo( RDDI_CONNECT, { "MYSQL", "192.168.2.100", "egbadm","12345", "egba" } ) == 0
    ? "Unable connect to the server 2"
    RETURN
ENDIF
dbUseArea( .T. , , "SELECT * FROM resuentr", "resu" )
qout( "OK table 2" )

dbCloseAll()
RETURN


Quando compilado com xHarbour:
Error: Unresolved external '_HB_FUN_SDDMY' referenced from G:\DEV2\DENTALOFF\OBJ\SMALL_03.OBJ
Error: Unresolved external '_HB_FUN_SQLMIX' referenced from G:\DEV2\DENTALOFF\OBJ\SMALL_03.OBJ

Estão faltando LIB's e não sei qual possa ser. Caso seja a SQLMIX.lib eu não a tenho. De onde
posso baixá-la ?

======================================================================================

Compilado com a MiniGui 3.4.1:
Copilado com sucesso;
Na linha de Conexão abaixo falhou com "MYSQL":
IF rddInfo( RDDI_CONNECT, { "MYSQL", "G:\Dev\DentalOff\Small.gdb", "egbadm","12345","egba" } ) == 0

Certamente os valores "egbadm","12345","egba" estão incorretos. Quais seriam estes valores ?

======================================================================================

IF rddInfo( RDDI_CONNECT, { "SQLMIX", "G:\Dev\DentalOff\Small.gdb", "egbadm","12345","egba" } ) == 0

Também falhou a conexão com "SQLMIX".

======================================================================================

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 08:27
por janio
Hassa,

Pensei que vc queria apenas MIGRAR um banco firebird para o seu sistema, por isso indiquei aquele utilitario do SyGecom.

Mas vc quer eh migrar de dbf para sql o sistema inteiro?

Janio

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 09:17
por Hasse
Bom dia Janio.

Se fosse somente migrar somente de DBF para Firebird é moleza. Já tenho isto em uso. Mas também é com o ADO.

Agora o problema atual:
Tenho um Banco gerado por um aplicativo comercial de terceiro.
O meu propósito inicial é geral alguns relatórios a partir de uma base Firebird, para uso de empresas que possuem este aplicativo de terceiro instalado.
Mas, certamente, haverá algum momento em que terei que interagir com o Banco Firebird, como por exemplo, marcar os registros que deram origem a um determinado procedimento ou relatório.

Como este meu aplicativo será instalado em máquinas de vários clientes, quanto mais nativo, e menos dependente de outros plug-ins, melhor.

O uso do ODBC em clientes sempre é um complicador, pois o técnico que faz a instalação daquele aplicativo de terceiro que gera o Banco, também fará a instalação do meu aplicativo gerador de relatórios.

Consegui transmitir o meu problema ?

Mas o meu problema agora, é uma conexão fácil segura com o Banco. Acredito que os demais procedimentos (leitura e gravação) serão bem mais fáceis, pelo menos, foi o que a literatura pesquisada dá a impressão.

Já usei o ADO (ou melhor, está em uso num cliente). Apesar da extensa lista de prg's facilitar a programação parece meio gambiarra.
Quero testar outras opções, e dentre elas, uma foi a sugestão de usar o SQLMIX.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 09:28
por janio
Ok,

Atualmente eu uso Mediator para trabalhar com MySql. Mas no futuro pretendo utilizar SQLMIX e eliminar essa 'ponte' que eh o Mediator!

IF rddInfo( RDDI_CONNECT, { "MYSQL", "G:\Dev\DentalOff\Small.gdb", "egbadm","12345","egba" } ) == 0
? "Unable connect to the server 1"
RETURN
ENDIF


Achei isso estranho no seu codigo. Vc quer acessar uma base FIREBIRD, mas informa no primeiro parametro MYSQL??? Não entendi

jANIO

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 11:49
por Hasse
Na realidade fiz teste com SQLMIX e também com o MYSQL, já que os exemplos abordam os 2, e por fim acabei por copiar o 2º teste. Erro meu.
Mas o resultado foi igual.

Como postei anteriormente, eu acredito que o erro certamente deve estar nos parâmetros passados, aquela coisa esquisita, como abaixo, em vermelho, já que nunca vi parâmetros assim:

rddInfo( RDDI_CONNECT, { "SQLMIX", "G:\Dev\DentalOff\Small.gdb", "egbadm","12345","egba" } ) == 0

Me ocorreu agora que isto pode ser o User e a Senha (SYSDBA e masterkey), ficando a dúvida no último. Vou fazer um teste hoje a tarde.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 12:08
por Hasse
Dê uma olhada neste site:
https://groups.google.com/forum/#!topic/harbour-users/hqDDiRyOcBA

É uma miscelânia de MYSQL com SQLMIX que não dá para entender assim à primeira vista. Vou ter que queimar mais alguns neurônios.

Ali cita o exemplo que eu adaptei para:
IF rddInfo( RDDI_CONNECT, { "FIREBIRD", "localhost", "SYSDBA", "masterkey", "G:\Dev\DentalOff\Small.gdb" } ) == 0


Mas que também não funcionou.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 12:10
por Hasse
Testei com:
IF rddInfo( RDDI_CONNECT, { "SQLMIX", "localhost", "SYSDBA", "masterkey", "G:\Dev\DentalOff\Small.gdb" } ) == 0

E também não funcionou.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 12:37
por Itamar M. Lins Jr.
Ola!
Sinto muito, com xHarbour não vai. Vai ter que mudar para o Harbour 3.2 ou 3.4 eu uso o 3.4, nesse poderei testar algum problema ai.
Se for para aprender, escolha um só.
Certamente os valores "egbadm","12345","egba" estão incorretos. Quais seriam estes valores ?

Tente usar o MySQL ou FB via HeidiSQL(MySQL) ou FlameRobin(FB) aprender como se conectar sem usar Harbour ou xHarbour.
Aprenda a usar os BD´s sem o [x]Harbour ok ?
Como criar as tabelas, incluir etc... por fora, sem usar SQLMIX ou ADO, pela linha de comando, siga um tutorial basicão que você pode achar ai na NET.
Falta noções básicas ai da sua parte.

Saudações,
Itamar M. Lins Jr.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 12:56
por Itamar M. Lins Jr.
Ola!
Primeira coisa depois de instalado o SGBD, é testar a conexão.
Vai ter que ler no manual do BD como fazer isso, depois que aprender isso, ai vc pode fazer com SQLMIX ou ADO.
No windows fica em:
Painel de Controle\Todos os Itens do Painel de Controle\Ferramentas Administrativas
Fontes de Dados (ODBC)

É lá que vc vai configurar a conexão conforme está vendo ai nos exemplos que postou.
Tem um tutorial bom aqui.
http://www.pctoledo.com.br/forum/viewtopic.php?f=43&t=15019

Saudações,
Itamar M. Lins Jr.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 13:56
por janio
Itamar,

só uma duvida...

Pra usar SQLMIX precisa ter o ODBC instalado?

Janio

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 14:04
por janio
rddSetDefault( "SQLMIX" )
nConnection := RDDINFO( RDDI_CONNECT, ;
{ "ODBC", "Server=localhost;Driver={MySQL ODBC 3.51 Driver};dsn=;User=root;pwd=;database=test;" } )

A mim funcionou como acima.


viewtopic.php?f=43&t=15019&start=60#p105494

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 15:14
por Hasse
Ao Itamar: Já havia percebido que com o xHarbour não funciona.
Agora estou compilando com a MiniGui 3.4.1

Recapitulando TUDO:

Com o Flamerobin eu crio Banco e Tabelas dentro do Banco, sem problemas.
Com o Flamerobin eu faço insert, update, commit, delete, etc., tudo via linha de comando, sem problemas.

O problema é com a Conexão programada com o BD é que surge o problema.

Os meus últimos testes:
#include "dbinfo.ch"
#include "error.ch"
#include "hbrddsql.ch"
#include "firebird.ch"   // PARA FIREBIRD

REQUEST HB_GT_WIN_DEFAULT                                                 && Janela DOS - Temporário para testes.

REQUEST SDDMY, SQLMIX
ANNOUNCE RDDSYS

PROCEDURE Main()

   SETMODE( 25, 80 )
   rddSetDefault( "SQLMIX" )

   clear
   ? "inciando a conexão..."

   RDDSETDEFAULT("SQLMIX")

   && RDDINFO(RDDI_CONNECT, {"MYSQL",    "server",     "user",   "password" , "database" },                    [driver] )
   &&  Teste 01
   *IF RDDINFO(RDDI_CONNECT, {"FIREBIRD", "localhost:", "SYSDBA", "masterkey", "G:\Dev2\DentalOff\Small.gdb" }, "SQLMIX" ) == 0

   &&  Teste 02
   *IF RDDINFO( RDDI_CONNECT, { "FIREBIRD","localhost", "SYSDBA","masterkey","G:\Dev2\DentalOff\Small.gdb" } ) == 0

   &&  Teste 03
   IF RDDINFO( RDDI_CONNECT, { "SQLMIX", "localhost", "SYSDBA", "masterkey", "G:\Dev\DentalOff\Small.gdb" } ) == 0
       ? "Unable connect to the server 1"
       wait "A conexão falhou.............."
       RETURN( .F. )
   ENDIF

   wait "conectado........"
RETURN( nil )

Observar que tenho 3 linhas de conexão. Nenhuma das 3 linhas funcionou (teste 01, 02 e 03, comentando e descomentando a respectiva linha). O retorno é sempre ZERO, ou seja SEM conexão.

A sintaxe deve estar correta em vista da pesquisa nos sites, como:
https://groups.google.com/forum/#!topic/harbour-devel/ZhewwABM1FM, (com uma consulta do Itamar...),
https://groups.google.com/forum/#!topic/harbour-users/hqDDiRyOcBA, e
https://jcsn.wordpress.com/harbour-minigui/coding-minigui/rdd-sql-2/

Estou desconfiado que está faltando algo como uma LIB, um CH, uma configuração, ou sei lá............

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 15:22
por Hasse
No caso do post do Janio, acima:

rddSetDefault( "SQLMIX" )
nConnection := RDDINFO( RDDI_CONNECT, ;
{ "ODBC", "Server=localhost;Driver={MySQL ODBC 3.51 Driver};dsn=;User=root;pwd=;database=test;" } )


Esta sintaxe já usa o ODBC. Porquê, se supostamente o SQLMIX não precisa de ODBC.
Estas misturas é que dão o nó.

E ainda há uma outra sintaxe:
cAttributes:="Server=;Database=127.0.0.1:c:\temp\test.fdb;User=SYSDBA;Password=masterkey;Driver={Firebird/InterBase(r) driver};"
nConn := RDDINFO( RDDI_CONNECT,{"ODBC",cAttributes} )

Que também usa ODBC.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 17:23
por Itamar M. Lins Jr.
Ola!
Aqui eu conecto com bases FB assim com o harbour 3.4
Request  SQLMIX, SDDODBC
cRdd  := RDDSETDEFAULT( "SQLMIX" )
cAttributes:="Server=;Database=127.0.0.1:c:\fontes\dados\dados.fdb;User=SYSDBA;Password=masterkey;Driver={Firebird/InterBase(r) driver};"
nConn := RDDINFO( RDDI_CONNECT,{"ODBC",cAttributes} )

IF nConn == 0
   alert( "Não conectado ao servidor: " + str(RDDINFO( RDDI_ERRORNO )) + hb_eol() + RDDINFO( RDDI_ERROR ) )
   RDDSETDEFAULT( cRdd )
   RETURN
ENDIF


Talvez vc precise adicionar no resquest SDDMY e SDDFB se for sem ODBC(Acho) não sei, estou aprendendo nesta parte também, eu uso o ODBC.

Saudações,
Itamar M. Lins Jr.

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 18:11
por Itamar M. Lins Jr.
Oi,
Fiz os testes aqui com o MySQL, rodou OK.
#require "rddsql"
#require "sddmy"

#include "dbinfo.ch"
#include "error.ch"

REQUEST SDDMY
REQUEST SQLMIX

ANNOUNCE RDDSYS

FIELD RESIDENTS

PROCEDURE Main()

#if defined( __HBSCRIPT__HBSHELL )
   rddRegister( "SQLBASE" )
   rddRegister( "SQLMIX" )
   hb_SDDMY_Register()
#endif

   rddSetDefault( "SQLMIX" )

   ? "RDDs:"; AEval( rddList(), {| x | QQOut( "", x ) } )

   IF rddInfo( RDDI_CONNECT, { "MYSQL", "localhost", "root","root" , "test" } ) == 0
      ? "Could not connect to the server"
      RETURN
   ENDIF

   CreateTable()

   ? "Let's browse table (press any key)"
   Inkey( 0 )
   dbUseArea( .T., , "SELECT * FROM country", "country" )
   Browse()

   ? "Let's browse table ordered by resident count (press any key)"
   Inkey( 0 )
   INDEX ON field->RESIDENTS TAG residents TO country
   Browse()

   dbCloseAll()

   RETURN

STATIC PROCEDURE CreateTable()

   ? rddInfo( RDDI_EXECUTE, "DROP TABLE country" )
   ? rddInfo( RDDI_EXECUTE, "CREATE TABLE country (CODE char(3), NAME char(50), RESIDENTS int(11))" )
   ? rddInfo( RDDI_EXECUTE, "INSERT INTO country values ('LTU', 'Lithuania', 3369600), ('USA', 'United States of America', 305397000), ('POR', 'Portugal', 10617600), ('POL', 'Poland', 38115967), ('AUS', 'Australia', 21446187), ('FRA', 'France', 64473140), ('RUS', 'Russia', 141900000)" )

   RETURN


Detalhe foi esse;
{ "MYSQL", "localhost", "root","root" , "test" } , o primeiro "root" é o usuário e segundo "root" é a senha, "test" é a pasta que ficará a tabela country.

Neste caso o acesso foi nativo sem o ODBC, pois eu não especifiquei nada, ele por padrão deve ter acessado a porta do MySql.

Saudações,
Itamar M. Lins Jr.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 18:15
por Hasse
Olá Itamar.

Realmente acho que tenho algum problema aqui.
Com o Flamerobin acesso normalmente.

Mesmo inserindo a tua última sintaxe, NADA.

Me diga, quando do uso do ODBC, não precisa configurar a conexão via ODBC ?
Não precisa criar uma conexão para o Firebird no ODBC ?

Para conectar com o Oracle precisa configurar esta conexão.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 18:26
por Itamar M. Lins Jr.
Ola!
Meu nobre, eu estou ligando o MYSQL(HEIDISQL), FLAMEROBIN é para o FIREBIRD.
Precisa concentrar em uma coisa só, pois está postando coisas de um e de outro.
A conexão do FB é mais simples porque já postei aqui n vezes.

Saudações,
Itamar M. Lins Jr.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 18:31
por Itamar M. Lins Jr.
Ola!
Recapitulando TUDO:

No REQUEST vc não colocou o principal "SDDFB" faltou.
Esse é o problema, faz o REQUEST do SDDMY(MYSQL) e tenta conexão com o FB... pode ser isso ai.
Melhor chamar todos.
REQUEST DBFCDX, DBFFPT, DBFDBT, LETO, SQLMIX, SDDODBC, SDDFB.

Saudações,
Itamar M. Lins Jr.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 20:45
por Hasse
Agora deu erro de compilação:

Harbour 3.2.0dev (r1506261250)
Copyright (c) 1999-2015, http://harbour-project.org/
C:/Users/Padrao/AppData/Local/Temp/hbmk_s8n2fi.dir/small_03.o:small_03.c:(.data+0x1d8): undefined reference to `HB_FUN_SDDFB'
collect2.exe: error: ld returned 1 exit status
hbmk2[Small_03]: Erro: Executando linkeditor. 1
gcc.exe C:/Users/Padrao/AppData/Local/Temp/hbmk_s8n2fi.dir/small_03.o C:/Users/Padrao/AppData/Local/Temp/hbmk_s8n2fi.dir/hbmk_y2d6o3.o G:/DEV2/DentalOff/_temp.o -mwindows -Wl,--start-group -lhmg -lcrypt -ledit -leditex -lgraph -lini -lreport -lhfcl -lmsvfw32 -lvfw32 -lhbct -lhbwin -lhbmzip -lminizip -lhbmemio -lhbmisc -lhbmysql -lmysql -lhbtip -lhbsqlit3 -lsddodbc -lrddsql -lsddmy -lhbodbc -lodbc32 -lhbhpdf -lhbfimage -lhbpgsql -lhbnetio -lxhb -lpng -llibhpdf -lhbvpdf -lhbzebra -lhbextern -lhbdebug -lhbvmmt -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainwin -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -liphlpapi -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lwinmm -lmapi32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib -Wl,--end-group -oSmall_03.exe -LC:/hmg.3.4.1/harbour/lib/win/mingw -LC:/hmg.3.4.1/lib

hbmk2: Dica: Adicionar op‡Æo 'sddfb.hbc' faltando nas fun‡äes: SDDFB()

Isto é uma DLL ? Se for, não encontrei.
Se for LIB também não.

No Harbour\Contrib tem uma pasta SDDFB, mas está vazia.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 21:02
por Itamar M. Lins Jr.
Ola!
Pois é, sobre aquela outra questão que estava em dúvida, é o seguinte:
Se usamos: rddinfo(RDDI_CONNECT,{"ODBC" aqui estamos conectando via ODBC e assim, rddinfo(RDDI_CONNECT,{"MYSQL" estamos usando a conexão via a lib SDDMY, respondendo ao Janio também. Tem que ter a chamada delas lá no REQUEST se for nativo.

Sem a lib do FB você não vai conseguir conectar mesmo.
Quando gero os fontes aqui eu tenho instalado o firebird na pasta, então eu uso isso ai em baixo na hora de criar o Harbour 3.4
HB_WITH_FIREBIRD=C:\Program Files\Firebird\Firebird_2_5\include

Olhe no GIT do 3.2 para ver se esta lá. No 3.4 tem isso aqui.
    Diretório: C:\Users\Itamar\Documents\GitHub\harbour-core\contrib\sddfb

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----          27/11/13     13:36            tests
-a---          07/04/16     14:23      20506 core.c
-a---          27/11/13     13:36        158 sddfb.hbc
-a---          12/02/16     10:04        773 sddfb.hbp
-a---          27/11/13     13:36       1024 sddfb.hbx

C:\Users\Itamar\Documents\GitHub\harbour-core\contrib\sddfb [master = +0 ~1 -0 !]>

Via ODBC vai funcionar ai é simples, nos seu exemplos não está assim:
REQUEST DBFCDX, DBFFPT, SQLMIX, SDDODBC
Function Main(...)
cRdd  := RDDSETDEFAULT( "SQLMIX" )
cAttributes:="Server=;Database=127.0.0.1:c:\fontes\dados.fdb;User=SYSDBA;Password=masterkey;Driver={Firebird/InterBase(r) driver};"
nConn := RDDINFO( RDDI_CONNECT,{"ODBC",cAttributes} )

IF nConn == 0
   alert( "Não conectado ao servidor: " + str(RDDINFO( RDDI_ERRORNO )) + hb_eol() + RDDINFO( RDDI_ERROR ) )
   RDDSETDEFAULT( cRdd )
   RETURN
ENDIF



Saudações,
Itamar M. Lins Jr.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 29 Set 2016 21:54
por Itamar M. Lins Jr.
Ola!
Me diga, quando do uso do ODBC, não precisa configurar a conexão via ODBC ?

Precisa configurar, e na string de conexão tem que está com o mesmo nome.

Saudações,
Itamar M. Lins Jr.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 06 Out 2016 21:51
por Hasse
Boa noite Itamar.

Baixei e Instalei o ODBC do Firefird. Ele ficou exatamente como você mostra na figura, e mesmo assim ainda não conecta.

Alterou somente a versão do ODBC para 2.00.04.155.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 09 Out 2016 19:14
por Hasse
Boa noite /Bom dia.
Fiz mais alguns testes de conexão, todos infrutíferos.
Usando o Harbour 3.2.0dev (r1609281755) / MingW - Instalado ontem, 08/10/2016.

Abaixo o PRG.
*
#include "dbinfo.ch"
#include "error.ch"
#include "hbrddsql.ch"
#include "firebird.ch"   // PARA FIREBIRD
#include "simpleio.ch"
*
#require "rddsql"
#require "sddmy"
*
REQUEST SDDMY, SQLMIX, DBFCDX, SDDODBC, SDDFB
*
ANNOUNCE RDDSYS
*
PROCEDURE Main()
   *
   SETMODE( 25, 80 )
   rddSetDefault( "SQLMIX" )
   Set( _SET_DATEFORMAT, "yyyy-mm-dd" )
   *
   clear
   *
   ? "RDD's instaladas: >>"
   ?? AEval( rddList(), {| x | QQOut( "", x ) } )              && Retorna
   ? "-----------------------------------------------------"
   *
   nConn1 := rddInfo( RDDI_CONNECT, { "ODBC", "Server=localhost;Driver={Firebird/InterBase(r) driver 2.00.04.155};dsn=;User=SYSDBA;Password=masterkey;database=G:\Dev2\DentalOff\Small.gdb;" } )
   IF ValType( nConn1 ) = "N"
      ? "Connecetion=>", nConn1
   ELSEIF ValType( nConn1 ) = "A"
      ? "Retornou ARRAY para nConn1"
      For x1 = 1 TO Len( nConn1 )
         ? x1, nConn1[x1]
      Next x1
   ELSE
      Alert( 'Problema de connection em nConn1' )
   ENDIF
   *
   ? "-----------------------------------------------------"
   *
   cAttributes:="Server=localhost;Database=G:\Dev2\DentalOff\Small.gdb;User=SYSDBA;Password=masterkey;Driver={Firebird/InterBase(r) driver};"
   nConn5 := RDDINFO( RDDI_CONNECT,{ "ODBC", cAttributes } )
   *
   IF ValType( nConn5 ) = "N"
      ? "Connecetion=>", nConn5
   ELSEIF ValType( nConn5 ) = "A"
      ? "Retornou ARRAY para nConn5"
      For x1 = 1 TO Len( nConn5 )
         ? x1, nConn5[x1]
      Next x1
   ELSE
      Alert( 'Problema de connection em nConn5' )
   ENDIF
   *
   ? "-----------------------------------------------------"
   *
   cAttributes:="Server=localhost;Database=127.0.0.1:G:\Dev2\DentalOff\Small.gdb;User=SYSDBA;Password=masterkey;Driver={Firebird/InterBase(r) driver};"
   nConn6 := RDDINFO( RDDI_CONNECT,{ "ODBC", cAttributes } )
   *
   IF ValType( nConn6 ) = "N"
      ? "Connecetion=>", nConn6
   ELSEIF ValType( nConn6 ) = "A"
      ? "Retornou ARRAY para nConn6"
      For x1 = 1 TO Len( nConn6 )
         ? x1, nConn6[x1]
      Next x1
   ELSE
      Alert( 'Problema de connection em nConn6' )
   ENDIF
   *
   ? "-----------------------------------------------------"
   *
RETURN

Abaixo o HBP:
small_03.prg

sddfb.hbc
sddodbc.hbc
sddmy.hbc

Abaixo o RETORNO, que suponho seja NÃO CONECTADO:
RDD's instaladas: >> SQLBASE SQLMIX DBF DBFCDX
-----------------------------------------------------
Retornou ARRAY para nConn1
1 ODBC
2 Server=localhost;Driver={Firebird/InterBase(r) driver 2.00.04.155};ds
n=;User=SYSDBA;Password=masterkey;database=G:\Dev2\DentalOff\Small.gdb;
-----------------------------------------------------
Retornou ARRAY para nConn5
1 ODBC
2 Server=localhost;Database=G:\Dev2\DentalOff\Small.gdb;User=SYSDBA;Pas
sword=masterkey;Driver={Firebird/InterBase(r) driver};
-----------------------------------------------------
Retornou ARRAY para nConn6
1 ODBC
2 Server=localhost;Database=127.0.0.1:G:\Dev2\DentalOff\Small.gdb;User=
SYSDBA;Password=masterkey;Driver={Firebird/InterBase(r) driver};
-----------------------------------------------------


Peço testarem o meu PRG / HBP, para ver se a conexão retorna com sucesso.

JPG do meu ODBC Firebird instalado no Anexo:

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 09 Out 2016 19:57
por janio
Hasse,

Nessa tela do ODBC, vc tem que IR em "FONTE DE DADOS DO SISTEMA" e ADICIONAR o drive pra firebird e CONFIGURAR A CONEXÃO!

Pelo menos pra MySql isso eh necessário. Não sei pra firebird... mas deve ser tbm!

Janio

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 09 Out 2016 21:53
por Hasse
Sim, Janio.

Está devidamente configurado. E o teste retorna êxito na conexão. Então o problema não está aqui.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 10 Out 2016 08:45
por Itamar M. Lins Jr.
Ola!
Na string de conexão, não se coloca a parte dos números. apenas "Driver={Firebird/InterBase(r) driver};"
Aqui eu uso assim:
cAttributes:="Server=;Database=127.0.0.1:c:\temp\xxxx.gdb;User=SYSDBA;Password=masterkey;Driver={Firebird/InterBase(r) driver};"
nConn := RDDINFO( RDDI_CONNECT,{"ODBC",cAttributes} )

Usando ODBC.

Saudações,
Itamar M. Lins Jr.

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 10 Out 2016 09:39
por Hasse
Bom dia Itamar.

Podes observar que somente no teste nConn1 é que usei o número da versão do ODBC. Os testes de nConn5 e nConn6 foram feitos sem o número do driver ODBC.
Veja os valores retornados em "Quote" nos 3 testes seguidos, nConn1, nConn5 e nConn6.

Me parece que há algo errado justamente entre a conexão do meu aplicativo e o ODBC. Esta string de conexão está correta ?
Deve haver algum detalhe a mais que ainda esteja faltando.!!!!!!!

Segundo eu entendi o retorno da Função RDDINFO deve ser um número, correto ? E retorna um ARRAY com a string de conexão.
Este fato não indica qual o erro ?

INICIANTE XHARBOUR - Como acessar .Fdb .Gdb

MensagemEnviado: 10 Out 2016 09:44
por Itamar M. Lins Jr.
Ola!
Fiz alguns testes aqui com seu código e realmente não conectava.
Nisso fui tirando comentando cada linha do seu código, até chegar na linha
#include "hbrddsql.ch"

Comentando ela, ai sim funcionou.

Saudações,
Itamar M. Lins Jr.

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 10 Out 2016 09:56
por Hasse
Oi Itamar.

Comentei a linha mencionada e retornou "Error Base/1003 Variable does not exist: RDDI_CONNECT".

Esta variável está justamente naquele arquivo "hbrddsql.ch".
Então deve haver outro arquivo que contenha esta variável, e que não tenho declarado no meu PRG.

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 10 Out 2016 10:16
por Itamar M. Lins Jr.
Ola!
Peguei seu código e só comentei as duas linhas abaixo.
//#include "hbrddsql.ch"
//#include "firebird.ch" // PARA FIREBIRD
Aqui o resultado.
C:\fontes\teste>hbmk2 fdb.prg sddodbc.hbc sddfb.hbc
hbmk2: Processando script local make: hbmk.hbm
Harbour 3.4.0dev (bde5c0c) (2016-09-28 18:12)
Copyright (c) 1999-2016, https://github.com/vszakats/harbour-core/
Compiling 'fdb.prg'...
Lines 678, Functions/Procedures 2
Generating C source output to 'C:\Users\Itamar\AppData\Local\Temp\hbmk_8xmai4.di
r\fdb.c'... Done.
RDD's instaladas: >> SQLBASE SQLMIX DBF DBFCDX
-----------------------------------------------------
Connecetion=>          0
-----------------------------------------------------
Connecetion=>          0
-----------------------------------------------------
Connecetion=>          0
-----------------------------------------------------
C:\fontes\teste>


Saudações,
Itamar M. Lins Jr.

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 10 Out 2016 10:37
por Itamar M. Lins Jr.
E com a linha #include "hbrddsql.ch" não comentada.
RDD's instaladas: >> SQLBASE SQLMIX DBF DBFCDX
-----------------------------------------------------
Retornou ARRAY para nConn1
         1 ODBC
         2 Server=localhost;Driver={Firebird/InterBase(r) driver 2.00.04.155};ds
n=;User=SYSDBA;Password=masterkey;database=G:\Dev2\DentalOff\Small.gdb;
-----------------------------------------------------
Retornou ARRAY para nConn5
         1 ODBC
         2 Server=localhost;Database=G:\Dev2\DentalOff\Small.gdb;User=SYSDBA;Pas
sword=masterkey;Driver={Firebird/InterBase(r) driver};
-----------------------------------------------------
Retornou ARRAY para nConn6
         1 ODBC
         2 Server=localhost;Database=127.0.0.1:G:\Dev2\DentalOff\Small.gdb;User=
SYSDBA;Password=masterkey;Driver={Firebird/InterBase(r) driver};
-----------------------------------------------------
C:\fontes\teste>


Vamos ver no forum internacional...

Saudações,
Itamar M. Lins Jr.

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 10 Out 2016 10:57
por Itamar M. Lins Jr.
Ola!
Não precisou.
Seu arquivo dbinfo.ch está com problema, ou não tem essa parte.
*
#include "dbinfo.ch"

#require "rddsql"
#require "sddodbc"
*
REQUEST SQLMIX, DBFCDX, SDDODBC
*
ANNOUNCE RDDSYS
*
PROCEDURE Main()
   *
   SETMODE( 25, 80 )
   rddSetDefault( "SQLMIX" )
   Set( _SET_DATEFORMAT, "yyyy-mm-dd" )
   *
   clear
   *
   ? "RDD's install: >>"
   ?? AEval( rddList(), {| x | QQOut( "", x ) } )             
   ? "-----------------------------------------------------"
   *
   nConn1 := rddInfo( RDDI_CONNECT, { "ODBC", "Server=localhost;Driver={Firebird/InterBase(r) driver};dsn=;User=SYSDBA;Password=masterkey;database=G:\Dev2\DentalOff\Small.gdb;" } )
   IF ValType( nConn1 ) = "N"
      ? "Connection=>", nConn1
   ELSEIF ValType( nConn1 ) = "A"
      ? "Return ARRAY of nConn1"
      For x1 = 1 TO Len( nConn1 )
         ? x1, nConn1[x1]
      Next x1
   ELSE
      Alert( 'connection fault nConn1' )
   ENDIF

Dentro do meu dbinfo.ch do 3.4

/* SQL */
#define RDDI_CONNECT             61   /* connect to database */
#define RDDI_DISCONNECT          62   /* disconnect from database */
#define RDDI_EXECUTE             63   /* execute SQL statement */
#define RDDI_ERROR               64   /* error number */
#define RDDI_ERRORNO             65   /* error description */
#define RDDI_INSERTID            66   /* last auto insert ID */
#define RDDI_AFFECTEDROWS        67   /* number of affected rows after UPDATE */
#define RDDI_QUERY               68   /* last executed query */

e se colocar a hbrddsql.ch
/* NOTE: This file is also used by C code. */

#ifndef HB_RDDSQL_CH_
#define HB_RDDSQL_CH_

/* New ...INFO_ constants */
#define DBI_QUERY             1001

#define RDDI_CONNECT          1001
#define RDDI_DISCONNECT       1002
#define RDDI_EXECUTE          1003
#define RDDI_ERROR            1004
#define RDDI_ERRORNO          1005
#define RDDI_NEWID            1006
#define RDDI_AFFECTEDROWS     1007
#define RDDI_QUERY            1008

#endif


Muito diferente. O problema deve ser a salada de versões ai...

Saudações,
Itamar M. Lins Jr.

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 10 Out 2016 12:58
por Hasse
Oi Itamar.

Você matou a charada. O problema estava no dbinfo.ch.

Eu havia copiado ele da pasta do MiniGui 3.4.1

Fui na pasta do HB32 recém instalado e usei aquele.

A Compilação passou e a conexão retorna um número, iniciando com 1. A cada nova conexão este número incrementa em 1.

Um pequeno detalhe, mas fundamental. Estou curioso para saber como você chegou a esta conclusão. Foi uma sacada genial.

Valeu mesmo Itamar. Mais uma vez obrigado pela tua valiosa e prestimosa colaboração. Sinceramente, eu nunca chegaria lá.

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 10 Out 2016 14:27
por Itamar M. Lins Jr.
Ola!
A Compilação passou e a conexão retorna um número, iniciando com 1. A cada nova conexão este número incrementa em 1.


Esta correto, vc pode ter múltiplas conexões MySQL = nConn1, Firebird = nConn2...
Use RDDI_DISCONNECT para desconectar.
RDDINFO(RDDI_DISCONNECT,,"SQLMIX",nConn1) //tem que colocar o tipo de RDD
RDDINFO(RDDI_DISCONNECT,,"SQLMIX",nConn2)


Saudações,
Itamar M. Lins Jr.

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 10 Out 2016 14:35
por Itamar M. Lins Jr.
Ola!
Estou curioso para saber como você chegou a esta conclusão.

Porque aqui funciona, quando copiei o seu código deixou de funcionar, ai fui eliminando as linhas desnecessárias.
Eu ia colocar seu código no forum internacional, e lá eles pedem o menor código possível.

Saudações,
Itamar M. Lins Jr.

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 14 Out 2016 11:16
por Hasse
Bom dia Itamar.

Estou testando e brincando com as Funções, Comandos do Firebird direto ou nativo: FBCreateDB(), FBConnect(), etc.

Consigo criar o BANCO, criar uma Tabela, e inserir dados (em parte).
Veja os PRG's abaixo:
   ? "Create Tabela Teste_2=======>>", tmp   := FBQuery( db, "CREATE TABLE Teste_Dbas( COD smallint, CLIENTE char(20), CIDADE char(25) )", nDialect, trans )
O campo COD é smallint.

   FOR xx1 = 1 TO 5
      ? "Exec Insert Teste_Dbas======>>", tmp   := FBExecute( db, 'insert into Teste_Dbas(COD) values(1)', nDialect, trans )
   NEXT xx1
Funciona corretamente inserindo o valor 1 em todos os registros.
      ? "Exec Insert Teste_Dbas======>>", tmp   := FBExecute( db, 'insert into Teste_Dbas(COD) values(xx1)', nDialect, trans )
      ? "Exec Insert Teste_Dbas======>>", tmp   := FBExecute( db, 'insert into Teste_Dbas(COD) values(&xx1)', nDialect, trans )
      ? "Exec Insert Teste_Dbas======>>", tmp   := FBExecute( db, 'insert into Teste_Dbas(COD) values("xx1")', nDialect, trans )
      ? "Exec Insert Teste_Dbas======>>", tmp   := FBExecute( db, 'insert into Teste_Dbas(COD) values("&xx1")', nDialect, trans )
NÃO funciona se quero inserir o valor crescente de contido na variável xx1 incrementada em FOR xx1.
Já testei usar xx1 (erro -206), &xx1 (erro -104), "xx1" (erro -413) e "&xx1" (erro -413)

Como fazer ?

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 15 Out 2016 11:49
por Hasse
A mesma coisa acontece com o ODBC RDDINFO - NÃO grava valores numéricos:
   RDDINFO(RDDI_EXECUTE, "CREATE TABLE Teste_ODBC ( COD int, CLIENTE char(10), CIDADE char(20)) " )
   FOR xx1 = 1 TO 05
      cd1 := StrZero( xx1, 10 )
      cd2 := StrZero( xx1, 20 )
      ? RDDINFO(RDDI_EXECUTE, "insert into Teste_ODBC ( CLIENTE, CIDADE ) values( '&cd1', '&cd2' )" )  && OK - grava a string da variável.
      *
      ? RDDINFO(RDDI_EXECUTE, "insert into Teste_ODBC (COD) values( xx1 )" )              && erro.
      ? RDDINFO(RDDI_EXECUTE, "insert into Teste_ODBC (COD) values( &xx1 )" )             && erro.
      ? RDDINFO(RDDI_EXECUTE, "insert into Teste_ODBC (COD) values( 'xx1' )" )            && erro.
      ? RDDINFO(RDDI_EXECUTE, "insert into Teste_ODBC (COD) values( '&xx1' )" )           && erro.
   NEXT xx1
Nenhuma das 4 opções grava o valor da variável numérica XX1.

Variáveis char e varchar gravam corretamente.

Como contornar este problema ?

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 15 Out 2016 12:59
por Hasse
Interessante que funciona gravando se NULL
      ? RDDINFO(RDDI_EXECUTE, "insert into Teste_ODBC ( COD, CLIENTE, CIDADE ) values( null, '&cd1', '&cd2' )" )  && OK - retorna .T.

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 15 Out 2016 14:04
por Hasse
Outro detalhe que me chamou a atenção !!!!!!!!!!!!!!
A velocidade de gravação.
Para gravar 10.000 registros com insert, tempos em segundos.
Vejam a EXTREMA diferença dos números. É inacreditável.
Somando ainda a grande instabilidade de desempenho entre uma medição e outra do ODBC !!!
ODBC-----------------FB
10.000----------------10.000 registros gravados
59,242----------------1,706 segundos
80,548----------------1,538 segundos
43,343----------------1,715 segundos
26,399----------------1,741 segundos
37,992----------------1,581 segundos
33,513----------------1,733 segundos
47,371----------------1,741 segundos
39,009----------------1,714 segundos
37,503----------------1,592 segundos
28,865----------------1,692 segundos

Concluindo:
Quem precisa de velocidade DEVE usar a FB direto, SEM ODBC. Aos meus Gurus de SGDB's, tem algum erro nesta minha conclusão ????

Detalhes: Não encontrei qualquer referência à possibilidade de uso do ROLLBACK com o ODBC.
Parece que não há necessidade de "commitar" os dados gravados com ODBC.
No FB exige, pois sem o COMMIT os dados não são gravados.

Abaixo o PRG usado para o caso do ODBC:
   RDDINFO(RDDI_EXECUTE, "CREATE TABLE Teste_ODBC ( CLIENTE char(10), CIDADE char(20) )" )
   c_Time1 := Subs( HB_ValToStr( DateTime() ), 12 )
   c_Tm1   := DateTime()
   ? "Time Inicial..:>"
   ?? c_Time1
   *
   FOR xx1 = 1 TO 10000
      cd1 := "1" + StrZero( xx1, 09 )
      cd2 := "2" + StrZero( xx1, 19 )
      RDDINFO(RDDI_EXECUTE, "insert into Teste_ODBC ( CLIENTE, CIDADE ) values( '&cd1', '&cd2' )" )
   NEXT xx1
   c_Time2 := Subs( HB_ValToStr( DateTime() ), 12 )
   c_Tm2   := DateTime()
   ? "Time Inicial...:>" + c_Time1,
   ? "Time Final.....:>" + c_Time2,
   ? "Total....:>"
   ?? c_Tm2 - c_Tm1, " dias  ==  ", ( c_Tm2 - c_Tm1 ) * 86400, " segundos"


E abaixo o código para o FB sem ODBC:
   trans := FBStartTransaction( db )
   FBQuery( db, "CREATE TABLE Teste_Dbas( COD int, CLIENTE char(20), CIDADE char(25) )", nDialect, trans )
   FBCommit( trans )
   *
   c_Time1 := Subs( HB_ValToStr( DateTime() ), 12 )
   c_Tm1   := DateTime()
   ? "Time Inicial..:>"
   ?? c_Time1
   *
   trans := FBStartTransaction( db )
   FOR xx1 = 1 TO 10000
      cd1 := "1" + strzero( xx1, 09 )
      cd2 := "2" + strzero( xx1, 19 )
      FBExecute( db, 'insert into Teste_Dbas(COD, CLIENTE, CIDADE) values( "&xx1" as integer, "&cd1", "&cd2")', nDialect, trans )
   NEXT xx1
   FBCommit( trans )
   c_Time2 := Subs( HB_ValToStr( DateTime() ), 12 )
   c_Tm2   := DateTime()
   ? "Time Inicial...:>" + c_Time1,
   ? "Time Final.....:>" + c_Time2,
   ? "Total....:>"
   ?? c_Tm2 - c_Tm1, " dias  ==  ", ( c_Tm2 - c_Tm1 ) * 86400, " segundos"

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 16 Out 2016 20:49
por Hasse
Assunto da gravação de número resolvido.

Consultar o link abaixo:

http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=9800&start=30

Obrigado a todos que contribuíram.

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 16 Out 2016 20:53
por Hasse
Para o passo seguinte preciso:

1)-Listas das Funções e Comandos da biblioteca FB;

2)-Lista com os significados dos erros retornados.

Já pesquisei no site do Firebird e nada encontrei que mencionasse essa biblioteca FB.

Onde posso conseguir isso ?

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 15 Set 2022 16:10
por thekey
Olá a todos.

A exatos 6 anos atrás o usuário "Hasse" estava com dificuldades em acessar um .FDB de terceiros retornando erro de coneccao e supostamente algo relacionado a SYSDBA ou masterkey.

O tópico se desenvolveu arduamente na busca da coneccao via harbour, que acabou tomando outras direcoes para contornar o problema.

Hoje em 2022, nao sei se alguem ainda procura por isto, mas por acaso vi esta duvida e gostaria de postar minha contribuicao que acredito que possa ser a chave deste emaranhado de postagens.

Uma vez eu estava tentando acessar um banco de dados de terceiros, e nao conseguia via Ibexpert ou flameRobin, mito menos via comando convencionais do harbour.

Ate que descobri que a empresa detentora do .FDB havia propositalmente protegido seu FDB contra acessos sem usar o aplicativo proprio da empresa.

Sabemos que este acesso externo via ibexpert, dbconsole ou flamerobin, sempre foi um problema de seguranca do firebird, haja vista seu usuario e senha universal (SYSDBA/masterkey).

Ate eu descobrir, que a empresa utilizou um "massete" para proteger o acesso direto ao FDB, criando uma "Rule" no banco de dados com o mesmo nome do usuario SYSDBA. Causando assim um "bug" de coneccao.

Alguns donos de software house, vão comer meu figado, mas a solucao para "destravar" o FDB da coneccao é a seguinte:

Basta usar um editor de texto binario, ou acessar o arquivo.FDB atraves de fopen etc.
O Objetivo é trocar a primeira ocorrencia da string "SYSDBA" diretamente no arquivo e colocar qualquer coisa no lugar como DBASYS por exemplo (string tem que ser do mesmo tamanho de SYSDBA, ou seja, 6 caracteres).

Ao fazer isto, voce estara alterando diretamente no arquivo.FDB suposto nome ou regra criado com intencao de conflitar com o SYSDBA.

Salve a alteracao, e vera que podera acessar normalmente atraves de qualquer coisa Harbour, flamerobin, ibexpert, etc.

Apos seu acesso atraves do seu "programinha bisbilhoteiro" bastar, voltar sua alteracao ao normal, senao o programa da empresa detentora pode nao conseguir abrir.

Esta pode nao ser a solucao do tema aqui, (apesar de ter quase certeza) que foi este a raiz do problema), mas fica dica de como muitas softwares houses protegem seus FDBs.

Abracos.

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 15 Set 2022 20:54
por Hasse
Bom dia THEKEY.
Valeu pela tua contribuição.
Não estou mais tratando deste assunto e portanto aquele item está superado.
Contudo, meu caro, esta contribuição é muito importante para o post e o grupo.
Bom trabalho e sucesso para você e o grupo.

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 08 Mai 2023 17:30
por Mario Mesquita
Boa tarde, pessoal.

Alguém testou essa dica do colega Thekey pra abrir uma db Firebird?

Um colega está com esse pepino de não conseguir abrir a base de dados. Qualquer dica ajuda.

Desde já, agradeço a todos.

Saudações,
Mario.

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 10 Mai 2023 10:44
por sygecom
Mario,
Sei que é basico, mas tentou ver no firewall se as portas TCP está liberada ?

Iniciante xHarbour - Como acessar .Fdb .Gdb

MensagemEnviado: 12 Mai 2023 09:30
por Mario Mesquita
Bom dia a todos.

Sinceramente não sei, mas posso dar esse insight para o colega. Ele crê que ou trocaram a senha ou deram alguma macetada no DB.

Como passou dias, vou saber se ele conseguiu ou não e retorno aqui.

Valeu!

Abraço,
Mario.