Clipper On Line • Ver Tópico - Classe e ADO

Classe e ADO

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Classe e ADO

Mensagempor JoséQuintas » 11 Dez 2019 09:11

E porque seria diferente.
em dbf:

PROCEDURE pAuxCnae

   LOCAL oFrm := AUXCNAEClass():New()

   IF ! AbreArquivos( "jptabel" )
      RETURN
   ENDIF
   oFrm:Execute()
   CLOSE DATABASES

   RETURN


em mysql:

PROCEDURE pAuxCnae

   LOCAL oFrm := AUXCNAEClass():New()

   oFrm:Execute()

   RETURN
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e ADO

Mensagempor JoséQuintas » 11 Dez 2019 09:16

A classe usa herança da geral
Mas... é diferente pra mostrar a descrição, porque só usa os primeiros 5 dígitos...

CREATE CLASS AUXCNAEClass INHERIT AUXILIARClass
...
METHOD Descricao( maxCnae ) CLASS AUXCNAEClass

   RETURN ::Super:Descricao( Left( maxCnae, 5 ) )


na auxiliar geral:
CREATE CLASS AUXILIARClass INHERIT frmCadastroClass
...
METHOD Descricao( cCodigo ) CLASS AUXILIARClass

   LOCAL mTexto

   IF Empty( ::cDataTable )
      Encontra( ::cTabelaAuxiliar + cCodigo, "jptabel", "numlan" )
      mTexto := jptabel->axDescri
   ELSE
      mTexto := ADOField( "AXDESCRI", "C", "JPAUXILIAR", "AXTABELA=" + StringSql( ::cTabelaAuxiliar ) + " AND AXCODIGO=" + StringSql( cCodigo ) )
   ENDIF

   RETURN mTexto


É que tem tabela em DBF e em MySQL... então ainda preciso manter as duas opções

Mas ao invés de criar uma nova rotina de pesquisa... se a diferença são 5 caracteres, passo os 5 pra rotina que já existe.
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e ADO

Mensagempor JoséQuintas » 11 Dez 2019 09:22

o browse... automático... neste caso em ADO

tbrowseado.png
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e ADO

Mensagempor JoséQuintas » 11 Dez 2019 09:26

Tá aí uma coisa interessante.....

Enquanto muitos aqui procuram IDEs pra desenhar telas gráficas....

Eu vou querer saber depois qual vai ser a LIB gráfica que vai aceitar classe/herança em telas, pra não ter que ficar desenhando cada tela !!!
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e ADO

Mensagempor rochinha » 14 Dez 2019 19:07

Amiguinhos,

JoséQuintas daqui a pouco você vai querer ou criar uma classe que pegue herança de um sistema e não precise programar denovo. kkkkkkk

Sabe que eu já pensei nisto que você falou, é um saco e creio até que ultrapassado criar telas para os programas. Tudo tem de ser mais dinamico.

Na fivewin, tem um pequeno programinha que pega um DBF e criar com comandos de tela uma tela baseada em DBF igual ao wizard do Visual Basic 6.

Era interessante pois facilitava tal trabalho mas era algo avançado demais para os usuários de nossos sistemas acostumados a tela bem elaborada e visualmente intuitivas.

O problema é que não era on-the-fly as telas criadas pelo aplicativo, tinha de ser compiladas.

Geralmente um dicionário permite definir os campos que irão para a tela, comportamento(habilitado ou não, máscara, validação etc.

Creio que depois disto seja possível fazer o que você pensa. Ou não.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes

Classe e ADO

Mensagempor JoséQuintas » 14 Dez 2019 22:08

rochinha escreveu:Creio que depois disto seja possível fazer o que você pensa. Ou não.


Eu penso numa coisa simples: O Visual Basic 6, há 20 anos atrás permitia isto.
A HMG é indiscutivelmente baseada no VB5, mas sem nenhum recurso prático do VB5.

SE eu fosse usar HMG, a primeira coisa seria alterar toda forma de fazer as coisas, porque basicamente ela é movida a limitações.
O que ela não limita por fonte, ela limita por causa dos CHs.

Eu acho até que logo nos primeiros programas, o pessoal da HMG vai ficar de boca aberta com o que eu fizer.
É sério... o simples fato de não usar os arquivos #define, expandem muito as possibilidades.

Cheguei a fazer um mini gerador de telas em VB6.
Sabe como é no VB6?
Você define UM button, UM textbox, UM label, e define como array.
A partir daí, pode multiplicar por quantas vezes quiser, e definir as propriedades de cada um.
É simples assim.
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e ADO

Mensagempor JoséQuintas » 14 Dez 2019 22:15

JoséQuintas escreveu:Cheguei a fazer um mini gerador de telas em VB6.
Sabe como é no VB6?
Você define UM button, UM textbox, UM label, e define como array.
A partir daí, pode multiplicar por quantas vezes quiser, e definir as propriedades de cada um.
É simples assim.


Correção:
Não era um gerador de telas, o gerador de telas VB6 era em Clipper....
Esse daí era um programa de edição de arquivos DBF, que se criava em run-time.
Eu chamava esse módulo/formulário passando o nome do DBF, e ele já se transformava na edição do DBF.
Podia chamar quantas vezes quisesse, com o nome do DBF que quisesse.
No caso de muitos campos, tudo era dividido em abas.
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e ADO

Mensagempor rochinha » 16 Dez 2019 00:48

Amiguinhos,

JoseQuintas

Então esta ai o inicio de uma classe que pode facilitar em muito aos preguiçosos como eu, kkkkkk.

Quando você fala "dividir em abas" com certeza isto acontece na sequencia em que foram criados os campos, tipo, cabem 20 campos por aba, 20+1 abre nova aba, 40+1 abre nova aba, etc. Tô certo.

Porque se for para criar abas definindo quais campos terão importância de aparecer na primeira, segunda, etc será necessário um terceiro arquivo com definições, tipo .INI.

Eu cheguei a codificar algo parecido com a versão antiga do SmartSheets:

Imagem

A tela era dividida em duas partes, na esquerda tinha o menu e na direita ficavam os browse. Conforme clicava em um menu uma nova aba era adicionada a interface abrindo o browse com a tabela. Até aqui já estava estruturado e eu iria codificar a tela de edição gerando automaticamente os GETs, combos, listboxes, etc. Mas perdi o harddisk com todo o trabalho.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes

Classe e ADO

Mensagempor JoséQuintas » 16 Dez 2019 11:24

Uia...
2008 O fonte mais antigo

cadauto2008.png


2013, quando foi apagado, usava rotina pra configurar conforme conteúdo

cadauto2013.png


A rotina acima é a geração de textbox/label em tabs, e também a geração dos buttons.

O VB6 não tem geração em PDF, mas o Windows 10 atual faz isso automático.
ADO... é comum pra ele, é "nativo" como gostam de dizer por aqui...
Programa pra desenhar relatórios: duas opções disponíveis Crystal Reports e Data Reports (não tenho certeza sobre uma terceira opção, já esqueci)
Criar controles próprios.... normal

Não é interessante?
Um produto com mais de 11 anos.
Produto comercial, custou 500 reais em 5 vezes sem juros.... completo.

Aí vamos para o Harbour open-source... e qualquer componente custa muito mais que isso...
E os usuários acham tudo normal... vai entender...
É que aproveitam os fontes... que precisam ser reescritos... kkkk
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e ADO

Mensagempor JoséQuintas » 16 Dez 2019 11:34

Nota sobre os controles:

Eu usava tudo como array, nem importava o nome, em TAG eu colocava a configuração.
Então, no validate() ou on change() ou on lostfocus() ou outro, bastava conferir a tag.

Era algo como GET x PICTURE x VALID Validax( X ) WHEN Whenx( X )

Uma única rotina pro aplicativo inteiro pra validar e/ou formatar, etc.
É comum no VB6, quando um controle é array, existe uma única função que atende todos.
Eu extendi isso ao aplicativo inteiro.

Pra quem acha isso complexo, algo como isto no Harbour:

... GET cCampo VALID Validalocal( @cCampo )
...
FUNCTION ValidaLocal( cCampo )
   RETURN ValidaGeral( @cCampo )

FUNCTION ValidaGeral( cCampo )

   DO CASE
   CASE GetActive():Tag == "CODCLIENTE"
      RETURN OkCliente( @cCampo )
   ENDCASE
   RETURN .T.


A IDE desviava pro local, mas eu alterava o local pra chamar o geral.
Pra que criar trocentas validações de clientes, se é sempre a mesma coisa, e uma só já resolve?

Nota: os controles são classes, então tá no assunto ainda, apesar de ser outra linguagem de programação, os controles das LIBs gráficas poderiam ter os mesmos recursos práticos.
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Classe e ADO

Mensagempor JoséQuintas » 16 Dez 2019 11:46

E não é que achei um elo de ligação com o Harbour.....

A Getsys do Harbour é um array....
E cada elemento é uma classe, que tem lá a linha, coluna, e até a TAG.
É como se eu colocasse elementos na GetSys, configurando linha, coluna, e valor na tag....

A diferença é que em ambiente gráfico, tudo está na "getsys", não apenas os gets.
Então, na prática, o que fiz foi alimentar a "getsys" com os campos....

Igual fazemos com relatórios, ir somando coluna, chegou em MaxCol() joga pra linha de baixo, chegou em MaxRow() joga pra próxima aba.

Todo mundo já fez algo assim, em ambiente gráfico é a mesma coisa.
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: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 21 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