Clipper On Line • Ver Tópico - Meu modo de trabalho

Meu modo de trabalho

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

Moderador: Moderadores

 

Meu modo de trabalho

Mensagempor JoséQuintas » 21 Set 2021 19:51

Nesta alteração mostra legal as possibilidades do SQL

      WITH OBJECT cnSQL
         :cSQL := "SELECT IDPEDIDO, JPPEDIDO.PDCADASTRO, JPCADASTRO.IDCADASTRO, JPCADASTRO.CDCEPENT" + ;
            " FROM JPPEDIDO" + ;
            " LEFT JOIN JPCADASTRO ON JPCADASTRO.IDCADASTRO = JPPEDIDO.PDCADASTRO" + ;
            " WHERE IDPEDIDO = " + NumberSQL( nIdPedido )
         :Execute()
         GoogleMaps( jpempresa->emCep, :String( "CDCEPENT" ) )
         :CloseRecordset()
      ENDWITH


o JPEMPRESA.DBF era DBF (jpempresa->emCep), agora está no MySQL.

         :cSQL := "SELECT IDPEDIDO, JPPEDIDO.PDCADASTRO, JPCADASTRO.IDCADASTRO, JPCADASTRO.CDCEPENT," + ;
            " JPEMPRESA.EMCEP" + ;
            " FROM JPPEDIDO" + ;
            " LEFT JOIN JPCADASTRO ON JPCADASTRO.IDCADASTRO = JPPEDIDO.PDCADASTRO" + ;
            " LEFT JOIN JPEMPRESA ON JPEMPRESA.IDEMPRESA=1" + ;
            " WHERE IDPEDIDO = " + NumberSQL( nIdPedido )
         :Execute()
         GoogleMaps( :String( "EMCEP" ), :String( "CDCEPENT" ) )
         :CloseRecordset()
      ENDWITH


Apenas acrescentei no SELECT pra trazer também o CEP da empresa.
No SQL tá tudo lá, é só pedir, não importa de onde vém.

Como meus campos são únicos, e agora sei que o SQL "se vira", tenho deixado tudo mais limpo.

      WITH OBJECT cnSQL
         :cSQL := "SELECT IDPEDIDO, PDCADASTRO, IDCADASTRO, CDCEPENT, EMCEP" + ;
            " FROM JPPEDIDO" + ;
            " LEFT JOIN JPCADASTRO ON IDCADASTRO = PDCADASTRO" + ;
            " LEFT JOIN JPEMPRESA ON IDEMPRESA=1" + ;
            " WHERE IDPEDIDO = " + NumberSQL( nIdPedido )
         :Execute()
         GoogleMaps( :String( "EMCEP" ), :String( "CDCEPENT" ) )
         :CloseRecordset()


Comentário adicional:
O comando trás campos da tabela de pedidos, da tabela de clientes, e agora também da tabela de empresa.
Um comando enviado, uma resposta com tudo.
A referência pra pedir informações é o número do pedido, que já tem o código de cliente.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17606
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 22 Set 2021 13:15

Os ajustes estilo gambiarra....

   m_texto = Trim( jpempresa->emCarTit)


esse virou isto:

m_Texto := cnSQL:ReturnSelect( "SELECT EMCARTIT FROM JPEMPRESA WHERE IDEMPRESA=1" )


mas este aqui:

   m_texto = Trim( jpempresa->emCarCon) + " - CRC/" + jpempresa->emUfCrc + ": " + Trim( jpempresa->emCrcCon )


Se fosse igual o anterior, seriam 3 selects juntando no Harbour.... melhor trazer pronto.

   m_texto = cnSQL:ReturnSelect( "CONCAT( EMCARCON,'-CRC/',EMUFCRC,':',EMCRCCON) FROM JPEMPRESA WHERE IDEMPRESA=1" )


E assim tá indo....
Depois.... quando realmente converter a contabilidade pra SQL, aí vejo como melhorar.
Por enquanto é alterar rápido pra funcionar com o JPEMPRESA vindo do SQL e não mais do DBF.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17606
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 23 Set 2021 07:37

SYSTEM ERROR
Error DBCMD/2001 Workarea not in use: DBGOTO
Called from DBGOTO(0)
Called from JPPEDIDOCLASS:USERFUNCTION(478)
Called from JPPEDIDOCLASS:EXECUTE(364)
Called from PJPPEDIDO(76)
Called from DO(0)
Called from RUNMODULE(124)
Called from BOXMENU(749)
Called from BOXMENU(736)
Called from MENUPRINC(574)
Called from SISTEMA(77)
Called from (b)MAIN(77)


Essa linha mexia no DBF de pedidos, que não existe há vários meses...
Enquanto ainda existia qualquer DBF aberto, não dava pra perceber o erro no fonte, porque o GOTO era feito em qualquer um.
Agora que esse módulo não tem dbf nenhum.... o erro ficou visível.
Tranquilo, só apagar a linha.

Ontem tinha acontecido isso, no cadastro de produtos, mesmo motivo.

O que mudou geral?
Antes, todos dependiam de DBF por causa da contabilidade.
Agora, a contabilidade depende de MySQL, mesmo a contabilidade usando DBF.
Como eu já disse por aqui, deixo todos os clientes exatamente iguais, se muda pra um, muda pra todos.
Meus fontes só vão em frente, sem ter versões diferentes pra cada situação.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17606
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 23 Set 2021 08:04

manif.png


Vixe... tá aparecendo mais coisas....
Manifesto também não está em DBF fazem meses...
Esse EOF() aí não faz sentido nenhum.
Ficou testando DBF errado, e agora que não tem mais DBFs...

Tá aí uma coisa interessante: como agora é SQL, e não trabalha mais com o arquivo aberto, agora o teste vai ser sempre correto.
Agora testo se nIdManifesto é zero.

Nota:
O curioso é que está errado fazem meses, só agora o erro apareceu.
Não foi das mudanças atuais, foi de mudanças anteriores, de alguns meses atrás, ou anos... já nem sei mais...
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17606
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 23 Set 2021 08:13

eof.png


Aqui uma curiosidade: mostra como formatar fonte é importante.

Estou procurando " EOF()" nos fontes.
Só tem que aparecer aí conversões, funções de biblioteca, e CONTABILIDADE.
Se aparecer algo mais, ou está errado, ou é arquivo temporário em DBF - tenho alguns.
Permite dar uma geral nos fontes.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17606
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 23 Set 2021 09:42

SYSTEM ERROR
Error DBCMD/2001 Workarea not in use: DBGOTO
Called from DBGOTO(0)
Called from JPPEDIDOCLASS:USERFUNCTION(471)
Called from JPPEDIDOCLASS:EXECUTE(364)
Called from PJPPEDIDO(76)
Called from DO(0)
Called from DOPRG(151)
Called from (b)RUNMODULE(116)


Eu deveria ter procurado GOTO também, e SKIP.... kkkk
E o erro foi perto de um anterior, mesmo fonte, poucas linhas abaixo...

Se é MySQL e ADO... Eof(), GOTO e SKIP não fazem sentido... rs
Pois é... erros adormecidos há mais de ano, aparecendo agora, porque não sobrou nenhum dbf aberto nesses módulos.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17606
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 23 Set 2021 09:58

skip.png


Duas coisas interessantes procurando aonde uso SKIP
Achei fonte que não deveria ter isso porque virou SQL.

Mesmo assim, 10.205 ocorrências de SKIP.

Como eu digo sempre por aqui:
Meu aplicativo principal virou SQL, mas continuo usando muito DBF.
Tem o da imobiliária, tem o do FlagShip/Linux, e tem alguns outros.

Quando comento no fórum sobre DBF, é porque continuo usando a plena carga.
Continua funcionando sem problemas.
Mas no meu aplicativo principal... só a contabilidade ficou de fora do SQL.

Os próximos pra SQL com certeza são a contabilidade e a imobiliária.
Provavelmente os dois ao mesmo tempo, fazendo aos poucos.
E muito provável, começando pelas senhas da imobiliária, já que vale todo esquema que fiz pro meu aplicativo principal.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17606
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 23 Set 2021 19:36

E não é que me vejo à tarde mexendo com DBFs !!!!

Estou alterando minha imitação de dbase pra aceitar campos incrementais.

E vou usar campos incrementais pra facilitar a migração pra MySQL.

Pois é... coisas da vida... melhorando DBF pra usar MySQL kkkkk

E usar um recurso que nunca usei do DBF, que é o campo incremental.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17606
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 23 Set 2021 20:05

E uma rotina um pouco fora do normal:

   CASE cEncode == "mixbase64"
      IF Empty( xValue )
         xValue := Nil
      ELSE
         xValue := MixValue( hb_base64Decode( xValue ) )
      ENDIF
   ENDCASE
   IF xValue == Nil .OR. Empty( xValue )
      cName := Lower( cName )
      DO CASE
      OTHERWISE
         lWriteError := .T.
         FOR nCont = 1 TO 15
            IF ! Empty( ProcName( nCont ) ) .AND. hb_ASCan( { "SENDMAIL" }, { | e | e $ Upper( ProcName( nCont ) ) } ) != 0
               lWriteError := .F.
               EXIT
            ENDIF
         NEXT
         IF lWriteError
            Errorsys_WriteErrorLog( "Faltou o binario " + cName, 2 )
         ENDIF
      ENDCASE
   ENDIF


Coloquei pra avisar quando falta resource no MySQL, mas tá vindo aviso demais, então vou começar a filtrar o tipo de erro.
É que nem todos usam logotipo, por exemplo.
Além disso, faltava a indicação de que parte do programa está reclamando do resource.

Faltou o binario gargantua.jpg  
Called from ZE_BINARYFROMSQL(210)
Called from SENDMAIL:SETDEFAULT(80)
Called from SENDMAIL:SEND(152)
Called from JPALOGERRO(62)
Called from SISTEMA(33)
Called from (b)MAIN(77)


Imagem pra email.... não é obrigatório existir...
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17606
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 24 Set 2021 09:36

dbase.png


Atualizei minha imitação de dbase pra aceitar campo incremental.
É a primeira vez que estou usando o campo incremental, e ele não estava preparado pra isso.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 17606
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 956 vezes

Meu modo de trabalho

Mensagempor Itamar M. Lins Jr. » 24 Set 2021 10:09

Olá!
Já usei esse e outro que coloca a data sozinho e mais o DATE TIME, 3 tipos novos, e tem mais outros como tamanho variado, BLOB...

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

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 5556
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 205 vezes
Mens.Curtidas: 323 vezes

Meu modo de trabalho

Mensagempor Poka » 24 Set 2021 14:01

Boa tarde,

Quintas, não sei como os outros fazem, mas se eu fizer do seu jeito não ia conseguir nunca.
Ás vezes que mudei de versões faço assim:

Faço o sistema novo, faço as rotinas para passar todas as tabelas do antigo para o novo. e vou testando, depois de tuuuudo pronto, atualizo a base de dados do antigo do cliente, confiro os relatorios, ct receber, pagar, tudo. se tudo ok, vou no cliente atualizo a base atual do antigo para o novo.

Então fica assim, o cliente termina hoje com o sistema antigo e amanha começa no novo. Deixo em um cliente só, se der erro vou acertando. depois atualizo os outros.

Gostaria até da opinião dos colegas como fazem, porque realmente é complicado.

Poka
Avatar de usuário

Poka
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 452
Data de registro: 25 Out 2004 21:26
Cidade/Estado: Leme/SP
Curtiu: 0 vez
Mens.Curtidas: 19 vezes

Meu modo de trabalho

Mensagempor Itamar M. Lins Jr. » 24 Set 2021 14:28

Olá!
faço as rotinas para passar todas as tabelas do antigo para o novo.

Faço isso, sem problema até hoje, pois sou eu que faço a atualização ou modificação das estruturas do DBF.
Uso uma função para isso.
É simples.
a) comparar as estruturas do DBF.
b) se achar diferençar, pegar a NOVA estrutura e criar um arquivo temporário.
c) importar do velho para o novo DBF os dados das estrutura que já existem.
d) RENOMEAR

Apagar só depois e se desejar. Não tem DELETE durante o processo.

Esse processo falha se por exemplo mudar campo numeric para character e deixar o mesmo nome no FIELD. Mas pode ser resolvido com função se for o caso.

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

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 5556
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 205 vezes
Mens.Curtidas: 323 vezes

Meu modo de trabalho

Mensagempor alxsts » 24 Set 2021 14:31

Ol[a!

Há algum tempo testei esta funcionalidade e esta ok. Mas a forma como defini a coluna usa o sinal de + para definir o tipo de dados:
  AAdd( aArray, { "idUF",      "+",  4, 0 } )

Estou vendo no post acima I:+ definir o tipo de dados. De onde veio isto? Está documentado? Qual é a diferença?
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2598
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 15 vezes
Mens.Curtidas: 191 vezes

Meu modo de trabalho

Mensagempor Itamar M. Lins Jr. » 24 Set 2021 14:34

Olá!
Estou vendo no post acima I:+ definir o tipo de dados. De onde veio isto? Está documentado? Qual é a diferença?

É a mesmo coisa.
Ou sinal ou LETRA + SINAL.

Também uso só "+" ou "@" ou "T"

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

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 5556
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 205 vezes
Mens.Curtidas: 323 vezes

Anterior Próximo



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

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