Gravação automatica de 1 unico campo ( #command )

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

scooby
Usuário Nível 1
Usuário Nível 1
Mensagens: 14
Registrado em: 03 Jun 2019 09:41
Localização: Belo Horizonte/Minas Gerais

Gravação automatica de 1 unico campo ( #command )

Mensagem por scooby »

Bom Dia Senhores

Sou novo aqui no fórum, e já de antemão, gostaria de agradecer a ajuda.

Tenho a seguinte situação:
Em todas as tabelas do sistema, existe um campo chamado datlan, esse campo é responsável por gravar a alteração de qualquer dado. Porém nem todo mundo lembra de colocar esse campo e as vezes o conteúdo deste campo não é atualizado corretamente.
Eu verifiquei que dentro do arquivo std.ch é que controla o comando replace.
Eu gostaria de saber como eu posso alterar o comando esse comando para que possa efetuar essa gravação, uma vez que o comando é assim.. não sei nem por onde dar inicio...
#command REPLACE [ <f1> WITH <x1> [, <fN> WITH <xN>] ] ;
[FOR <for>] [WHILE <while>] [NEXT <next>] ;
[RECORD <rec>] [<rest:REST>] [ALL] => ;
DBEval( {|| _FIELD-><f1> := <x1> [, _FIELD-><fN> := <xN>]}, ;
<{for}>, <{while}>, <next>, <rec>, <.rest.> )

Att


Márcio Pinheiro
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Gravação automatica de 1 unico campo ( #command )

Mensagem por asimoes »

O que você quer é uma trigger, acho que isso não rola no replace
►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)
scooby
Usuário Nível 1
Usuário Nível 1
Mensagens: 14
Registrado em: 03 Jun 2019 09:41
Localização: Belo Horizonte/Minas Gerais

Gravação automatica de 1 unico campo ( #command )

Mensagem por scooby »

Boa Tarde asimoes

Então, seria a mesma funcionalidade de um trigger. Existe algum outro modo conhecido de se fazer isso.
Só para saber se dou prosseguimento nessa implementação ou simplesmente abandono essa questão.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gravação automatica de 1 unico campo ( #command )

Mensagem por JoséQuintas »

scooby escreveu:Então, seria a mesma funcionalidade de um trigger. Existe algum outro modo conhecido de se fazer isso.
Bom... pra gravar é comum bloquear/desbloquear registro...
E a não ser que goste de ficar repetindo vários comandos, deve ter uma função pra isso.
Coloque numa delas.

Código: Selecionar todos

RecLock()
REPLACE field->Nome WITH cNome
RecUnlock()
RETURN


FUNCTION RecLock() // ou RecUnlock()

   ...
   REPLACE field->DatLan WITH Date()
   ...

   RETURN NIL

José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gravação automatica de 1 unico campo ( #command )

Mensagem por JoséQuintas »

scooby escreveu:Porém nem todo mundo lembra de colocar esse campo e as vezes o conteúdo deste campo não é atualizado corretamente.
Isto ficou confuso.
É o usuário que digita?
Ou são programadores que esquecem disso?

Se é usuário... porque ele teria que digitar?
Se é programador... vão esquecer de outras coisas também...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
scooby
Usuário Nível 1
Usuário Nível 1
Mensagens: 14
Registrado em: 03 Jun 2019 09:41
Localização: Belo Horizonte/Minas Gerais

Gravação automatica de 1 unico campo ( #command )

Mensagem por scooby »

JoséQuintas escreveu:Isto ficou confuso.
É o usuário que digita?
Ou são programadores que esquecem disso?
Sim são os programadores... então devido a várias ocorrências, essa medida está sendo tomada, para evitar que mesmo que esqueçam o campo terá atualização.
JoséQuintas escreveu:Bom... pra gravar é comum bloquear/desbloquear registro...
E a não ser que goste de ficar repetindo vários comandos, deve ter uma função pra isso.
Coloque numa delas.
Exatamente, a ideia era alterar a #command replace, porque fazendo isso, resolveria o problema num local só. E efetuando como o senhor havia falado, caso eu trave um registro para pesquisa por exemplo o sistema irá efetuar um replace.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gravação automatica de 1 unico campo ( #command )

Mensagem por JoséQuintas »

scooby escreveu:caso eu trave um registro para pesquisa por exemplo o sistema irá efetuar um replace.
Travar na pesquisa?

Já vi programador colocar isso em relatório nem sei pra que.

Código: Selecionar todos

DO WHILE ! Eof()
   RLock()
   @ l, c SAY ""
   SKIP
ENDDO
UNLOCK
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gravação automatica de 1 unico campo ( #command )

Mensagem por JoséQuintas »

Resolver um problema alterando o funcionamento do Harbour.... isso é querer mais problemas.
Além do mais, isso é quebra-galho, muito fraco pra registrar alguma coisa.
Não vão querer saber apenas quando foi alterado, mas também QUEM foi, e a que horas, ou até por qual módulo, ou até saber o que tinha antes.
E não apenas a última alteração, mas todas as alterações, senão o último vai levar a culpa de algum anterior.
Com certeza o registro não é o melhor lugar pra isso.

E o que é pior....
O programador não faz o trabalho dele...
Vai incluir coisa que pode dar problema.... e arriscar todo funcionando do aplicativo por causa disso.
Sei lá... precisa rever isso...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Gravação automatica de 1 unico campo ( #command )

Mensagem por asimoes »

scooby.

Entendo o seu problema, aqui utilizamos biblioteca corporativa, pode haver erro da aplicação ou da biblioteca, para validar esse campo, você deveria
ter um validador de fonte pra saber se o programador X cometeu erro, o ideal é subir esses fontes para o SVN ou GIT para ter maior controle das modificações nos fontes.

Nós temos aqui 3 ambientes, Desenvolvimento, Homologação e Produção, toda modificação de sistema tem que ir para Homologação para o usuário testar, quando o usuário aprova a rotina, o fonte é compilado em produção.

Perguntas:

Quantos programadores fazem manutenção no sistema ?
►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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gravação automatica de 1 unico campo ( #command )

Mensagem por JoséQuintas »

Outra opção é criar uma classe.
Vai fazer um trabalho melhor, mais detalhado, mas vai continuar dependendo dos programadores usarem.
Com a vantagem de que não vai precisar passar o fonte das classes pra eles, o que evita extravio de fonte.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
scooby
Usuário Nível 1
Usuário Nível 1
Mensagens: 14
Registrado em: 03 Jun 2019 09:41
Localização: Belo Horizonte/Minas Gerais

Gravação automatica de 1 unico campo ( #command )

Mensagem por scooby »

Bom Dia


Muito obrigado pelas informações passadas. Estou vendo com a parte gerencial como devemos tomar providência nesse quesito.
asimoes escreveu:Entendo o seu problema, aqui utilizamos biblioteca corporativa, pode haver erro da aplicação ou da biblioteca, para validar esse campo, você deveria
ter um validador de fonte pra saber se o programador X cometeu erro, o ideal é subir esses fontes para o SVN ou GIT para ter maior controle das modificações nos fontes.
Pois é, já utilizamos SVN, essa implementação também entraria para um processo de exportação entre base de dados e esse campo tem função primordial, pois os dados só serão exportados caso esse conteúdo tenha sido atualizado.
JoséQuintas escreveu:Outra opção é criar uma classe.
Vai fazer um trabalho melhor, mais detalhado, mas vai continuar dependendo dos programadores usarem.
Com a vantagem de que não vai precisar passar o fonte das classes pra eles, o que evita extravio de fonte.
Estou pensando em fazer exatamente isso. Agora é começar a codificar.


Muito obrigado pela ajuda.


Márcio Pinheiro
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gravação automatica de 1 unico campo ( #command )

Mensagem por JoséQuintas »

scooby escreveu:Estou pensando em fazer exatamente isso. Agora é começar a codificar.
É tanta coisa assim que precisa de programador?
Ou são coisas repetitivas, que ao invés de você automatizar seu serviço, está colocando ajudantes que só pioram a coisa?

Lembra daquela história: seja seu próprio chefe/dono?

em caso de programação digo o seguinte: seja seu próprio cliente.

Nosso serviço não é reduzir/facilitar o trabalho do cliente?
Então... seja seu cliente, e reduza/facilite o seu trabalho.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Gravação automatica de 1 unico campo ( #command )

Mensagem por asimoes »

Quintas,

Aqui somos obrigados colocar um histórico das modificações nos fontes, que inclui autor da modificação, data e motivo da modificação, ai fica fácil bater no maluco.
►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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gravação automatica de 1 unico campo ( #command )

Mensagem por JoséQuintas »

asimoes escreveu:Aqui somos obrigados colocar um histórico das modificações nos fontes, que inclui autor da modificação, data e motivo da modificação, ai fica fácil bater no maluco.
usar o GIT pra centralizar seria interessante, elimina isso dos fontes.

Só lembrando: O GIT faz tudo.

Opções:

1. controlar na máquina
2. controlar num servidor próprio, ou outra máquina da rede
3. controlar em alguma máquina nas nuvens
4. usar Bitbucket ou GitHub pra cópia nas nuvens, o que seria mais interessante, porque cada usuário poderia ter uma conta criada/apagada do projeto

Só não sei como fazer isso localmente com várias contas, sem que o usuário possa destruir o central
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Gravação automatica de 1 unico campo ( #command )

Mensagem por asimoes »

JoséQuintas escreveu:usar o GIT pra centralizar seria interessante, elimina isso dos fontes.
Isso é um plus nos fontes, usamos o SVN por usuário, atualizando no mesmo respositório, isso é só pra ter certeza de quem ta fazendo M**** mesmo.
►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)
Responder