Clipper On Line • Ver Tópico - LetoDBf (fork) -> LetoDb com espinafre

LetoDBf (fork) -> LetoDb com espinafre

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor asimoes » 13 Nov 2018 12:13

Itamar M. Lins Jr. escreveu:Olá!
Não vai funcionar em versão nenhuma.
Cli1,cli2,cgrupo não existem do lado do servidor. Nem com nenhum SGBD. Esqueceu que precisa usar '+' para juntar a query ?

Saudações,
Itamar M. Lins Jr

É dessa forma que eu faço é até uma dica antiga do Itamar
►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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4187
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 292 vezes
Mens.Curtidas: 209 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor rubens » 13 Nov 2018 14:37

Boa tarde..
Itamar, como seria então... ?
Obrigado
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1446
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 69 vezes
Mens.Curtidas: 93 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor fladimir » 13 Nov 2018 14:55

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”
.


DESKTOP CONSOLE Harbour | MinGW | DBF | CDX | FastReport | MySQL
DESKTOP VISUAL... Harbour | MinGW | Xailer | MariaDB Nativo | FastReport
MOBILE Android/IOS e WEB - Windev Mobile 22
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2363
Data de registro: 15 Nov 2006 19:21
Curtiu: 26 vezes
Mens.Curtidas: 137 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor asimoes » 13 Nov 2018 17:12

Fladmir,

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

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4187
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 292 vezes
Mens.Curtidas: 209 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor asimoes » 13 Nov 2018 17:16

Essa aqui foi meio fo.. de fazer por que é um filtro para um do while..enddo
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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4187
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 292 vezes
Mens.Curtidas: 209 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor fladimir » 13 Nov 2018 17:32

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”
.


DESKTOP CONSOLE Harbour | MinGW | DBF | CDX | FastReport | MySQL
DESKTOP VISUAL... Harbour | MinGW | Xailer | MariaDB Nativo | FastReport
MOBILE Android/IOS e WEB - Windev Mobile 22
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2363
Data de registro: 15 Nov 2006 19:21
Curtiu: 26 vezes
Mens.Curtidas: 137 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor asimoes » 13 Nov 2018 17:40

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()

  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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4187
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 292 vezes
Mens.Curtidas: 209 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor fladimir » 13 Nov 2018 18:38

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”
.


DESKTOP CONSOLE Harbour | MinGW | DBF | CDX | FastReport | MySQL
DESKTOP VISUAL... Harbour | MinGW | Xailer | MariaDB Nativo | FastReport
MOBILE Android/IOS e WEB - Windev Mobile 22
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2363
Data de registro: 15 Nov 2006 19:21
Curtiu: 26 vezes
Mens.Curtidas: 137 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor asimoes » 13 Nov 2018 19:02

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
//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


  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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4187
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 292 vezes
Mens.Curtidas: 209 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor asimoes » 13 Nov 2018 19:09

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4187
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 292 vezes
Mens.Curtidas: 209 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor asimoes » 13 Nov 2018 19:23

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


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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4187
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 292 vezes
Mens.Curtidas: 209 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor fladimir » 13 Nov 2018 20:45

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”
.


DESKTOP CONSOLE Harbour | MinGW | DBF | CDX | FastReport | MySQL
DESKTOP VISUAL... Harbour | MinGW | Xailer | MariaDB Nativo | FastReport
MOBILE Android/IOS e WEB - Windev Mobile 22
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2363
Data de registro: 15 Nov 2006 19:21
Curtiu: 26 vezes
Mens.Curtidas: 137 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor asimoes » 15 Nov 2018 14:05

Controle de transação com LetoDbf, muito interessante:
  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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4187
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 292 vezes
Mens.Curtidas: 209 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor rubens » 15 Nov 2018 16:30

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 de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1446
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 69 vezes
Mens.Curtidas: 93 vezes

LetoDBf (fork) -> LetoDb com espinafre

Mensagempor Itamar M. Lins Jr. » 15 Nov 2018 18:44

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 ?

cQuery := ... + " ' " + cli1 + " ' " +  ... 
cQuery := ... + " ' " + cGrupo + " ' " + ...


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 3720
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 127 vezes
Mens.Curtidas: 192 vezes

Anterior Próximo



Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro