Página 4 de 6

Iniciante xHarbour - Como acessar .Fdb .Gdb

Enviado: 29 Set 2016 18:11
por Itamar M. Lins Jr.
Oi,
Fiz os testes aqui com o MySQL, rodou OK.

Código: Selecionar todos

#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

Enviado: 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

Enviado: 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

Enviado: 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

Enviado: 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

Enviado: 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

Código: Selecionar todos

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.

Código: Selecionar todos

    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:

Código: Selecionar todos

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

Enviado: 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

Enviado: 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

Enviado: 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.

Código: Selecionar todos

*
#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:

Código: Selecionar todos

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

Enviado: 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

Enviado: 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

Enviado: 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:

Código: Selecionar todos

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

Enviado: 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

Enviado: 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

Código: Selecionar todos

#include "hbrddsql.ch"
Comentando ela, ai sim funcionou.

Saudações,
Itamar M. Lins Jr.

Iniciante xHarbour - Como acessar .Fdb .Gdb

Enviado: 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.