Banco de dados

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Antonio
Usuário Nível 3
Usuário Nível 3
Mensagens: 347
Registrado em: 14 Ago 2003 17:33
Localização: Sao Paulo - SP
Contato:

Banco de dados

Mensagem por Antonio »

Bom dia pessoal

Como é feito atualmente o acesso a banco de dados com harbour?

Pretendo usar o harbour 3.0
Gostaria de usar acesso "direto" sem RDDs, pode ser com ADO.

Qual banco seria melhor nesse caso?

Gostaria de usar Mysql preferencialmente ou Firebird

Grato
Antonio Carlos
Antonio Carlos
Harbour 3.2 (20180213)
Hwgui 2.20 3b | PostGresql 9.5 | ADO/ODBC
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Banco de dados

Mensagem por Imatech »

Olá Antonio !
.
.
.
C:\HB\contrib\hbfbird
C:\HB\contrib\hbfbird\tests
.
.
.
C:\HB\contrib\hbfbird\tests\Test.prg

Código: Selecionar todos


/*
 * $Id: test.prg 17540 2012-06-04 17:08:19Z vszakats $
 */

#include "simpleio.ch"

PROCEDURE Main()

   LOCAL cServer := "localhost:"
   LOCAL cDatabase
   LOCAL cUser := "SYSDBA"
   LOCAL cPass := "masterkey"
   LOCAL nPageSize := 1024
   LOCAL cCharSet := "ASCII"
   LOCAL nDialect := 1
   LOCAL cName

   LOCAL trans, qry

   LOCAL db, x, y
   LOCAL num_cols
   LOCAL columns
   LOCAL fetch_stat
   LOCAL tmp

   hb_FNameSplit( hb_argv( 0 ), NIL, @cName, NIL )
   cDatabase := hb_DirTemp() + cName + ".fdb"

   IF hb_FileExists( cDatabase )
      FErase( cDatabase )
   ENDIF

   ? tmp := FBCreateDB( cServer + cDatabase, cUser, cPass, nPageSize, cCharSet, nDialect ), FBError( tmp )


   /* Connect rdbms */
   db := FBConnect( cServer + cDatabase, cUser, cPass )
   IF HB_ISNUMERIC( db )
      ? "Error:", db, FBError( db )
      QUIT
   ENDIF

   ? "Testing invalid request"
   ? tmp := FBExecute( db, "sldjfs;ldjs;djf", nDialect ), FBError( tmp )

   trans := FBStartTransaction( db )
   IF HB_ISNUMERIC( trans )
      ? "Error:", trans, FBError( trans )
   ELSE
      ? tmp := FBQuery( db, "create table teste (code smallint)", nDialect, trans ), FBError( tmp )
      ? tmp := FBCommit( trans ), FBError( tmp )
   ENDIF

   ? "==="
   trans := FBStartTransaction( db )
   IF HB_ISNUMERIC( trans )
      ? "Error:", trans, FBError( trans )
   ELSE
      ? tmp := FBQuery( db, "CREATE TABLE customer( customer VARCHAR(20) )", nDialect, trans ), FBError( tmp )
      ? tmp := FBCommit( trans ), FBError( tmp )
   ENDIF
   ? "==="

   trans := FBStartTransaction( db )
   IF HB_ISNUMERIC( trans )
      ? "Error:", trans, FBError( trans )
   ELSE
      ? "Status Execute: ", tmp := FBExecute( db, 'insert into customer(customer) values ("test 1")', nDialect, trans ), FBError( tmp )
      ? "Status Rollback: ", tmp := FBRollback( trans ), FBError( tmp )
   ENDIF

   trans := FBStartTransaction( db )
   IF HB_ISNUMERIC( trans )
      ? "Error:", trans, FBError( trans )
   ELSE
      ? "Status Execute: ", tmp := FBExecute( db, 'insert into customer(customer) values ("test 2")', nDialect, trans ), FBError( tmp )
      ? "Status Commit: ", tmp := FBCommit( trans ), FBError( tmp )
   ENDIF

   ? "Status Execute: ", tmp := FBExecute( db, 'insert into customer(customer) values ("test 3")', nDialect ), FBError( tmp )

   // FIX WINDOWS GPF BELOW

   qry := FBQuery( db, "SELECT * FROM customer", nDialect )
   IF HB_ISNUMERIC( qry )
      ? "Error:", qry, FBError( qry )
   ELSE
      num_cols := qry[ 4 ]
      columns := qry[ 6 ]

      FOR x := 1 TO num_cols
         ? x, "> "
         FOR y := 1 TO Len( columns[ x ] )
            ?? columns[ x, y ], " "
         NEXT
      NEXT

      ? "---"

      DO WHILE ( fetch_stat := FBFetch( qry ) ) == 0
         ? fetch_stat
         FOR x := 1 TO num_cols
            ?? FBGetData( qry, x ), ", "
         NEXT
      ENDDO

      ? "Fetch code:", fetch_stat

      ? "Status Free Query: ", FBFree( qry )
   ENDIF

   /* Close connection with rdbms */
   ? "Status Close Database: ", tmp := FBClose( db ), FBError( tmp )

   RETURN

M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Banco de dados

Mensagem por sygecom »

Olá Antonio,
Depende muito para qual vai ser a utilidade, quantidade de acessos e mais um monte de coisas que temos que levar em considerações.
Um exemplo, se você deseja usar essa base de dados remotamente o Firebird não á nada indicado para isso, por ter um péssimo desempenho em remoto, agora para sistema MONO usuário onde o client é o mesmo servidor fica mais facil de usar Firebird por ser fácil de instalar( apesar que hoje em dia todos são muito fácil ).
Outro ponto que eu particularmente levo em consideração é a questão da licenças dos SGBD o Firebird e PostgreSQL são realmente e totalmente FREE para uso e para venda se assim desejar, mas o Mysql não é bem assim, ele é apenas FREE se o seu aplicativo ou site for de acesso free também. Outra coisa, faça testes, veja os recursos que precisa e boa sorte na sua escolha...
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Antonio
Usuário Nível 3
Usuário Nível 3
Mensagens: 347
Registrado em: 14 Ago 2003 17:33
Localização: Sao Paulo - SP
Contato:

Banco de dados

Mensagem por Antonio »

Obrigado Leonardo e Ronaldo pelas respostas.

Na verdade é para uso pessoal em rede local então prefiro Mysql.

Me parece que o xHarbour oferece melhor suporte a acesso em banco de dados, ou estou enganado?

Voces mais tarimbados, teriam um nmodelo de codigo ou classe de conexão de harbour ou xHarbour com Mysql?

Grato
Antonio Carlos
Antonio Carlos
Harbour 3.2 (20180213)
Hwgui 2.20 3b | PostGresql 9.5 | ADO/ODBC
Responder