Acesso ao FireBird

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

Moderador: Moderadores

jelias
Usuário Nível 3
Usuário Nível 3
Mensagens: 260
Registrado em: 27 Ago 2008 11:32
Localização: Minas Gerais

Acesso ao FireBird

Mensagem por jelias »

Amiguinhos,

Tenho um sistema em clipper 5.2e + Blinker 7.0 + Six 3.0, que já está rodando a bastante tempo sem nenhum problema.
Entretanto, o volume de dados tem crescido bastante, e veio a necessidade de criar um sistema de retaguarda, onde é feito análise das vendas. Para atingir as expectativas, fiz um sistema simples em Delphi que importa os dados dos dbf.
Recentimente com a ajuda do AlaminoJúnior e o Wagner, comecei a garimpar com o Xharbour, e hoje estou fazendo um upgrade no sistema usando xHarbour 1.0.0 (simplex) + hgWVW.
Confesso que estou muito feliz com o avanço que fiz.

Pesquisando aqui no forum, vi muita coisa sobre o mysql e pensei em migrar tanto o sistema xHarbour quanto em Delphi para Mysql.

- Agora, existe uma segunda opcão que seria até mais lógica, de deixar por enquanto os meus sistemas dbf normalmente, entretanto atualizando o banco do FireBird automaticamente. Só que é ai que entra a minha dúvida, como fazer isso?

Alguém sabe como eu posso usar o firebird 2.1 com xHarbour 1.0.0 (simplex). O que preciso é gravar os dados somentes, não irei utilizar os fb para query nem em relatórios no xh.

Muito Obrigado a todos!
Abraço!
xHarbour 1.2.1 (simplex) + BCC 5.8.2 + Hwgui + SQLRDD
Clipper 5.2e / Blinker 7
Júlio Cézar Elias
e-mail: jelias@tpnet.psi.br
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: ACESSO AO FIREBIRD

Mensagem por sygecom »

xHarbour acredito que somente usando a versão paga do xharbour.com, mas com harbour tem na pasta CONTRIB, veja abaixo um exemplo da pasta CONTRIB\HBFBIRD

simple.prg

Código: Selecionar todos

/*
 * $Id: simple.prg 10153 2009-02-03 02:05:45Z druzus $
 */

#include "common.ch"

Function main()
    Local oServer, oQuery, oRow, i, x, aTables, aStruct, aKey

    Local cServer := '192.168.1.33:D:\firebird\test\test.gdb' 
    Local cUser := 'sysdba'
    Local cPass := 'masterkey'
    Local nDialect := 1
    Local cQuery
    
    if File('test.gdb')
        FErase('test.gdb')
    end
    
    ? FBCreateDB('test.gdb', cuser, cpass, 1024, 'ASCII', nDialect )
               
    ? "Connecting..."
        
    oServer := TFBServer():New(cServer, cUser, cPass, nDialect)

    if oServer:NetErr()
        ? oServer:Error()
        quit
    end

    ? 'Tables...'
    
    For x := 1 to 1
        aTables := oServer:ListTables()
    
        For i := 1 to Len(aTables)
            ? aTables[i]
        next
    Next        
        
    ? 'Using implicit transaction...'
    
    if oServer:TableExists('TEST')
        oServer:Execute('DROP TABLE Test')
        oServer:Execute('DROP DOMAIN boolean_field')
    end        

    ? 'Creating domain for boolean fields...'
    oServer:Execute('create domain boolean_field as smallint default 0 not null check (value in (0,1))')
    
    oServer:StartTransaction()
    ? 'Creating test table...'
    cQuery := 'CREATE TABLE test('
    cQuery += '     Code SmallInt not null primary key, '
    cQuery += '     dept Integer, '
    cQuery += '     Name Varchar(40), '
    cQuery += '     Sales boolean_field, '
    cQuery += '     Tax Float, '
    cQuery += '     Salary Double Precision, '
    cQuery += '     Budget Numeric(12,2), '
    cQuery += '     Discount Decimal(5,2), '
    cQuery += '     Creation Date, '
    cQuery += '     Description blob sub_type 1 segment size 40 ) '

    oServer:Execute(cQuery)
    
    if oServer:neterr()
        ? oServer:Error()
    end

    oServer:Commit()
    
    oQuery := oServer:Query('SELECT code, dept, name, sales, salary, creation FROM test')    
    wait

    
    ? 'Structure of test table'
    aStruct := oServer:TableStruct('test')
    
    For i := 1 to Len(aStruct)
        ? 
        For x := 1 to Len(aStruct[i]) 
            ?? aStruct[i,x]
        Next            
    next
    
    ? 'Inserting, declared transaction control '
    oServer:StartTransaction()
    
    For i := 1 to 100
        cQuery := 'INSERT INTO test(code, dept, name, sales, tax, salary, budget, Discount, Creation, Description) '
        cQuery += 'VALUES( ' + str(i) + ', 2, "TEST", 1, 5, 3000, 1500.2, 7.5, "12-22-2003", "Short Description about what ? ")'
        
        oServer:Execute(cQuery)  
        
        if oServer:neterr()
            ? oServer:error()
        end              
    Next                    
        
    oServer:Commit()

    oQuery := oServer:Query('SELECT code, name, description, sales FROM test')
    
    aStruct := oQuery:Struct()
    
    For i := 1 to Len(aStruct)
        ? aStruct[i,1], aStruct[i,2], aStruct[i,3], aStruct[i,4]
    Next
        
    aKey := oQuery:GetKeyField()
    
    ? "Fields: ", oQuery:Fcount(), "Primary Key: ", aKey[1]

    oRow := oQuery:Blank()
    
    ? oRow:FCount(), ;
      oRow:Fieldpos('code'), ;
      oRow:Fieldget(1), ;
      oRow:Fieldname(1), ;
      oRow:Fieldtype(1), ;
      oRow:Fielddec(1), ;
      oRow:Fieldlen(1), ;
      len(oRow:Getkeyfield())

    oRow:Fieldput(1, 150)
    oRow:Fieldput(2, 'MY TEST')
    
    ? oRow:Fieldget(1), oRow:Fieldget(2)
    
    ? oServer:Append(oRow)
    
    ? oServer:Delete(oQuery:blank(), 'code = 200')
    
    ? oServer:Execute('error caused intentionaly')    

    DO WHILE ! oQuery:Eof()
        oQuery:Skip()
        ? oQuery:Fieldget(oQuery:Fieldpos('code')), ;
          oQuery:Fieldget(4), ;
          oQuery:Fieldget(2), ;
          oQuery:Fieldname(1),;
          oQuery:Fieldtype(1), ;
          oQuery:Fielddec(1), ;
          oQuery:Fieldlen(1),;
          oQuery:Fieldget(3)
    
        if oQuery:Recno() == 50
            oRow := oQuery:getrow()
            
            oRow:Fieldput(2, 'My Second test')
            ? 'Update: ', oServer:Update(oRow)
        end      
        
        if oQuery:Recno() == 60
            oRow := oQuery:getrow()
            ? 'Delete: ', oServer:Delete(oRow)
        end
    END    

    ? 'Delete: ', oServer:Delete(oQuery:Blank(), 'code = 70')

    oQuery:Refresh()
    
    DO WHILE oQuery:Fetch()
        oRow := oQuery:getrow()
        
        ? oRow:Fieldget(oRow:Fieldpos('code')), ;
          oRow:Fieldget(4), ;
          oRow:Fieldget(2), ;
          oRow:Fieldname(1),;
          oRow:Fieldtype(1), ;
          oRow:Fielddec(1), ;
          oRow:Fieldlen(1),;
          oRow:Fieldget(3)
    END    

    oQuery:Destroy()
    
    oServer:Destroy()
    
    
    ? "Closing..."
        
    return nil
    

Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
RamonXHB
Usuário Nível 3
Usuário Nível 3
Mensagens: 159
Registrado em: 03 Mar 2007 14:55

Re: ACESSO AO FIREBIRD

Mensagem por RamonXHB »

Vc pode usar o adodb/oledb pra usar com o firebird de qualquer versão, pode usar também o adordd pra isso.
Basta ter um conhecimento básico de sql, é algo que já está disponivel no windows xp, funciona bem tanto em harbour como em xharbour, também pode usar com outros bancos sql.
Ramon A. Körber Jr.
Harbour 3.2 MiniGUI Extended Edition
xDevStudio v0.70 - BCC 5.82 - Lazarus FreePascal
Firebird
AdoDB - ODBC
Windows - Linux
Linux User Number 404280
MSN - ramon15061959@hotmail.com
Skype - ramon15061959
ICQ - UIN 82580595
jelias
Usuário Nível 3
Usuário Nível 3
Mensagens: 260
Registrado em: 27 Ago 2008 11:32
Localização: Minas Gerais

Re: Acesso ao FireBird

Mensagem por jelias »

Amiguinhos,

Obrigado pelas respostas. Entretanto RamonXHB, poderia me explicar mais detalhadamente como trabalhar com o ADOdb, visto que pude observar na net é uma biblioteca de abstração de banco de dados.
- Gostaria de saber como compilar, como funciona o processo de gravação no banco Fb com esta biblioteca.
- Por favor, se tiver como citar um exemplo, ficaria muito agradecido.

Muito Obrigado,

Sucesso para todos.

Abraço.
xHarbour 1.2.1 (simplex) + BCC 5.8.2 + Hwgui + SQLRDD
Clipper 5.2e / Blinker 7
Júlio Cézar Elias
e-mail: jelias@tpnet.psi.br
Avatar do usuário
RamonXHB
Usuário Nível 3
Usuário Nível 3
Mensagens: 159
Registrado em: 03 Mar 2007 14:55

Re: Acesso ao FireBird

Mensagem por RamonXHB »

Existe nos arquivos do grupo miniguibrasil do yahoo um exemplo chamado Agendafb, desenvolvido com harbour-minigui, neste exemplo tem todas as necessidades de inclusão, alteração, exclusão e filtragem usando um banco de dados firebird.
Ramon A. Körber Jr.
Harbour 3.2 MiniGUI Extended Edition
xDevStudio v0.70 - BCC 5.82 - Lazarus FreePascal
Firebird
AdoDB - ODBC
Windows - Linux
Linux User Number 404280
MSN - ramon15061959@hotmail.com
Skype - ramon15061959
ICQ - UIN 82580595
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Acesso ao FireBird

Mensagem por gvc »

[RamonXHB]
Vc teria esse arquivo de exemplo para me enviar.
Para entrar baixar o arquivo de onde vc informou, eu teria que fazer incrição no grupo, alem de pertencer ao yahoo.
Como eu só quero ver como é feito (fontes) acho que criar todas as incrições e contas é desperdicio. (dos recursos do yahoo)

Se puder enviar, gvcortez@uol.com.br

Desde já, obrigado.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Acesso ao FireBird

Mensagem por sygecom »

Bom, para quem sabe temos também o SQLRDD que é uma LIB comercial porem muito boa, e que acessa Firebird nativamente e os resultados são otimos com xHarbour.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder