Letodbf - problema ao usar console e hmg simultâneos

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

Moderador: Moderadores

Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Letodbf - problema ao usar console e hmg simultâneos

Mensagem por Nascimento »

Itamar M. Lins Jr. escreveu : Mas quem já usa LetoDbf não se preocupa com isso
passo uma coisa intrigante com o letodbf

tenho um sistema semi-console usando a gtwvt
estou portando para harbour/minigui

me deparei com o seguinte problema usando o letodbf

se eu usar todos os modulos do semi console com o letodbf funcionam tranquilamente

mais se eu abrir o modulo portado grafico "hmg" não consigo abrir, se eu abrir varias instancias do portado hmg abre normalmente

deixa ver se eu explico melhor....
se eu abrir primeiro o modulo recepção semi-console e em outro pc abrir o modulo recepção que portei pra hmg , da erro de travamento requerido ou seja é como se um banco não estivesse liberado...

mas se eu abrir varias instancias do modulo recepção com hmg em varios computadores abre tranquilamente

se eu abrir todos os modulos do semi-console , tambem abrem normalmente, o interessante é que a criação dos dbf´s e cdx´s em ambos são do mesmo jeito

ou seja consigo abrir os modulos do mesmo tipo , ou tudo grafico, ou tudo console, se eu abrir um de um e outro de outro trava , nos debug´s percebi que é como se o banco tivesse aberto exclusivo e não compartilhado

Obs: meu sistema é modular, modulos : cozinha, portaria , recepção
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Tabela DBF apaga os registros

Mensagem por JoséQuintas »

Se mistura gtwvt e migui... provavelmente pode estar usando multithread.
A conexão é visível em multithread?
O aplicativo é multithread?
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
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Tabela DBF apaga os registros

Mensagem por Nascimento »

JoséQuintas escreveu :
Se mistura gtwvt e migui...
não amigo quintas, são aplicativos destintos, um compilado so com a gtwvt e outro com a minigui
segue abaixo a imagem
este é o modo console , usando letodbf
este é o modo console , usando letodbf
este é o portado para minigui tambem usando letodbf
este é o portado para minigui tambem usando letodbf
se eu abrir o modo console, e esse modo grafico, um dos 2 travam e não abrem, mesmo usando a mesma maneira de criação de dbf/cdx com o letodbf

mais se eu abrir todos os modulos consoles, ou todos os modulos graficos abrem normalmente
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Tabela DBF apaga os registros

Mensagem por JoséQuintas »

Problemas malucos, soluções malucas.... compile os dois juntos pra ver o que dá.

Módulo principal:

Código: Selecionar todos

PARAMETERS cConsole

IF PCount() != 0
   MainConsole()
   QUIT
ENDIF
MainMiniGUI()
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
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Tabela DBF apaga os registros

Mensagem por Nascimento »

JoséQuintas escreveu:
Problemas malucos, soluções malucas.... compile os dois juntos pra ver o que dá.
acho que ou o amigo não entendeu ,ou eu não entendi o que o amigo sugeriu

eu crio abro as tabelas e crio os indices de maneira igual tanto na compilação 100% console "gtwvt", como na versão grafica "hmg"

so da pau se eu abrir um grafico e um console, se eu abrir varias instancias do console não a problema, como tambem se eu abrir varias instancias do grafico
tambem não da pau

ja li , re li a função que abro a dbf e os indices e não vejo erros

abaixo esta um pequeno exemplo de como abro os indices no modo grafico e no modo console

Código: Selecionar todos

// Modo grafico com a minigui
#include 'minigui.ch'   
   #include "rddleto.ch"
Function Net_use()
  parameters cFiledbf,cAlias,cFilecdx,lexcl,lretry
  private lforever
  private aFilecdx
  private bFilecdx
  private bFiledbf
  private nomearq
  lretry   := iif(type("lretry") != "N",500,lretry)
  lexcl    := iif(type("lexcl") != "L",.F.,lexcl)
  lforever := lretry == 0
  bFiledbf:= cFiledbf+'.DBF'  
  cFiledbf := PathLeto+cFiledbf+'.DBF'
  aFilecdx:= cFilecdx+".CDX"
  bFilecdx:= cFilecdx                    //"MCOCUP"
  cFilecdx := PathLeto+cFilecdx+'.CDX'  //"MCOCUP.CDX" 
     cDriver := "LETO"
  if !vFile(bFiledbf)
      msginfo("VERIFIQUE SE O SERVIDOR ESTA LIGADO OU A CONEXAO ESTA ATIVA  "+bFiledbf)
     quit
  endif   
  protect (bFiledbf,"D")
  do while (lretry > 0 .or. lforever)
     if (lexcl)
        DbUseArea( .T., cDriver, cFiledbf, cAlias,  .F.  )
     else 
        DbUseArea( .T., cDriver, cFiledbf, cAlias,  .T.  )
*        msgdebug(cfiledbf)
     endif
     if (Used())
        exit
     endif
     lretry =- 1
  enddo
  if (Used())
     *-------------------------------------------
     if (bFilecdx = "MCOCUP")
        if (!vFile(aFilecdx))
           nomearq := bFilecdx   
           index on sui tag sui to (cFilecdx)         
        endif
        DbSetIndex( cFileCdx )
     endif
endif

Código: Selecionar todos

// modo console
  #include "rddleto.ch"
Function Net_use
   parameters cFiledbf,cAlias,cFilecdx,lexcl,lretry
   private lforever
   private aFilecdx
   private bFilecdx
   private bFiledbf
   private nomearq
   lretry:= iif(Type("lretry") != "N", 500, lretry)
   lexcl:= iif(Type("lexcl") != "L", .F., lexcl)
   lforever:= lretry == 0 
	bFiledbf:= cFiledbf+'.DBF'  
   cFiledbf := PathLeto+cFiledbf+'.DBF'
   aFilecdx:= cFilecdx+".CDX"
   bFilecdx:= cFilecdx                    //"MCOCUP"
   cFilecdx := PathLeto+cFilecdx+'.CDX'  //"MCOCUP.CDX"
      cDriver := "LETO"
   if !vFile(bFiledbf)
      alert("VERIFIQUE SE O SERVIDOR ESTA LIGADO OU A CONEXAO ESTA ATIVA "+bFiledbf)
      quit
   endif 
   protect(bFiledbf, "D")
   do while (lretry > 0 .or. lforever)
      if (lexcl)
         DbUseArea( .T., cDriver, cFiledbf, cAlias,  .F.  )
      else
         DbUseArea( .T., cDriver, cFiledbf, cAlias,  .T.  ) 
      endif
      if (used())
         exit
      endif
      corantig:= SetColor()
      cor("menu")
      if (mens(24, 11, "Arquivo nao liberado... AGUARDE ", 1) == 27)
         set color to "&corantig"
         exit
      endif
      set color to "&corantig"
      lretry:= lretry - 1
   enddo
   if (used())
      o_cor:= SetColor()
      set color to (contecor[4])
      **
      if (bFileCdx = "MCOCUP")
         if (totarq != 0)
            @ 13, 40 say Space(27)
            @ 13, 40 say "Ocupacoes"
         endif
         if (!vFile(aFilecdx))
            if (totarq != 0)
               @ 13, 40 say Space(27)
               @ 13, 40 say "Indexando Ocupacoes"
            endif
            nomearq:= bFileCdx
            oldcor:= SetColor()
            oldtela:= SaveScreen(19, 14, 20, 70)
            set color to (contecor[4]) 
            index on sui tag sui to (cFileCdx)                          
            set color to (oldcor)
            RestScreen(19, 14, 20, 70, oldtela)
            if (totarq != 0)
               recat:= recat + 100 / totarq
               termoh2(recat)
            endif
         else
            if (totarq != 0)
               recat:= recat + 100 / totarq
               termoh2(recat)
            endif
         endif
         DbSetIndex( cFileCdx )
      endif
endif
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Tabela DBF apaga os registros

Mensagem por JoséQuintas »

Você é que não entendeu.

Se um EXE funciona e outro não, talvez tudo no mesmo EXE funcione, talvez aí console e GUI usem a mesma referência pro lettodb.

Quando se refere a console... é realmente console?
Faça um teste com GTWVG, talvez o modo Windows faça alguma diferença.
É só acrescentar gtwvg.hbc e nada mais, sem mexer em nada os fontes, é um teste relativamente rápido.
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: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Tabela DBF apaga os registros

Mensagem por Itamar M. Lins Jr. »

Ola!
Assim fica difícil de ajudar.
Tem que ser um exemplo com o mesmo fonte.

Código: Selecionar todos

use xyz.dbf shared new etc...
Com certeza é um problema ai seu. Eu uso desde sempre com WVT e Hwgui. WVG + Hwgui... etc.. Não tem problema nenhum, roda o gerenciador para ver o estado dos dbf's. Gerenciador do LetoDbf.
Pode abrir o mesmo DBF com qualquer coisa. ADO, RDDCDX, LETO, NETIO...
Isso não e problema nem do LETO a bem da verdade. Alguma coisa ai trava o registro. Eu abro pelo Letodbf, com ele aberto acesso até pelo DBU, lógico que em modo compartilhado.
Com modo SHARED, tem que deixar abrir com qualquer RDD simultaneamente, FOXPRO, etc...

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Tabela DBF apaga os registros

Mensagem por Nascimento »

Itamar M. Lins Jr. escreveu :
Ola!
Assim fica difícil de ajudar.
Tem que ser um exemplo com o mesmo fonte.
nobre se vc observar , o net_use() é o mesmo a maneira de abrir é da mesma forma
sei que deve ser algum pequeno erro meu, mais não consegui compreender ainda o erro

olha acima eu botei um exemplo do net_use() que uso no modo gráfico e no modo console, observe que são indenticas,
com pequenas diferenças no modo console porque tem uma barra de progresso, mais o miolo é o mesmo digamos assim
e se ficou alguma duvida no que postei, posso tentar explicar melhor, eu não entendi o caso de um exemplo do proprio fonte

como falei acima botei o exemplo de como abro os dbf´s e indices no modo console e no modo gráfico..

att: Nascimento
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Tabela DBF apaga os registros

Mensagem por JoséQuintas »

Parei de olhar os fontes quando vi PRIVATE.... coisa de 40 anos atrás, e grande fonte de problemas.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Tabela DBF apaga os registros

Mensagem por JoséQuintas »

Pergunta meio idiota....
O que faz o Protect( dbf ) ? impede o uso por outro aplicativo?
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
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Tabela DBF apaga os registros

Mensagem por Nascimento »

sim , bloqueia alguns dbf´s para uso de outro soft, mais ja observei o motivo do erro não é esse, ja retirei
em fim amanhã tenho uma viagem, volto na quarta e vou refazer passo a passo e ver no que vai dar
uso privates sem problemas até hj
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Tabela DBF apaga os registros

Mensagem por Nascimento »

JoséQuintas escreveu:
Pergunta meio idiota....
O que faz o Protect( dbf )
sim bloqueia alguns dbf´s para o uso em outros programas
mais a causa do erro não é ele ja fiz esse teste, enfim tenho que viajar amanhã
volto possivelmente na quarta, ai vou iniciar pequenos testes e ver no que dá
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Tabela DBF apaga os registros

Mensagem por JoséQuintas »

No editor de texto deu pra ver melhor.
Melhor refazer essa função, está muito ruim.
Não analisa direito se abriu DBF, e muito menos se abriu CDX.
E mistura teste de abrir arquivo com outras coisas.
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
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Tabela DBF apaga os registros

Mensagem por Nascimento »

na função eu vejo se o arquivo existe
com o vfile()
bom o que eu estava tentando falar era isso aqui vejam as imagens
observe que aqui ta aberto 2 modulos em modo console , o auxiliar e o modulo caixa
observe que aqui ta aberto 2 modulos em modo console , o auxiliar e o modulo caixa
agora observe que eu abri o modulo grafico com a hmg e abaixo estou tentando abrir o modulo  auxiliar modo console
agora observe que eu abri o modulo grafico com a hmg e abaixo estou tentando abrir o modulo auxiliar modo console
JoséQuintas escreveu :
No editor de texto deu pra ver melhor.
Melhor refazer essa função, está muito ruim.
Não analisa direito se abriu DBF, e muito menos se abriu CDX.
E mistura teste de abrir arquivo com outras coisas.
uso o file() para checar se existe tanto o dbf quanto o cdx ela é meia confusa mesmo,
mais lendo direitinho da pra entender
agora na função used() eu li tempos atrás que estava obsoleta, qual melhor opção para
por no lugar dela?
talvez seja esse o problema
Syntax

Used() → lDbfOpen

Arguments
(This function has no arguments)
Returns
lDbfOpen True is a database is Used;otherwise False
Description
This function returns a logical true (.T.) if a database file is in USE in the current or designated work area.
If no alias is specified along with this function , it will default to the currently selected work area.
Examples:

USE test NEW
USE names NEW
? Used() // --> .T.
? test->( Used() ) // --> .T.
dbCloseArea()
? Used() // --> .F.
SELECT test
? Used()
https://harbour.github.io/doc/harbour.html#used
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Ranier
Usuário Nível 2
Usuário Nível 2
Mensagens: 80
Registrado em: 02 Abr 2019 09:01
Localização: Goiania/Goias

Tabela DBF apaga os registros

Mensagem por Ranier »

Olá, posso fazer duas sugestões.
A primeira, use NetErr() ao invés de Used() para verificar se ocorreu erro na abertura,
além do que dbUseArea já retorna .T. se ok, e .F. se falhou, bastaria então:
lret = DbUsearea()
Mas, sempre usei NetErr com sucesso.

A segunda, sempre crie um tópico novo para questionar a respeito de outro assunto, mesmo que relacionado,
e sempre coloque [RESOLVIDO] para ajudar outros que estão passando pelo mesmo problema.
Responder