Página 1 de 2
Browse Filter - Array Filter
Enviado: 06 Mar 2020 06:47
por gilbertosilverio
Ola Amigos,
Uso o exemplo de HWGUI browsefilter, para mover duas bases de dados.
Código: Selecionar todos
@ 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
Browse Filter - Array Filter
Enviado: 06 Mar 2020 10:08
por asimoes
Sugestão para trabalhar com Grid Array
Código: Selecionar todos
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()
Browse Filter - Array Filter
Enviado: 06 Mar 2020 10:42
por gilbertosilverio
Simões,
Obrigado, vou testar...
Browse Filter - Array Filter
Enviado: 06 Mar 2020 11:33
por asimoes
Código: Selecionar todos
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()
Browse Filter - Array Filter
Enviado: 06 Mar 2020 20:37
por JoséQuintas
Console com ADO seria uma maravilha, talvez dê pra fazer igual em HWGUI.
Browse Filter - Array Filter
Enviado: 07 Mar 2020 12:56
por MSDN
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 !
Browse Filter - Array Filter
Enviado: 09 Mar 2020 11:17
por Itamar M. Lins Jr.
Ola!
Eu não uso esse recurso. Eu uso o tradicional mesmo.
Código: Selecionar todos
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.
Browse Filter - Array Filter
Enviado: 09 Mar 2020 19:35
por asimoes
Eu recomendo o ADS da SYBASE, usa o dbf com sql, muito bom pra aprender SQL e pensar em migrar para um SGBD
Browse Filter - Array Filter
Enviado: 10 Mar 2020 09:53
por Itamar M. Lins Jr.
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.
Browse Filter - Array Filter
Enviado: 10 Mar 2020 15:50
por asimoes
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
Browse Filter - Array Filter
Enviado: 10 Mar 2020 17:47
por JoséQuintas
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
Browse Filter - Array Filter
Enviado: 10 Mar 2020 18:10
por JoséQuintas
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.
Browse Filter - Array Filter
Enviado: 10 Mar 2020 19:03
por asimoes
Offtopic: Documentação do ADS
Onde baixar o driver ADS
https://devzone.advantagedatabase.com/d ... Product=15
Browse Filter - Array Filter
Enviado: 11 Mar 2020 09:50
por Itamar M. Lins Jr.
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.
Browse Filter - Array Filter
Enviado: 11 Mar 2020 10:03
por asimoes
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