Criar DBF temporário em memória

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

Moderador: Moderadores

alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Criar DBF temporário em memória

Mensagem por alxsts »

Olá!

Há algum tempo li um tópico sobre o assunto, neste fórum. Creio que foi postado pelo Itamar. Gostaria de testar isso, ver se melhora a performance. Só não consegui achar o referido tópico. Alguem conhece o assunto?

Grato
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Criar DBF temporário em memória

Mensagem por sygecom »

Buenas,
Melhora e muito a performance.
Não sei o que você está usando, mas para xHarbour 1.2.1 você tem que linkar a LIB (filemem.lib) e abaixo segue um pequeno exemplo da contrib:

Código: Selecionar todos

/*
 * $Id: test.prg,v 1.1 2009/10/05 14:41:55 marchuet Exp $
 */

REQUEST HB_MEMIO

PROC Main()
   LOCAL nI
   FIELD F1

   DBCREATE("mem:test", {{"F1", "N", 9, 0}},, .T., "memarea")
   FOR nI := 1 TO 1000
     DBAPPEND();  F1 := HB_RANDOM() * 1000000
   NEXT
   INDEX ON F1 TAG f1
   DBEVAL({|| QOUT(F1)})
   DBCLOSEAREA()
   DBDROP("mem:test")  // Free memory resource

   RETURN
Para Harbour 2.0 tens que linkar a lib (hbmemio.lib) e abaixo segue um pequeno exemplo da contrib:

Código: Selecionar todos

/*
 * $Id: test.prg 12600 2009-09-22 12:57:36Z vszakats $
 */

REQUEST HB_MEMIO

PROC Main()
   LOCAL nI
   FIELD F1

   DBCREATE("mem:test", {{"F1", "N", 9, 0}},, .T., "memarea")
   FOR nI := 1 TO 1000
     DBAPPEND();  F1 := HB_RANDOM() * 1000000
   NEXT
   INDEX ON F1 TAG f1
   DBEVAL({|| QOUT(F1)})
   DBCLOSEAREA()
   DBDROP("mem:test")  // Free memory resource

   RETURN
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Criar DBF temporário em memória

Mensagem por sygecom »

E não deixe de olhar o LetdoDB também que é um ótimo projeto que agiliza muito o uso de DBF em rede e remoto:
http://sourceforge.net/projects/letodb/
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Criar DBF temporário em memória

Mensagem por alxsts »

Olá!

Leonardo:
Obrigado pela resposta. Foi isso mesmo que eu havia visto.

No que se refere a xBase, eu tinha parado no Clipper 5.2e. Por uma dessas reviravoltas que a vida dá, após passar por outras ferramentas, acabei sendo alocado em um projeto que usa xHarbour. Como não conheço o assunto, encontrei na pesquisa do fórum um pacote demo que você postou, onde tem o xHarbour e a HwGui. É o que instalei na minha máquina:

Código: Selecionar todos

HbMake v1.20 - xHarbour Make Utility
Copyright (C) 2000-2007 xHarbour project - http://www.xharbour.org
xHarbour build 1.0.0 Intl. (SimpLex) / Borland C++ 5.5.1
No cliente, ainda não olhei qual é a versão mas, sei que é a comercial. Nesta primeira semana, já vi que terei que fazer algumas otimizações de performance (tem processos na empresa que demoram 14 horas para rodar). Por isso estou procurando aprender essas rotinas que diminuem I/O.

Voltando aos exemplos que você postou, não consegui gerar os executáveis. Faltam as duas libs que você mencionou.

Código: Selecionar todos

c:\BCC55\BIN\ilink32  @makefile.lnk
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_HB_FUN_HB_MEMIO' referenced from C:\LIXO\OBJ\DBMEM1.OBJ
Meu Set Lib:
C:\lixo>set lib
LIB=c:\Bcc55\lib;c:\xHarbour\lib;c:\hwgui\lib

C:\lixo>
Provavelmente a versão está desatualizada. E o pior é que não sei como atualizar.

Alguma dica?

Obrigado mais uma vez.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Criar DBF temporário em memória

Mensagem por asimoes »

Eu faria uso de uma hash table, 100% garantido ser uma tabela em memória
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder