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 » 16 Jan 2016 21:10

testesb.png
testesb.png (5.61 KiB) Visualizado 86736 vezes


- Geração de um html pra colocar num site. Com isso, ao acessar o site o usuário vai escolhendo a configuração do computador, e a página já vai mostrando todos os cálculos. É gerado a partir do cadastro de produtos
- Teste de filtro, nem postei por aqui ainda, ficou legal
- Gerar harbourdoc.com.br, é gerar um PDF de toda documentação que está cadastrada no harbourdoc.com.br - isso mesmo é uma opção do aplicativo que tenho instalado em todos os clientes, mas só eu tenho acesso.
- Acesso remoto - uso em máquinas aonde o adminstrador escondeu o acesso ao menu do Windows
- Modo Deus - pra acesso total às configurações do Windows - mesmo motivo
- Teclado virtual - pra mostrar o teclado virtual do Windows. Pode ser interessante num telefone celular sem teclado compatível com Windows, assim uso o do próprio Windows.
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

Meu modo de trabalho

Mensagempor JoséQuintas » 16 Jan 2016 21:15

Só pelas opções de teste, já dá pra imaginar as opções "não teste".
No meu aplicativo TUDO tem cadastro, não deixo nada pra acessar via meu "dbase" embutido.
Mesmo que use uma vez por ano, ou até menos que isso.... tá lá o cadastro.
E mesmo que só eu use, só na minha senha, tem opção.

Cadastro de UFs, por exemplo, tem lá com pushbutton, toda atualizada de acordo com meu padrão de trabalho. Quando será que vamos precisar cadastrar UF?
Tá fácil programar um cadastro, já fica tudo disponível e pronto.
Posso ou não liberar para o usuário, tanto faz.
Acho que tem até listagem disso.
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

Meu modo de trabalho

Mensagempor JoséQuintas » 16 Jan 2016 21:30

Isso me lembrou da geração de manual.

Só o menu de opções, que seria o índice, vai até a página 8

manual.png


Não tem visual gráfico?
Tudo bem, é totalmente automático.
Aperto F1 no aplicativo, em qualquer máquina, minha ou do cliente, digito o texto e pronto, vai pro manual disponível pra todo mundo, on-line ou pra impressão.
Isso é bem melhor que um manual bonito e desatualizado.

Isso também ficou disponível pro aplicativo da imobiliária, afinal, ele herdou todas as bibliotecas do JPA.
E de acordo com a senha do usuário.
Na minha senha, completo
Na senha do administrador do cliente, todas as opções do cliente
Na senha de qualquer usuário, só do que ele pode mexer.

Não liberei pra ninguém.
Se algum dia alguém perguntar por manual impresso... eu imprimo, ou posso até liberar a opção.

Já pensei em liberar alteração pra cliente, pra eles mesmos irem fazendo anotações, mas não fiz.
Também está preparado pra isso. O sistema guarda todas as "versões" de cada texto. Se o usuário apagar tudo, eu apenas deleto o registro que ele incluiu em branco, e tá tudo restaurado.
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

Meu modo de trabalho

Mensagempor JoséQuintas » 16 Jan 2016 21:44

Se eu lembrar de mais alguma coisa coloco por aqui.

O mais legal do aplicativo não é o que se vê, é o que não se vê.

Ah é...
No caso de um cliente novo, basta eu colocar os XMLs de NFE numa pasta, e pedir pra importar.
O aplicativo já cadastra clientes, produtos, notas fiscais, movimentação de estoque, pedidos, financeiro, etc.
Só fica faltando dar baixa no financeiro.

Se for empresa bagunçada, XMLs espalhados pelas máquinas, tudo bem.
O sistema também permite vasculhar todas as pastas, e já organiza todos os XMLs válidos em uma pasta, separando mês a mês em subpastas.

É por aí...
Ter deixado a parte gráfica de lado, e ter me dedicado ao restante foi bom.
Depois até sobrou tempo pra mexer com a parte gráfica... rs
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

Meu modo de trabalho

Mensagempor JoséQuintas » 17 Jan 2016 09:23

Opções do menu:

MenuOption( "Movto" )
   MenuDrop()
   MenuOption( "Pedidos/Notas Fiscais" )
      MenuDrop()
      MenuOption( "Orçamentos/Pedidos", "P0600PED" )
      MenuOption( "Emissor JPA", "PEMISSOR" )
      MenuOption( "Nota Fiscal (Serviços)", "PNOT0010" )
      MenuOption( "Consulta a Notas Fiscais", "PNOT0020" )
      MenuOption( "Gera Pedido de Retirada", "PNOT0030" )
      MenuOption( "Rel.Romaneio de NFs", "PNOT0050" )
      MenuOption( "Manifesto Eletrônico", "PJPMDF" )


Fácil acrescentar opções, ou transferir de um lugar pro outro, ou até duplicar se necessário.
Fica tudo num único array.
Daí saem informações para:
- montagem do menu conforme senha de acesso
- configurar senhas de acesso
- menu Windows
- Help on line
- manual em PDF
Aquela única variável PUBLIC que mostrei, m_Prog, ela sai desse menu, é o nome do módulo em uso.
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

Meu modo de trabalho

Mensagempor JoséQuintas » 17 Jan 2016 09:36

Mostrar uma alteração do menu na prática.
Acrescentei esta linha no fonte do menu.

menu1.png
menu1.png (8.27 KiB) Visualizado 86729 vezes


salvo, e digito C <ENTER>

Executo, coloco usuário/senha e lá está ela

menu2.png


Entro na configuração de senhas/acessos e.... lá está ela

menu3.png


Só acrescentei a opção, o módulo não existe. Se eu abrir essa opção no menu:

menu4.png


Vejam, só acrescentei uma única linha no fonte.
Já tem configuração de acesso, tela pronta pra uso em multithread, com título, espaço pra mensagem, parte central limpa, está pronto pra eu trabalhar no fonte

E a Multithread? Nem mexi com isso, o menu faz isso automático.
Variáveis públicas, configurações, etc. para o módulo? Nem mexi com isso, o menu faz isso automático.

Seu eu criar um fonte com Inkey(0), basta teclar F1 e já posso atualizar as informações do help on-line para o módulo. (que também sairão no manual em PDF)

Mas por acaso dá pra fazer isso em menu Windows?

menu5.png


Meu menu Windows é opcional, mas sempre pronto pra uso. Quando digo pronto, é pronto mesmo.

se eu clicar no "JPA Update - Upload versão", isso já vai pra internet.
Se o cliente clicar no "JPA Update - Download versão", isso já vai estar na máquina dele.

Uma única linha, e dois clicks, e já fica instalado no cliente !!!!!
A opção ainda não serve pra nada, tudo bem, foi só pra mostrar a facilidade.
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

Meu modo de trabalho

Mensagempor rubens » 17 Jan 2016 10:38

Bom dia José...

Quando você fala em melhorias no browse do harbour para trabalhar em rede, o que você melhorou ?

Obg
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 17 Jan 2016 10:41

Uma coisa simples: RLOCK()
Sem isso não dá pra alterar em rede, dá erro.
Eu uso muito pouco, por isso esquecia de que precisava travar o registro pra usar o browse do Harbour.
Acrescentando RLock() ficou resolvido, acho que em dois lugares do Browse.prg.
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

Meu modo de trabalho

Mensagempor JoséQuintas » 17 Jan 2016 11:09

Agora coloquei conteúdo no ptesforum.prg

PROCEDURE PTESFORUM

   LOCAL mCliente := Space(6), GetList := {}

   IF .NOT. AbreArquivos( "jpcadas" )
      RETURN
   ENDIF

   @ 5, 10 SAY "Cliente....." GET mCliente PICTURE "@K 99999" VALID JPCADAS1Class():Valida( @mCliente )
   READ

   CLOSE DATABASES
   RETURN


Independente de jpcadas1class(), que é classe, a rotina de validação equivale a uma função.
Antes eu usava uma função ClienteOk(), depois agrupei tudo que era sobre cliente numa única classe, mas dá no mesmo.

salvei, digitei <C> ENTER.

O fonte só tem abrir arquivo, o GET, e a validação, vamos lá ver funcionando.

A tela, ok, já era esperado

pcforum1.png


Ao digitar um cliente sem cadastro

pcforum2.png


Caso digite F9, que é pra pesquisa, o browse dos clientes.

pcforum3.png


É exatamente o fonte que postei em funcionamento.

No browse dos clientes, o mesmo disponível em todo aplicativo:
pode ser em ordem de código, ordem alfabética, ordem CNPJ, pesquisar texto, ir digitando texto e filtrando,filtro de palavras, etc.
Antigamente usava botões nesse browse, mas retirei. Achei que ficou feio, e só ocupando espaço.

Nota: por isso estranho quando vejo fazerem uma rotina de tbrowse pra cada fonte.
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

Meu modo de trabalho

Mensagempor JoséQuintas » 17 Jan 2016 11:23

Só voltando um pouco pra trás, esqueci de mencionar.
Quando deu aquele erro de faltar o módulo.... o sistema me enviou este email.
Mesmo na minha máquina mantenho isso.

Windows: Windows 7 6.1 SP1
Computer Name: JOSEJPA
Windows User: joseq
Logon Server: \JOSEJPA
User Domain: josejpa

Error BASE/1001 Undefined function: PTESFORUM
Called from DO(0)
Called from DOPRG(144)
Called from (b)RUNMODULE(111)
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Error on 17/01/16 10:34:11
JPA: 2016.01.14.1410
Login JPA: JOSEQ
Alias:

Harbour: Harbour 3.4.0dev (0a127e0) (2016-01-15 01:54)
Compiler: Microsoft Visual C++ 16.0.40219 (32-bit)
GT: WVG
Folder: d:\CDROM\DADOS\SISTEMAS\

Windows: Windows 7 6.1 SP1
Computer Name: JOSEJPA
Windows User: joseq
Logon Server: \JOSEJPA
User Domain: josejpa

Error BASE/1001 Undefined function: PTESFORUM
Called from DO(0)
Called from DOPRG(144)
Called from (b)RUNMODULE(111)
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

Meu modo de trabalho

Mensagempor JoséQuintas » 17 Jan 2016 11:40

Agora voltemos ao tbrowse.

lembrando do início do aplicativo:

SET KEY K_F9 TO Pesquisa


Teclou F9, chama rotina de pesquisa, se vale pro aplicativo, vale pra esta nova tela.

cVarName     := Lower( ReadVar() )
...
CASE cVarName $ "mcliente" // .AND. m_Prog == "PTESFORUM"
   JPCADAS1Class():GridSelection()
...


A rotina de pesquisa verifica o nome da variável do GET e desvia pra rotina correspondente, nesse caso de clientes.
Chamei de GridSelection(), só porque dá pra considerar sendo uma grid, e é pra seleção.

Esta tem algo mais, mas tudo bem, já foi, vai ela mesmo.

METHOD GridSelection() CLASS JPCADAS1Class

   LOCAL nCont, nSelect := Select(), cOrdSetFocus, oTBrowse

   IF Select( "jpclista" ) == 0
      SELECT 0
      AbreArquivos( "jpclista" )
      WriteErrorLog( "Faltou abrir jpclista", 2 )
   ENDIF
   SELECT jpcadas
   oTBrowse := { ;
      { "Nome",        {|| jpcadas->cdNome } }, ;
      { "Apelido",     {|| jpcadas->cdApelido } }, ;
      { "Código",      {|| jpcadas->cdCodigo } }, ;
      { "UF",          {|| jpcadas->cdUf } }, ;
      { "Cidade",      {|| jpcadas->cdCidade } }, ;
      { "Ref.Mapa",    {|| jpcadas->cdMapa } },  ;
      { "Endereço",    {|| jpcadas->cdEndereco } }, ;
      { "Número",      {|| jpcadas->cdNumero } }, ;
      { "Complemento", {|| jpcadas->cdCompl } }, ;
      { "Cnpj",        {|| jpcadas->cdCnpj } } }
   FOR nCont = 1 TO Len( oTBrowse )
      AAdd( oTBrowse[ nCont ], {|| iif( ! Encontra( jpcadas->cdStatus, "jpclista", "numlan" ) .OR. Val( jpcadas->cdStatus ) < 2, { 1, 2 }, ;
         iif( Trim( jpclista->csBloqueio ) == "0", { 3, 2 }, ;
         iif( Trim( jpclista->csBloqueio ) == "1", { 4, 2 }, { 7, 2 } ) ) ) } )
   NEXT
   cOrdSetFocus := ordSetFocus()
   ordSetFocus( "jpcadas2" )
   FazBrowse( oTBrowse,, "1" )
   IF LastKey() != K_ESC .AND. ! Eof()
      KEYBOARD jpcadas->cdCodigo + Chr( K_ENTER )
   ENDIF
   ordSetFocus( cOrdSetFocus )
   SELECT ( nSelect )

   RETURN NIL


Achei interessante acrescentar esta parte:

   IF Select( "jpclista" ) == 0
      SELECT 0
      AbreArquivos( "jpclista" )
      WriteErrorLog( "Faltou abrir jpclista", 2 )
   ENDIF


Se esse arquivo não estiver aberto, já abre automático (esqueci dele).
Além de resolver o problema, o sistema ainda registra como erro, e me manda um email avisando que eu esqueci de colocar no fonte pra abrir esse arquivo.

nSelect := Select()
...
SELECT ( nSelect )


A rotina não sabe qual arquivo está posicionado, então salva a área atual, muda pra área de clientes e depois volta para o que estava antes.

   cOrdSetFocus := ordSetFocus()
   ordSetFocus( "jpcadas2" )
...
   ordSetFocus( cOrdSetFocus )


A rotina não sabe em qual índice está posicionado, então altera pra ordem alfabética e depois volta o que estava antes.

   IF LastKey() != K_ESC .AND. ! Eof()
      KEYBOARD jpcadas->cdCodigo + Chr( K_ENTER )
   ENDIF


Se foi escolhido um cliente, a rotina faz o KEYBOARD do código + ENTER. Isso vai entrar no GET.

Os campos que aparecerão no tbrowse

   oTBrowse := { ;
      { "Nome",        {|| jpcadas->cdNome } }, ;
      { "Apelido",     {|| jpcadas->cdApelido } }, ;
      { "Código",      {|| jpcadas->cdCodigo } }, ;
      { "UF",          {|| jpcadas->cdUf } }, ;
      { "Cidade",      {|| jpcadas->cdCidade } }, ;
      { "Ref.Mapa",    {|| jpcadas->cdMapa } },  ;
      { "Endereço",    {|| jpcadas->cdEndereco } }, ;
      { "Número",      {|| jpcadas->cdNumero } }, ;
      { "Complemento", {|| jpcadas->cdCompl } }, ;
      { "Cnpj",        {|| jpcadas->cdCnpj } } }


De acordo com certas condições, as cores de cada cliente serão diferentes.

   FOR nCont = 1 TO Len( oTBrowse )
      AAdd( oTBrowse[ nCont ], {|| iif( ! Encontra( jpcadas->cdStatus, "jpclista", "numlan" ) .OR. Val( jpcadas->cdStatus ) < 2, { 1, 2 }, ;
         iif( Trim( jpclista->csBloqueio ) == "0", { 3, 2 }, ;
         iif( Trim( jpclista->csBloqueio ) == "1", { 4, 2 }, { 7, 2 } ) ) ) } )
   NEXT


E a chamada à rotina de tbrowse propriamente dita.

   FazBrowse( oTBrowse,, "1" )


Esse detalhe a mais é porque misturo vários cadastros em um. O de clientes, usa tipo="1", é o que esse parâmetro indica

Resumindo: a rotina nova usou tudo que já estava disponível. Bastou seguir o padrão do aplicativo.
(E o sistema me avisou que esqueci de abrir o jpclista, preciso acrescentar no AbreArquivos(), é aonde tem a descrição de status de clientes, usada pra complemento nesse browse)
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

Meu modo de trabalho

Mensagempor JoséQuintas » 17 Jan 2016 11:55

Aproveitando:

São rotinas relativamente simples, mas o principal ORGANIZADAS, cada uma trata de seu "assunto".

pesquisa tá em pesquisa, validação tá em validação, browse de clientes nas rotinas de clientes, e o browse padrão na rotina dele.

O browse de clientes pode alterar área em uso e alterar índice, mas devolve tudo do jeito que estava antes.

Cada rotina tratando de seu "assunto", as outras não precisam se preocupar.

SET KEY
ReadVar()
SELECT
SET ORDER ( ou dbOrdSetFocus() )
KEYBOARD

Não tem nada avançado aí, tudo existe no Clipper.
Só fiz uso de coisas que sempre existiram.
Facita muito os campos de arquivo estarem padronizados, usar como ALIAS o próprio nome do arquivo, usar a ordem pelo NOME.

Atenção a isso quem usa
SELECT A, SELECT B, SELECT 1, SELECT 2, SET ORDER TO 0, SET ORDER TO 1

Ah é... em multithread sem problema, cada thread tem seu JPCADAS, por exemplo.
Se encaixou no meu padrão de programação direitinho.

Pelo que comentaram GTWVW precisa alias diferentes. Tudo bem também, se estiver padronizado, de repente só usar Substr( Alias(), 5 ) ou algo assim.
Também poderia radicalizar: a pesquisa também em thread separada, e abrir arquivo só pra ela.... não sei se facilitaria ou se compensa.
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

Meu modo de trabalho

Mensagempor JoséQuintas » 17 Jan 2016 12:22

Um resumo geral até aqui:

- Não preciso me preocupar com menu
- Não preciso me preocupar com tela
- Não preciso me preocupar com multithread
- Não preciso me preocupar com tbrowse que já existe
- Não preciso me preocupar com validação que já existe

- validação nova é fácil
- tbrowse novo é fácil
- o sistema se corrige automático e me avisa pra corrigir o fonte, quanto a dbf
- em caso de erro, recebo por email e também no celular, e já resolvo.

Como eu digo sempre, é deixar fonte fácil, que tudo vai mais fácil.
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

Meu modo de trabalho

Mensagempor JoséQuintas » 18 Jan 2016 10:39

Ë repetido mas tudo bem.
Coloquei em práticas que facilitam, mas de qualquer forma faz parte do meu modo de trabalho.
Recebi este erro por email, estava tentando descobrir há algum tempo.
Pra facilitar, coloquei depois pra também gravar no erro qual o comando SQL que causou o erro.
Agora descobri qual é: não previ endereço em branco nesta opção.

rro executando comando:-2147217900 [MySQL][ODBC 3.51 Driver][mysqld-5.6.25-log]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%' ORDER BY ENDERECO' at line 1
--------------------------------------------------------------------------------

SELECT ENDERECO, CLASSI, NUMERO FROM ALUGUEL WHERE MID( CLASSI, 1, 2 ) IN ( 'AR', 'CR', 'SR' ) AND ENDERECO LIKE ''%' ORDER BY ENDERECO;
Called from ADOCLASS:EXECUTE(218)
Called from CONSULTAALUGUELCLASS:NAVEGAALUGUEL(423)
Called from CONSULTAALUGUELCLASS:CONSULTA01(105)
Called from VHLAL01(49)
Called from DO(0)
Called from BOXMENU(519)
Called from MAINMENU(368)
Called from MAIN(161)


Na hora de mexer, cometi um erro, apaguei uma linha a mais.
Tranquilo, a checagem -w3 -es2 me avisou.

Harbour 3.4.0dev (0a127e0) (2016-01-15 01:54)
Copyright (c) 1999-2016, https://github.com/vszakats/harbour-core/
Compiling 'VHLAL01.prg'...
VHLAL01.prg(646) Warning W0032 Variable 'CPALAVRA' is assigned but not used in function 'MYSQLENDERECOLIKE(642)'
No code generated.


E depois, por precaução, dei uma conferida nas alterações pelo GIT.

alteracao.png


Um pedaço do fonte ficou diferente do outro.
Já aproveito pra deixar os dois iguais.

Então adicionais pra minha forma de trabalho:

- Meus erros por email me ajudam
- Rotinas que coloco no EXE me ajudam
- A compilação -w3 -es2 me ajuda
- O git me ajuda

Os dois primeiros comecei a usar nos tempos do Clipper.
Os dois últimos podem ser usados com o Clipper, mas só conheci no Harbour.

São vários ajudantes, disponíveis pra todo mundo, e a maioria não usa.

Comentário adicional:
O erro foi só num dos blocos.
É que aproveitei pra melhorar o outro bloco.
Sou eu que vou mexer no fonte, então estou melhorando pra mim.
Multiplique isso por 365 dias por ano, vários anos... dá pra melhorar muuuuito, só fazendo um pouquinho por vez.

Está aí: Acrescente aos meus ajudantes EU MESMO.
O melhor ajudante de um programador é ele mesmo, porque é ele próprio que pode se ajudar.
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

Meu modo de trabalho

Mensagempor JoséQuintas » 18 Jan 2016 11:14

O único lado ruim é que não resolvi o problema.
Nos dois casos, já está testando se endereço está vazio.

Como em todos os "LIKE" tem checagem, só resta algum caractere inválido no endereço.
Vou ter que rever minha GETSYS, e a rotina de checagem, pra descobrir qual pode ser o caractere.
A não ser que o usuário lembre o que digitou.

Ou se eu conseguir colocar o Harbour pra conferir.... talvez dê....

Nota:
Pelo menos a checagem evitou de estragar mais.
É que postei aqui após a alteração, mas fui dar uma última olhada antes de finalizar, justamente por estar fazendo as duas coisas ao mesmo tempo.
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

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 24 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