Página 1 de 1

Banco de dados

Enviado: 01 Set 2012 12:35
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

Banco de dados

Enviado: 01 Set 2012 13:07
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


Banco de dados

Enviado: 01 Set 2012 17:01
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...

Banco de dados

Enviado: 01 Set 2012 18:15
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