Clipper On Line • Ver Tópico - Browse Filter - Array Filter

Browse Filter - Array Filter

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Browse Filter - Array Filter

Mensagempor gilbertosilverio » 06 Mar 2020 06:47

Ola Amigos,

Uso o exemplo de HWGUI browsefilter, para mover duas bases de dados.


       @ 13,070 BROWSE oBrw1 DATABASE SIZE 1160,310 STYLE WS_TABSTOP     ;
                ON POSCHANGE {|| EVAL(oBrw2:bFirst), ESTOQUE_onPosChange(), oBrw2:Refresh(), oDlg_Busca:Refresh() }

       oBrw1:nHeadHeight := 25
       oBrw1:alias       := 'xESTOQUE'
       oBrw1:nColumns    := 14
       oBrw1:freeze      := 1
       oBrw1:lDispHead   := .T.
       oBrw1:lSep3d      := .T.
       oBrw1:lAdjRight   := .F.
.....
.....
       SELECT (oBrw1:alias)
       @ 13,390 BROWSE oBrw2 DATABASE SIZE 960,200 STYLE WS_TABSTOP AUTOEDIT                      ;
                FIRST {|| XARDEX->( DBSEEK(xESTOQUE->(SUBSTR(DESCRICAO,1,49)), .F.) ) }           ;
                WHILE {|| XARDEX->(SUBSTR(DESCRICAO,1,49)) == xESTOQUE->(SUBSTR(DESCRICAO,1,49))} ;
                ON UPDATE {|| kardex_onPosChange() }

       oBrw2:nHeadHeight := 24
       oBrw2:alias       := 'xARDEX'
       oBrw2:nColumns    := 4
       Obrw2:freeze      := 1

       SELECT (oBrw2:alias)



Alguém já usou e tem um exemplo da manipulação de dois arrays, isso e possível?

Hoje monto dois arquivo dbfs temporario, mais dependendo do tamanho se torna lento, com arrays e bem mais rapido.

Alguma dica?

Grato
gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

Browse Filter - Array Filter

Mensagempor asimoes » 06 Mar 2020 10:08

Sugestão para trabalhar com Grid Array

     
     aVetorPai é o vetor populado a partir de sua tabela, onde axESTOQUE := { {"123", "ABC" }} valores da sua tabela DBF

     aVetorPai := {}
       
     DO WHILE ! EOF()
        aAdd( aVetorPai, {CAMPO1,CAMPO2}) CAMPO DO DBF
     ENDDO

     aVetorFilho := {}
     
     DO WHILE ! EOF()
        aAdd( aVetorFilho, {CAMPO1,CAMPO2}) CAMPO DO DBF
     ENDDO
             
     @ 13,070 BROWSE oBrw1 DATABASE SIZE 1160,310 STYLE WS_TABSTOP

       oBrw1:nHeadHeight := 25
       oBrw1:aArray      := aVetorPai
       oBrw1:nColumns    := 14
       oBrw1:freeze      := 1
       oBrw1:lDispHead   := .T.
       oBrw1:lSep3d      := .T.
       oBrw1:lAdjRight   := .F.
       
       Carregar a GRID  a partir do dbf

       Não precisa atribuir na grid filho, quem fará isso é o change da primeira grid
             
.....
.....
       @ 13,390 BROWSE oBrw2 DATABASE SIZE 960,200 STYLE WS_TABSTOP AUTOEDIT
   
       oBrw2:nHeadHeight := 24
       oBrw2:aArray      := {}
       oBrw2:nColumns    := 4
       Obrw2:freeze      := 1

       No change da primeira grid carregar a segunda grid

       nCurrent := oBrw1:nCurrent

       cDescricao := oBrw1:aArray[nCurrent,iPosicao] //iPosicao é a coluna onde está a descrição

       LOOP para popular a segunda grid a partir da primeira

       aGridFilho := {}

       FOR EACH oElemento IN aVetorFilho
          IF oElemento[iPosDescricao] = cDescricao //
             aAdd( aGridFilho, { oElemento[1], oElemento[2], oElemento[3], oElemento[4] } )
          ENDIF
      NEXT
     
      oBrw2:aArray := aGridFilho
     
      oBrw2:Refresh()

â–º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: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Browse Filter - Array Filter

Mensagempor gilbertosilverio » 06 Mar 2020 10:42

Simões,

Obrigado, vou testar...
gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

Browse Filter - Array Filter

Mensagempor asimoes » 06 Mar 2020 11:33

Ou, no change da grid principal, fazer um seek na tabela que quer carregar os registros e popular a grid filha, tipo

No change da grid principal

aGridFilha := {}

nCurrent := gridprincipal:nCurrent

seek gridprincipal:aArray[nCurrent, coluna)

do while ! eof() .and. campox  = gridprincipal:aArray[nCurrent, coluna)
   aAdd( aGridFilha, {campo1, campo2}
   skip
enddo

GridFilha:aArray := aGridFilha
GridFilha:Refresh()

â–º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: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Browse Filter - Array Filter

Mensagempor JoséQuintas » 06 Mar 2020 20:37

Console com ADO seria uma maravilha, talvez dê pra fazer igual em HWGUI.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Browse Filter - Array Filter

Mensagempor MSDN » 07 Mar 2020 12:56

Usando a API gráfica do Windows ( e de qualquer SO, Linux, Android, etc ) pode-se fazer qualquer coisa, já o contrário não é verdade !
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

Browse Filter - Array Filter

Mensagempor Itamar M. Lins Jr. » 09 Mar 2020 11:17

Ola!
Eu não uso esse recurso. Eu uso o tradicional mesmo.
   browse...
   ON POSCHANGE {||UpGet(nKey,oBrwItens),oBrwNFe:SetFocus()}
...
Static Function UpGet(nKey,oBrwItens)
...
            sb->(OrdSetFocus(1))
            sb->(OrdScope(0,cNF+cModel))
            sb->(OrdScope(1,cNF+cModel))
...

Usando TCP com LetoDbf, não uso SMB(compartilhamento). É instantâneo a movimentação pelos campos. Arquivos de entradas com mais de 100 mil itens por exemplo.

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

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Browse Filter - Array Filter

Mensagempor asimoes » 09 Mar 2020 19:35

Eu recomendo o ADS da SYBASE, usa o dbf com sql, muito bom pra aprender SQL e pensar em migrar para um SGBD
â–º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: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Browse Filter - Array Filter

Mensagempor Itamar M. Lins Jr. » 10 Mar 2020 09:53

Ola!
Passa a receita de como usar o ADS. Quais são as restrições...
O LetoDbf, é só baixar os fontes no git, não tem DLL, nenhuma restrição. Provavelmente terá aporte do Pritpal Bedi, que deverá incluir sintaxe SQL... sem data específica pode demorar ou não, o Elch sumiu ele já pediu acesso ao GIT do LetoDbf mas o Elch não respondeu ainda.

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

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Browse Filter - Array Filter

Mensagempor asimoes » 10 Mar 2020 15:50

Itamar M. Lins Jr. escreveu:Ola!
Passa a receita de como usar o ADS. Quais são as restrições...
O LetoDbf, é só baixar os fontes no git, não tem DLL, nenhuma restrição. Provavelmente terá aporte do Pritpal Bedi, que deverá incluir sintaxe SQL... sem data específica pode demorar ou não, o Elch sumiu ele já pediu acesso ao GIT do LetoDbf mas o Elch não respondeu ainda.

Saudações,
Itamar M. Lins Jr.


Itamar,

Basicamente eu utilizo uma classe que eu fiz para acessar o banco, muito fácil de usar, já preparada para usar o MariaDb também.
O ADS até onde eu sei é free uso, não exige licença, o seu custo será converter toda sintaxe de dbf para chamadas sql.
Eu levei mais ou menos 30 dias convertendo a sintaxe de dbfpara sql, e 15 dias depois de estar 100% funcionando com o ADS para o MariaDb, o meu sistema está a 72h usando o MariaDB, até agora 0 erro.
Além disso o MAriaDb vem com o HeidiSQL pra brincar com o banco e sinceramente não volto mais para o DBF desde que seja temporário porque este recurso posso usar para relatórios ou não.

Tentei muito usar o LetoDb aconteceram umas coisas esquisitas de acesso, perda de acesso que me obrigou voltar para o DBFCDX, só que mês passado deixei a preguiça de lado e investi o meu tempo para usar o ADS, primeiro criando um programa para testar, vi que funcionava e gravava no DBF comecei a conversão do sistema, fui corrigindo as falhas, principalmente de sintaxe sql até ficar "redondo" o resto foi uma migração tranquila, até usilizando um programa que o Quintas criou para subir os dbf´s
â–º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: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Browse Filter - Array Filter

Mensagempor JoséQuintas » 10 Mar 2020 17:47

Itamar M. Lins Jr. escreveu:Passa a receita de como usar o ADS. Quais são as restrições...


No 7.0 o limite eram 20 estações, mas no atual podem ter reduzido, precisa confirmar.

No Harbour tem toda parte de usar ADS, mas precisar gerar LIB separada igual faz com libmysql e outras.
Acredito que fazendo isso, o uso fica igual DBF, mesmo se usar comandos SQL.

O ASimões usou ADO.

Outra opção, que você pode gostar: SQLMIX com ODBC, só precisa instalar o ODBC
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Browse Filter - Array Filter

Mensagempor JoséQuintas » 10 Mar 2020 18:10

Só pra recapitular:

Eu usava ADS Local no VB6, e acessava simultâneo com o Clipper e SIXCDX.
NA ÉPOCA, o único problema usando junto é que o ADS trabalha com tudo aberto, então abrir exclusivo no Clipper deixava de ser opção.
Se tiver índice, e otimizar, ele era usado.
Se tiver índice não compatível, ele era desprezado.

Na época diziam que era mais rápido porque o acesso era em 32 bits, e o Clipper em 16 bits.
Mas pelo jeito não tem a ver, porque é muito mais rápido do que o Harbour, ou talvez, pro Harbour ficar compatível com Clipper continue lento igual o Clipper.

Já postaram, talvez aqui ou no harbour-users, que usando a LIB ADS no Harbour dá pra usar comandos SQL.
Vai ter que pesquisar sobre isso, ou perguntar no harbour-users

ADO não precisa de lib nenhuma, só o createobject, mas altera radical os fontes

SQLMIX não precisa de lib nenhuma, se usar a opção por ODBC, e SQLMIX você já conhece.

O ADO é uma exceção, mas os demais, poderia usar rotinas de APPEND/REPLACE pra gravar, e SQL somente pra leitura, desde que use DBF/CDX ou SIXCDX pra gravar.

Pra teste, pode alterar somente rotinas de consultas pra SQL, assim vai ter uma boa visão do resultado de velocidade, que é o que mais interessa.

Pode ser interessante verificar a LIB ADS no Harbour, e a SQLMIX com ODBC, e tentar trazer todos esses programadores que restam usando DBF para o mundo do SQL.

Por último:
A restrição de estações é proposital, porque por ser uma apresentação do ADS, eles deixaram numa quantidade "livre de erros" digamos assim.
Dizem que dá pra aumentar esse limite, conversando com a empresa do ADS. Talvez seja o mesmo esquema dos tempos do VB6.
Mas é lógico... não vai ser tão eficiente quanto usar um cliente/servidor, então pra muitas estações melhor ir direto pra MySQL/MariaDB.
Na época, o máximo que usei foram uns 12 ou 15 usuários, simultâneo com Clipper.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Browse Filter - Array Filter

Mensagempor asimoes » 10 Mar 2020 19:03

Offtopic: Documentação do ADS
Onde baixar o driver ADS
https://devzone.advantagedatabase.com/dz/content.aspx?Key=20&Release=19&Product=15
â–º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: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Browse Filter - Array Filter

Mensagempor Itamar M. Lins Jr. » 11 Mar 2020 09:50

Ola!
Só para deixar claro, eu estou usando LetoDbf não é o LetoDB.
Não tenho problema com ele. O ADS se for assim, sem restrições, só o fato de usar SQL é uma boa opção, talvez até melhor que o LetoDbf... Mas já vi testes com LetoDBf x ADS e o LetoDBf foi melhor.
Como não estou com pressa nem com problema usando DBF e o LetoDBf, irei usar até precisar mudar.

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

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Browse Filter - Array Filter

Mensagempor asimoes » 11 Mar 2020 10:03

Itamar M. Lins Jr. escreveu:Ola!
Só para deixar claro, eu estou usando LetoDbf não é o LetoDB.
Não tenho problema com ele. O ADS se for assim, sem restrições, só o fato de usar SQL é uma boa opção, talvez até melhor que o LetoDbf... Mas já vi testes com LetoDBf x ADS e o LetoDBf foi melhor.
Como não estou com pressa nem com problema usando DBF e o LetoDBf, irei usar até precisar mudar.

Itamar

A questão principal é a segurança e evolução das coisas, com certeza o Leto é mais rápido mas a base ainda é dbf o ADS foi para mim um trampolim para o MariaDB, foi preparar para migrar se não fizesse isso iria ficar no RDD por comodidade
â–º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: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Próximo



Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 2 visitantes


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
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro