Iniciante xHarbour - Como acessar .Fdb .Gdb

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Iniciante xHarbour - Como acessar .Fdb .Gdb

Mensagem 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ódigo: Selecionar todos

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.

Código: Selecionar todos

RDD's instaladas: >> SQLBASE SQLMIX DBF DBFCDX
-----------------------------------------------------
Connecetion=>          0
-----------------------------------------------------
Connecetion=>          0
-----------------------------------------------------
Connecetion=>          0
-----------------------------------------------------
C:\fontes\teste>
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Iniciante xHarbour - Como acessar .Fdb .Gdb

Mensagem por Itamar M. Lins Jr. »

E com a linha #include "hbrddsql.ch" não comentada.

Código: Selecionar todos

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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Iniciante xHarbour - Como acessar .Fdb .Gdb

Mensagem por Itamar M. Lins Jr. »

Ola!
Não precisou.
Seu arquivo dbinfo.ch está com problema, ou não tem essa parte.

Código: Selecionar todos

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

Código: Selecionar todos

/* 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

Código: Selecionar todos

/* 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.
Saudações,
Itamar M. Lins Jr.
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Iniciante xHarbour - Como acessar .Fdb .Gdb

Mensagem 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á.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Iniciante xHarbour - Como acessar .Fdb .Gdb

Mensagem 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.

Código: Selecionar todos

RDDINFO(RDDI_DISCONNECT,,"SQLMIX",nConn1) //tem que colocar o tipo de RDD
RDDINFO(RDDI_DISCONNECT,,"SQLMIX",nConn2)
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Iniciante xHarbour - Como acessar .Fdb .Gdb

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Iniciante xHarbour - Como acessar .Fdb .Gdb

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

Código: Selecionar todos

   ? "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.

Código: Selecionar todos

   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.

Código: Selecionar todos

      ? "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 ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Iniciante xHarbour - Como acessar .Fdb .Gdb

Mensagem por Hasse »

A mesma coisa acontece com o ODBC RDDINFO - NÃO grava valores numéricos:

Código: Selecionar todos

   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 ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Iniciante xHarbour - Como acessar .Fdb .Gdb

Mensagem por Hasse »

Interessante que funciona gravando se NULL

Código: Selecionar todos

      ? RDDINFO(RDDI_EXECUTE, "insert into Teste_ODBC ( COD, CLIENTE, CIDADE ) values( null, '&cd1', '&cd2' )" )  && OK - retorna .T.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Iniciante xHarbour - Como acessar .Fdb .Gdb

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

Código: Selecionar todos

   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:

Código: Selecionar todos

   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"
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Iniciante xHarbour - Como acessar .Fdb .Gdb

Mensagem por Hasse »

Assunto da gravação de número resolvido.

Consultar o link abaixo:

https://pctoledo.org/forum/viewto ... 0&start=30

Obrigado a todos que contribuíram.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Iniciante xHarbour - Como acessar .Fdb .Gdb

Mensagem 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 ?
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
thekey
Usuário Nível 1
Usuário Nível 1
Mensagens: 33
Registrado em: 17 Abr 2008 16:37
Localização: Governador Valadares MG

Iniciante xHarbour - Como acessar .Fdb .Gdb

Mensagem 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.
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Iniciante xHarbour - Como acessar .Fdb .Gdb

Mensagem 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.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Iniciante xHarbour - Como acessar .Fdb .Gdb

Mensagem 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.
Responder