LetoDBf (fork) -> LetoDb com espinafre

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

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por rubens »

Boa tarde..
Itamar, como seria então... ?
Obrigado
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por fladimir »

Então o ruim é q 90% do meu sistema seja temporário ou não uso dessa forma...
Pra mim alterar tudo seria muito trabalho tento vista outros projetos.

Mas agradeço a todos.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por asimoes »

Fladmir,

Um exemplo de como eu faço os indices temporários com LetoDbf

Código: Selecionar todos

cOrder := [ CODIGO ]
cQuery := [ ! Left( Classe_Pg, 2 ) $ "06,08,10,11,12" .AND. Empty( D_Faleci ) .AND. Empty( D_Deslig ) .AND. ! Deleted() ]
INDEX ON &cOrder. TAG A020100 FOR &cQuery. TEMPORARY ADDITIVE EVAL oClPF:Evento()
►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)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por asimoes »

Essa aqui foi meio fo.. de fazer por que é um filtro para um do while..enddo

Código: Selecionar todos

cVar1 := 'APC01->D_CL10 >= CTOD(' + ['] + DTOC( ThisForm:oDataIni:GetValue() ) + ['] + ') .AND. '
cVar2 := 'APC01->D_CL10 <= CTOD(' + ['] + DTOC( ThisForm:oDataFim:GetValue() ) + ['] + ') .AND. '   
CVar3 := cVar1 + cVar2 + 'Left( APC01->Classe_Pg, 2 ) = "10"'
nRegistros := ::GravaTemp( CVar3 )   
►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)
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por fladimir »

Obrigado por compartilhar Alexandre.

Esse ultimo ai ta loco... eu tb qdo o negocio é complexo subdivido e vou juntando depois as partes A B C etc.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por asimoes »

Fladimir,

Consegui indexar o seu exemplo e mostrar os dados:
Obs. Substitui o Browse() por DbEdit(), mas os registro foram exibidos.
Note que eu usei leto_dbcreateTemp()

Código: Selecionar todos

  arquivotmp := "TESTE"
   
   cli1       := "001"
   
   cli2       := "002"
   
   cGrupo     := "01"
   
   leto_dbcreateTemp( "mem:clientes", aField, "DBFCDX", .T., "clientes")
   
   INDEX ON Clientes->Codigo  TAG Temp01  TO (arquivotmp) ;
          FOR VAL(Clientes->Codigo) >= VAL(cli1) .and.  VAL(Clientes->Codigo) <= VAL(cli2) .and.;
          Clientes->MalaDireta=="S" .and. Clientes->Situacao==cGrupo ADDITIVE MEMORY
   
   clientes->( DbAppend() )
   Clientes->Codigo     := "001"
   clientes->Situacao   := "01"
   Clientes->MalaDireta := "S"
   clientes->( DbCommit() ) 
     
   clientes->( DbAppend() )    
   Clientes->Codigo     := "002"
   clientes->Situacao   := "01"
   Clientes->MalaDireta := "S"
   clientes->( DbCommit() )
   
   clientes->( DbGoTop() )
   
   DbEdit()
►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)
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por fladimir »

Interessante, vou ver se consigo voltar aos testes..

Vlw Alexandre.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por asimoes »

Fladimir,

Confirmando o que já foi disse pelo Itamar:
O que está do lado do servidor tem que existir nele.

Acho que vale a pena modificar os indices temporários, veja: a criação

Código: Selecionar todos

//INDEX ON Clientes->Codigo  TAG Temp01  TO (arquivotmp) ;
//       FOR VAL(Clientes->Codigo) >= VAL(cli1) .and.  VAL(Clientes->Codigo) <= VAL(cli2) .and.;
//       Clientes->MalaDireta=="S" .and. Clientes->Situacao==cGrupo ADDITIVE MEMORY

cOrder := [ Codigo ]
cQuery := [ VAL(Codigo) >= ] + Hb_NtoS( Val( cli1 ) ) + [ .AND. VAL( Codigo ) <= ] + Hb_NtoS( Val( cli2 ) ) + [ .AND. ] + ;
          [ MalaDireta == "S" .AND. Situacao == '] + cGrupo + [']

INDEX ON &cOrder. TAG Temp01 TO (arquivotmp) FOR &cQuery. ADDITIVE MEMORY 

Código: Selecionar todos

  If Leto_File( "clientes.dbf")
      DbUseArea( .T., "LETO", oASAPREV:cServidorDB + "clientes", "clientes", .T. ) 
   Else
      DbCreate( oASAPREV:cServidorDB + "clientes", aField, "LETO" )
      DbUseArea( .T., "LETO", oASAPREV:cServidorDB + "clientes", "clientes", .T. ) 
   Endif
      
   INDEX ON Clientes->Codigo  TAG Temp01  TO (arquivotmp) ;
          FOR VAL(Clientes->Codigo) >= VAL(cli1) .and.  VAL(Clientes->Codigo) <= VAL(cli2) .and.;
          Clientes->MalaDireta=="S" .and. Clientes->Situacao==cGrupo ADDITIVE MEMORY
          
 Descrição do erro: 

Error LETO/1003  : Variable does not exist CLI1
Called from ->ORDCREATE(0)
Called from TESTE.PRG->TESTE(137)
Called from ASAPREV.PRG->(b)CLASAPREV_CHAMAROTINA(559)
Called from ASAPREV.PRG->CLASAPREV:CHAMAROTINA(559)
Called from ASAPREV.PRG->(b)CLASAPREV_ASAPREV(474)
Called from ->ONCOMMAND(868)
Called from ->(b)HMAINWINDOW(255)
Called from ->HMAINWINDOW:ONEVENT(474)
Called from ->HWG_ACTIVATEMAINWINDOW(0)
Called from ->HMAINWINDOW:ACTIVATE(430)
Called from ASAPREV.PRG->CLASAPREV:ASAPREV(530)
►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)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por asimoes »

Fazendo uma analogia com uma query em um banco relacional SELECT * FROM TABELA WHERE cWhere ORDER BY cOrder

cOrder := [ Codigo ]
cWhere := [ VAL(Codigo) >= ] + Hb_NtoS( Val( cli1 ) ) + [ .AND. VAL( Codigo ) <= ] + Hb_NtoS( Val( cli2 ) ) + [ .AND. ] + ;
[ MalaDireta == "S" .AND. Situacao == '] + cGrupo + [']

INDEX ON &cOrder. TAG Temp01 TO (arquivotmp) FOR &cWhere. ADDITIVE MEMORY
►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)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por asimoes »

Uma função simples que ajuda na formação da criação do indice FormatQuotes()

Código: Selecionar todos


cOrder := [ Codigo ]
cWhere := [ VAL(Codigo) >= ] + Hb_NtoS( Val( cli1 ) ) + [ .AND. VAL( Codigo ) <= ] + Hb_NtoS( Val( cli2 ) ) + [ .AND. ] + ;
          [ MalaDireta == "S" .AND. Situacao == ] + FormatQuotes( cGrupo )


Function FormatQuotes( cString )
   
   cString := StrTran( cString, '"', "'" )
   
   cString := ["] + cString + ["]
    
Return cString
►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)
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por fladimir »

Bacana Alexandre, obrigado pelas informações e exemplos.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por asimoes »

Controle de transação com LetoDbf, muito interessante:

Código: Selecionar todos

  Begin Sequence  With __BreakBlock()
  
      leto_BeginTransaction(.T.)   
      
      IF Clientes->( DbAppend() )
         IF ( lApp := NetErr() )
            Break
         ENDIF
      ENDIF   
      Clientes->Codigo     := "001"
      clientes->Situacao   := "01"
      Clientes->MalaDireta := "S"
      clientes->( DbRUnLock() ) 
      
      IF Clientes->( DbAppend() )
         IF ( lApp := NetErr() )
            Break
         ENDIF
      ENDIF       
      Clientes->Codigo     := "002"
      clientes->Situacao   := "01"
      Clientes->MalaDireta := "S"
      clientes->( DbRUnLock() ) 
      
      //A=B //aqui é para provocar o erro
      
      leto_CommitTransaction()
      
      clientes->( DbGoTop() )
      
   Recover
      Alert("Erro incluindo registro(s)")
      leto_Rollback()
      RETURN Nil
   End
   
   DbEdit()
►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)
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por rubens »

Boa tarde...

Sobre a criação de índices temporários tb tem essa observação no manual..
# Using temporary index orders [ created in Server OS temporary path ] are only possible in
mode: NO_Save_Wa = 1.
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
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

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por Itamar M. Lins Jr. »

Ola!
Pra mim alterar tudo seria muito trabalho tento vista outros projetos.
Que forma ? Não muda nada no seu comando. Fica Igual, somente a parte de CLI1,CLI2,cGrupo que vc precisa troca antes para o conteúdo da variável, qualquer sentença SQL não é assim ?

Código: Selecionar todos

cQuery := ... + " ' " + cli1 + " ' " +  ... 
cQuery := ... + " ' " + cGrupo + " ' " + ...
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

LetoDBf (fork) -> LetoDb com espinafre

Mensagem por fladimir »

Fui pesquisar aki pra ver qts linhas teria q trocar até q não é muito

Imagem

Daria pra fazer em uns 3 a 5 dias.

Mas como disse o projeto q contém essas linhas não teria necessidade de alteração pq uso processamento já no servidor e acesso TS e são monousuários, não multi empresa.

Como estou envolvido em outros projetos, vou avaliar se mudo ou permaneço dessa forma.

Agradeço aos amigos aki do fórum, em especial desse post pelas dicas e auxilio em testes/ideias.

Vlw galera.

Abraço.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Responder