Dbf na memoria

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

Moderador: Moderadores

Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Dbf na memoria

Mensagem por janio »

Ola a todos,

Estou fazendo uns testes com dbf temporario na memoria, muito bom por sinal. Ocorre q qndo crio algum indice desse dbf, o comando dbDrop( "mem:test" ) apaga o 'dbf virtual', mas NAO o indice dele. O indice continua la na memoria e qndo tento criar outro dbf com outra estrutura, tem dado erro!

Como apagar tbm o indice?

Código: Selecionar todos

			aCampos := {} 
		   aAdd( aCampos , { "PEDIDO" , "N" ,  8 , 0 } )
			aAdd( aCampos , { "NRFECF" , "C" ,  21, 0 } )
		   aAdd( aCampos , { "NUMCCF" , "N" ,  6 , 0 } )
		   aAdd( aCampos , { "NUMCOO" , "N" ,  6 , 0 } )
		   aAdd( aCampos , { "DATEMI" , "D" ,  8 , 0 } )
		   aAdd( aCampos , { "FLGCAN" , "C" ,  1 , 0 } )

		   dbCreate( "mem:test", aCampos, "DBFCDX" , .T., "memArea" )

		   INDEX ON NRFECF + Str(NUMCCF) TAG CHAVE1

			Close memArea
		  	dbDrop( "mem:test" ) // aqui apaga apenas o dbf. E o indice????

fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Dbf na memoria

Mensagem por lugab »

Jânio,

Acho q o bom e velho Hb-Run () executa qq coisa, até mesmo um Hb-Run ("delete arquivo.cdx")

By the way, vc poderia nos mostar como faz o dbseek() neste arquivo em memória, pra localizar um determinado registro pela chave criada ??.
lugab
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Dbf na memoria

Mensagem por Itamar M. Lins Jr. »

Resposta de quem fez.
dbDrop() deletes table, memofile and production index if they exist.

best regards,
Przemek
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Dbf na memoria

Mensagem por janio »

Itamar,

Acho que descobri o que está acontecendo!

Meu rdd default eh "MEDCDX" pq uso o Mediator... dae preciso colocar "DBFCDX" como parametro no dbcreate.

DBCREATE("mem:test", {{"F1", "N", 9, 0}},"DBFCDX", .T., "memarea")

Se omito esse parametro, o erro do indice desaparece, mas por outro lado eh criado uma tabela no mysql e nao um dbf temporario!

Assim da erro na criação do segundo indice:

Código: Selecionar todos

	DBCREATE("mem:test", {{"F1", "N", 9, 0}},"DBFCDX", .T., "memarea")

	INDEX ON F1 TAG CHAVE1

	Close memarea
	DBDROP("mem:test")

	DBCREATE("mem:test", {{"F2", "N", 9, 0}},"DBFCDX", .T., "memarea")

	INDEX ON F2 TAG CHAVE1

	Close memarea
	DBDROP("mem:test")
Assim nao da erro, porém em vez do dbf na memoria eh criado uma tabela fisica no mysql:

Código: Selecionar todos

	DBCREATE("mem:test", {{"F1", "N", 9, 0}},, .T., "memarea")

	INDEX ON F1 TAG CHAVE1

	Close memarea
	DBDROP("mem:test")

	DBCREATE("mem:test", {{"F2", "N", 9, 0}},, .T., "memarea")

	INDEX ON F2 TAG CHAVE1

	Close memarea
	DBDROP("mem:test")
Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Dbf na memoria

Mensagem por janio »

Engraçado, qndo o rdd eh o leto... nao dah problema tbm.

:(

pq so com mediator?

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Dbf na memoria

Mensagem por Kapiaba »

Bom dia Janio,

Tente assim:

Código: Selecionar todos

FUNCTION CRIAR_DBF()

   LOCAL aDbf

   ***********************************
   * Minimal Clipper/Mediator program

   #Include "mediator.ch" && optional if not using Mediator macros

   request medntx && mandatory

   //RDDSETDEFAULT("MEDNTX") && set default data source to MEDNTX RDD driver
   && OR
   RDDSETDEFAULT("MEDCDX") && set default data source to MEDCDX RDD driver

   USE PRT

   ? "Connected to Mediator server"

   * Any database operations coming here will operate on
   * database server instead of DBF files!

   WAIT

   ? "Disconnecting from Mediator - Bye"

   // DBCREATE(<cDatabase>, <aStruct>, [<cDriver>])

   aDbf := {}
   AADD(aDbf, { "Name",    "C", 25, 0 })
   AADD(aDbf, { "Address", "C", 1024, 0 })
   AADD(aDbf, { "Phone",   "N", 13, 0 })
   //DBCREATE("PRT", aDbf,   "MEDNTX")
   DBCREATE("PRT", aDbf,   "MEDCDX")
   USE

RETURN NIL
https://pctoledo.org/forum/viewto ... 6&start=15

Abs
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dbf na memoria

Mensagem por JoséQuintas »

Pra mim a coisa parece simples:
Nos RDDs do Harbour, ao criar "mem:" cria na memória.
O RDD mediator passa a usar o mediator, e no mediator não existe o recurso de "mem:"., pois depende do banco de dados utilizado.
A saída seria usar DBFCDX para esse arquivo na memória

Quanto ao lettodb, não deveria aceitar também.
Pra que criar arquivo temporário na memória do servidor?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

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

Dbf na memoria

Mensagem por Itamar M. Lins Jr. »

Engraçado, qndo o rdd eh o leto... nao dah problema tbm.
Porque usa o RDDCDX ou NTX do Harbour mais novo!
O mediator deve estar desatualizado deve ter sido criado antes dessa feature da criação do arquivo "mem:"
De que ano é esse mediator ?

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

Dbf na memoria

Mensagem por Itamar M. Lins Jr. »

Pra que criar arquivo temporário na memória do servidor?
E quem disse que irá criar no servidor o arquivo temporário ?
Já testou p/ ver se é assim que funciona ?
Se ele muda de "LETO" para "DBFCDX" ou "DBFNTX", lógico que é para ser criado na própria estação.

Na estação!

Código: Selecionar todos

DBCREATE("mem:test", {{"F1", "N", 9, 0}},"DBFCDX", .T., "memarea")
Na estação!

Código: Selecionar todos

dbCreate( "testdbf", aStruct, "DBFCDX", .T., "MYALIAS" )
No servidor!

Código: Selecionar todos

DBCREATE("LETO", {{"F1", "N", 9, 0}},"leto", .T., "leto")
Pelo menos eu acredito que funcione assim, com o LETO é assim, falta testar a criação do arquivo mem:

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Dbf na memoria

Mensagem por janio »

Amigos,

A criação do TEMPORÁRIO eh na memoria da ESTAÇÃO! O mediator está criando uma tabela física, no hd e não na memoria. É um bug do Mediator. Não deveria ser assim. Deve ser pq a minha versão do mediator, como disse o Itamar, deve ser de antes desse 'benefício' do harbour.

Vou verificar...

Ja com o LETO funciona direitinho! Qndo vc manda criar um dbf no servidor, ele cria no servidor... qndo vc manda criar um dbf na MEMORIA da ESTAÇÃO, ele cria... enfim, funciona!

Talvez uma solução seria antes de criar o mem: mudar o rdd default para DBFCDX e depois voltar para MEDCDX... mas ae daria um trabalho em tanto. Deixar como tá (criando o dbf no hd da estação), por enquanto!

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Dbf na memoria

Mensagem por Itamar M. Lins Jr. »

Explicação legal do Przemek, de como funciona e a sintaxe.
Um problema parecido com o seu.
Your impression was correct.
The problem was only with your code.
You haven't set DBFCDX as default RDD so
dbDrop( "MEM:det" )
was executed by DBFNTX RDD and for sure DBFNTX cannot delete CDX
production index. You only have to fix your code and add
rddSetDefault( "DBFCDX" )
at the beginning so
dbDrop( "MEM:det" )
will be executed by DBFCDX or pass explicitly "DBFCDX" to dbDrop()
function, i.e.
dbDrop( "MEM:det",, "DBFCDX" )

By default dbDrop() removes table, memofile and production indexes for
given RDD. If you want to remove non production indexes then you should
use:
dbDrop( <cTable>, <cIndex> [, <cRDD> ] )
Some RDDs may bind indexes with tables (i.e. SQL based RDDs) so table
name should be also given for portable programs though DBF* RDDs do not
use it when indexes are deleted.

> I tested it with ferase("mem:det.cdx" ) which returns -1 and still get
> this error, so please if you can show how to get rid of this cdx.

hb_vf*() functions allow to access Harbour virtual filesystems, i.e.:
hb_VFErase( "mem:det.cdx" )

Look at the changelog about other hb_vf*() functions or ask on
harbour-user list for help.

best regards,
Przemek

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Dbf na memoria

Mensagem por janio »

Legal Itamar!

Vou fazer mais alguns testes!

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Dbf na memoria

Mensagem por janio »

Itamar,

Aparentemente agora está funcionando!

dbDrop() tem um terceiro parametro para informar o RDD!

Show!

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Responder