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

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

Meu modo de trabalho

Mensagem por JoséQuintas »

Ah...
Cheguei a derrubar o aplicativo....
Levou um tempinho pra descobrir, mas....

Pego informações do arquivo de configuração pra criar a conexão SQL.
Acontece, que num determinado fonte, coloquei pra criar a conexão ANTES de configurar.
Resultado: conexão errada, e aplicativo não entrava mais...

Agora ok novamente.
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

Meu modo de trabalho

Mensagem por JoséQuintas »

Até que não ficou tão grande assim...

Código: Selecionar todos

   WITH OBJECT cnSQL
      :ExecuteCmd( "UPDATE JPEMPRESA" + ;
        " JOIN JPEMPRESA AS A ON JPEMPRESA.IDEMPRESA=A.IDEMPRESA" + ;
        " SET JPEMPRESA.EMRELEMI=" + StringSQL( cRelEmi ) + ", " + ;
         " JPEMPRESA.EMANOBASE = A.EMANOBASE + 1," + ;
         " JPEMPRESA.EMLOTE=" + StringSQL( "01" + Right( Str( AppAnoBase() + 1, 4 ), 2 ) + "00001" ) + "," + ;
         " JPEMPRESA.EMDIARIO1=A.EMDIARIO2, JPEMPRESA.EMDIARIO2=A.EMDIARIO3," + ;
         " JPEMPRESA.EMDIARIO3=A.EMDIARIO4, JPEMPRESA.EMDIARIO4=A.EMDIARIO5," + ;
         " JPEMPRESA.EMDIARIO6=A.EMDIARIO7,JPEMPRESA.EMDIARIO8='' WHERE JPEMPRESA.IDEMPRESA=1" )
   SELECT jpempresa
   RecLock()
   REPLACE ;
      jpempresa->emRelEmi  WITH cRelEmi, ;
      jpempresa->emAnoBase WITH  jpempresa->emAnoBase + 1, ;
      jpempresa->emLote    WITH "01" + Right( Str( jpempresa->emAnoBase, 4 ), 2 ) + "00001", ;
      jpempresa->emDiario1 WITH jpempresa->emDiario2, ;
      jpempresa->emDiario2 WITH jpempresa->emDiario3, ;
      jpempresa->emDiario3 WITH jpempresa->emDiario4, ;
      jpempresa->emDiario4 WITH jpempresa->emDiario5, ;
      jpempresa->emDiario5 WITH jpempresa->emDiario6, ;
      jpempresa->emDiario6 WITH jpempresa->emDiario7, ;
      jpempresa->emDiario7 WITH jpempresa->emDiario8, ;
      jpempresa->emDiario8 WITH ""
   RecUnlock()
Fiquei na dúvida sobre atualizar 1 com 2, 2 com 3, 3 com 4, etc... e preferi fazer um JOIN.
Não muda muita coisa, REPLACE A WITH B por A=B...
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

Meu modo de trabalho

Mensagem por JoséQuintas »

sql.png
Só como exemplo, de que nem sempre o que parece é....

Eu acessava o arquivo JPEMPRESA só pra pegar o CNPJ, no fonte Harbour, e pra passar pra stored procedure.
Agora que JPEMPRESA foi pra SQL, a stored procedure pega a informação diretamente da tabela.
Acabei eliminando o acesso pelo 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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Meu modo de trabalho

Mensagem por JoséQuintas »

Ficou interessante porque....

Numa alteração rápida, eu posso usar aquela função cnSQL:ReturnSelect( "EMCNPJ FROM JPEMPRESA WHERE IDEMPRESA=1" )
E depois, conforme for movendo outras tabelas, junta isso com outros SELECTs mais amplos.
Um tapa-buraco básico, até a solução definitiva.
Isso porque tem horas que precisa uma solução rápida, mesmo que quebra-galho.

E esse jpempresa tá dando todo trabalho que eu pensava.... rs
É o último do uso geral, e também faz parte da contabilidade, por isso tinha deixado pro fim.
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

Meu modo de trabalho

Mensagem por JoséQuintas »

Apenas uma possibilidade, ainda não testado, mas....

Débito

Código: Selecionar todos

CREATE FUNCTION ze_SaldoDebito( cConta VARCHAR(20), nMes INT(11) )
RETURNS DECIMAL(16,2)

BEGIN

DECLARE nValor DECIMAL(16,2) DEFAULT 0;

SET nValor = (
SELECT
CASE nMes
   WHEN  1 THEN cpDeb01
   WHEN  2 THEN cpDeb02
   WHEN  3 THEN cpDeb03
   WHEN  4 THEN cpDeb04
   WHEN  5 THEN cpDeb05
   WHEN  6 THEN cpDeb06
   WHEN  7 THEN cpDeb07
   WHEN  8 THEN cpDeb08
   WHEN  9 THEN cpDeb09
   WHEN 10 THEN cpDeb10
   WHEN 11 THEN cpDeb11
   WHEN 12 THEN cpDeb12
   WHEN 13 THEN cpDeb13
   WHEN 14 THEN cpDeb14
   WHEN 15 THEN cpDeb15
   WHEN 16 THEN cpDeb16
   WHEN 17 THEN cpDeb17
   WHEN 18 THEN cpDeb18
   WHEN 19 THEN cpDeb19
   WHEN 20 THEN cpDeb20
   WHEN 21 THEN cpDeb21
   WHEN 22 THEN cpDeb22
   WHEN 23 THEN cpDeb23
   WHEN 24 THEN cpDeb24
   WHEN 25 THEN cpDeb25
   WHEN 26 THEN cpDeb26
   WHEN 27 THEN cpDeb27
   WHEN 28 THEN cpDeb28
   WHEN 29 THEN cpDeb29
   WHEN 30 THEN cpDeb30
   WHEN 31 THEN cpDeb31
   WHEN 32 THEN cpDeb32
   WHEN 33 THEN cpDeb33
   WHEN 34 THEN cpDeb34
   WHEN 35 THEN cpDeb35
   WHEN 36 THEN cpDeb36
   WHEN 37 THEN cpDeb37
   WHEN 38 THEN cpDeb38
   WHEN 39 THEN cpDeb39
   WHEN 40 THEN cpDeb40
   WHEN 41 THEN cpDeb41
   WHEN 42 THEN cpDeb42
   WHEN 43 THEN cpDeb43
   WHEN 44 THEN cpDeb44
   WHEN 45 THEN cpDeb45
   WHEN 46 THEN cpDeb46
   WHEN 47 THEN cpDeb47
   WHEN 48 THEN cpDeb48
   WHEN 49 THEN cpDeb49
   WHEN 50 THEN cpDeb50
   WHEN 51 THEN cpDeb51
   WHEN 52 THEN cpDeb52
   WHEN 53 THEN cpDeb53
   WHEN 54 THEN cpDeb54
   WHEN 55 THEN cpDeb55
   WHEN 56 THEN cpDeb56
   WHEN 57 THEN cpDeb57
   WHEN 58 THEN cpDeb58
   WHEN 59 THEN cpDeb59
   WHEN 60 THEN cpDeb60
   WHEN 61 THEN cpDeb61
   WHEN 62 THEN cpDeb62
   WHEN 63 THEN cpDeb63
   WHEN 64 THEN cpDeb64
   WHEN 65 THEN cpDeb65
   WHEN 66 THEN cpDeb66
   WHEN 67 THEN cpDeb67
   WHEN 68 THEN cpDeb68
   WHEN 69 THEN cpDeb69
   WHEN 70 THEN cpDeb70
   WHEN 71 THEN cpDeb71
   WHEN 72 THEN cpDeb72
   WHEN 73 THEN cpDeb73
   WHEN 74 THEN cpDeb74
   WHEN 75 THEN cpDeb75
   WHEN 76 THEN cpDeb76
   WHEN 77 THEN cpDeb77
   WHEN 78 THEN cpDeb78
   WHEN 79 THEN cpDeb79
   WHEN 80 THEN cpDeb80
   WHEN 81 THEN cpDeb81
   WHEN 82 THEN cpDeb82
   WHEN 83 THEN cpDeb83
   WHEN 84 THEN cpDeb84
   WHEN 85 THEN cpDeb85
   WHEN 86 THEN cpDeb86
   WHEN 87 THEN cpDeb87
   WHEN 88 THEN cpDeb88
   WHEN 89 THEN cpDeb89
   WHEN 90 THEN cpDeb90
   WHEN 91 THEN cpDeb91
   WHEN 92 THEN cpDeb92
   WHEN 93 THEN cpDeb93
   WHEN 94 THEN cpDeb94
   WHEN 95 THEN cpDeb95
   WHEN 96 THEN cpDeb96
   ELSE 0
END
FROM jpctconta WHERE CPCONTA = cConta );

RETURN nValor;

END
Crédito

Código: Selecionar todos

CREATE FUNCTION ze_SaldoCredito( cConta VARCHAR(20), nMes INT(11) )
RETURNS DECIMAL(16,2)

BEGIN

DECLARE nValor DECIMAL(16,2) DEFAULT 0;

SET nValor = (
SELECT
CASE nMes
   WHEN  1 THEN cpCre01
   WHEN  2 THEN cpCre02
   WHEN  3 THEN cpCre03
   WHEN  4 THEN cpCre04
   WHEN  5 THEN cpCre05
   WHEN  6 THEN cpCre06
   WHEN  7 THEN cpCre07
   WHEN  8 THEN cpCre08
   WHEN  9 THEN cpCre09
   WHEN 10 THEN cpCre10
   WHEN 11 THEN cpCre11
   WHEN 12 THEN cpCre12
   WHEN 13 THEN cpCre13
   WHEN 14 THEN cpCre14
   WHEN 15 THEN cpCre15
   WHEN 16 THEN cpCre16
   WHEN 17 THEN cpCre17
   WHEN 18 THEN cpCre18
   WHEN 19 THEN cpCre19
   WHEN 20 THEN cpCre20
   WHEN 21 THEN cpCre21
   WHEN 22 THEN cpCre22
   WHEN 23 THEN cpCre23
   WHEN 24 THEN cpCre24
   WHEN 25 THEN cpCre25
   WHEN 26 THEN cpCre26
   WHEN 27 THEN cpCre27
   WHEN 28 THEN cpCre28
   WHEN 29 THEN cpCre29
   WHEN 30 THEN cpCre30
   WHEN 31 THEN cpCre31
   WHEN 32 THEN cpCre32
   WHEN 33 THEN cpCre33
   WHEN 34 THEN cpCre34
   WHEN 35 THEN cpCre35
   WHEN 36 THEN cpCre36
   WHEN 37 THEN cpCre37
   WHEN 38 THEN cpCre38
   WHEN 39 THEN cpCre39
   WHEN 40 THEN cpCre40
   WHEN 41 THEN cpCre41
   WHEN 42 THEN cpCre42
   WHEN 43 THEN cpCre43
   WHEN 44 THEN cpCre44
   WHEN 45 THEN cpCre45
   WHEN 46 THEN cpCre46
   WHEN 47 THEN cpCre47
   WHEN 48 THEN cpCre48
   WHEN 49 THEN cpCre49
   WHEN 50 THEN cpCre50
   WHEN 51 THEN cpCre51
   WHEN 52 THEN cpCre52
   WHEN 53 THEN cpCre53
   WHEN 54 THEN cpCre54
   WHEN 55 THEN cpCre55
   WHEN 56 THEN cpCre56
   WHEN 57 THEN cpCre57
   WHEN 58 THEN cpCre58
   WHEN 59 THEN cpCre59
   WHEN 60 THEN cpCre60
   WHEN 61 THEN cpCre61
   WHEN 62 THEN cpCre62
   WHEN 63 THEN cpCre63
   WHEN 64 THEN cpCre64
   WHEN 65 THEN cpCre65
   WHEN 66 THEN cpCre66
   WHEN 67 THEN cpCre67
   WHEN 68 THEN cpCre68
   WHEN 69 THEN cpCre69
   WHEN 70 THEN cpCre70
   WHEN 71 THEN cpCre71
   WHEN 72 THEN cpCre72
   WHEN 73 THEN cpCre73
   WHEN 74 THEN cpCre74
   WHEN 75 THEN cpCre75
   WHEN 76 THEN cpCre76
   WHEN 77 THEN cpCre77
   WHEN 78 THEN cpCre78
   WHEN 79 THEN cpCre79
   WHEN 80 THEN cpCre80
   WHEN 81 THEN cpCre81
   WHEN 82 THEN cpCre82
   WHEN 83 THEN cpCre83
   WHEN 84 THEN cpCre84
   WHEN 85 THEN cpCre85
   WHEN 86 THEN cpCre86
   WHEN 87 THEN cpCre87
   WHEN 88 THEN cpCre88
   WHEN 89 THEN cpCre89
   WHEN 90 THEN cpCre90
   WHEN 91 THEN cpCre91
   WHEN 92 THEN cpCre92
   WHEN 93 THEN cpCre93
   WHEN 94 THEN cpCre94
   WHEN 95 THEN cpCre95
   WHEN 96 THEN cpCre96
   ELSE 0
END
FROM jpctconta WHERE CPCONTA = cConta );

RETURN nValor;

END
E a partir daí:

Código: Selecionar todos

CREATE FUNCTION SaldoConta( cConta VARCHAR(20), nMes INT(11) )
RETURNS DECIMAL(16,2)

BEGIN

DECLARE nValor DECIMAL(16,2) DEFAULT 0;
DECLARE nCont INT(11) DEFAULT 0;

IF nMes = 0 THEN
   SET nValor = ( SELECT cpSaldoAnt FROM JPCTCONTA WHERE IDCONTA = cConta );
END IF;

LOOP_MES: LOOP
   SET nCont := nCont + 1;
   IF nCont > nMes THEN
      LEAVE LOOP_MES;
   END IF;
   SET nValor := nValor + ze_Debito( cConta, nCont ) - ze_Credito( cConta, nCont );
   END LOOP LOOP_MES;

RETURN nValor;

END
Vai ser muito select pra chegar a um simples saldo mas... é uma opção...
Falta testar velocidade disso.
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

Meu modo de trabalho

Mensagem por JoséQuintas »

Aqui dá pra notar uma mudança no passar dos tempos:

Código: Selecionar todos

   mInformante := SoNumeros( cnSQL:ReturnSelect( "EMCNPJ FROM JPEMPRESA WHERE IDEMPRESA=1" ) )

   mInfoAge := ADOField( "AAANP", "C", "JPTABANPAGE", "AACNPJ=" + StringSQL( Left( mInformante, 8 ) ) )
   mInfoIns := ADOField( "AIANP", "C", "JPTABANPINS", "AICNPJ=" + StringSQL( mInformante ) )
Nas duas linhas de baixo tomando cuidado pro retorno ser o esperado.
Na primeira linha.... é direto sem dó....
Mas se não existir o cadastro da empresa... o aplicativo seria de quem? é obrigatório que a informação exista.
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

Meu modo de trabalho

Mensagem por JoséQuintas »

Sobre aquilo do saldo de conta.....

Código: Selecionar todos

CREATE FUNCTION SaldoConta( cConta VARCHAR(20), nMes INT(11) )
RETURNS DECIMAL(16,2)

BEGIN

DECLARE nValor DECIMAL(16,2) DEFAULT 0;

SET nValor := (
SELECT
CPSALDOANT
+ IF( nMes >  0, 0, CPDEB01 - CPCRE01 )
+ IF( nMes >  1, 0, CPDEB02 - CPCRE02 )
+ IF( nMes >  2, 0, CPDEB03 - CPCRE03 )
+ IF( nMes >  3, 0, CPDEB04 - CPCRE04 )
+ IF( nMes >  4, 0, CPDEB05 - CPCRE05 )
+ IF( nMes >  5, 0, CPDEB06 - CPCRE06 )
+ IF( nMes >  6, 0, CPDEB07 - CPCRE07 )
+ IF( nMes >  7, 0, CPDEB08 - CPCRE08 )
+ IF( nMes >  8, 0, CPDEB09 - CPCRE09 )
+ IF( nMes >  9, 0, CPDEB10 - CPCRE10 )
+ IF( nMes > 10, 0, CPDEB11 - CPCRE11 )
+ IF( nMes > 11, 0, CPDEB12 - CPCRE12 )
+ IF( nMes > 12, 0, CPDEB13 - CPCRE13 )
+ IF( nMes > 13, 0, CPDEB14 - CPCRE14 )
+ IF( nMes > 14, 0, CPDEB15 - CPCRE15 )
+ IF( nMes > 15, 0, CPDEB16 - CPCRE16 )
+ IF( nMes > 16, 0, CPDEB17 - CPCRE17 )
+ IF( nMes > 17, 0, CPDEB18 - CPCRE18 )
+ IF( nMes > 18, 0, CPDEB19 - CPCRE19 )
+ IF( nMes > 29, 0, CPDEB20 - CPCRE20 )
+ IF( nMes > 20, 0, CPDEB21 - CPCRE21 )
+ IF( nMes > 21, 0, CPDEB22 - CPCRE22 )
+ IF( nMes > 22, 0, CPDEB23 - CPCRE23 )
+ IF( nMes > 23, 0, CPDEB24 - CPCRE24 )
+ IF( nMes > 24, 0, CPDEB25 - CPCRE25 )
+ IF( nMes > 25, 0, CPDEB26 - CPCRE26 )
+ IF( nMes > 26, 0, CPDEB27 - CPCRE27 )
+ IF( nMes > 27, 0, CPDEB28 - CPCRE28 )
+ IF( nMes > 28, 0, CPDEB29 - CPCRE29 )
+ IF( nMes > 29, 0, CPDEB30 - CPCRE30 )
+ IF( nMes > 30, 0, CPDEB31 - CPCRE31 )
+ IF( nMes > 31, 0, CPDEB32 - CPCRE32 )
+ IF( nMes > 32, 0, CPDEB33 - CPCRE33 )
+ IF( nMes > 33, 0, CPDEB34 - CPCRE34 )
+ IF( nMes > 34, 0, CPDEB35 - CPCRE35 )
+ IF( nMes > 35, 0, CPDEB36 - CPCRE36 )
+ IF( nMes > 36, 0, CPDEB37 - CPCRE37 )
+ IF( nMes > 37, 0, CPDEB38 - CPCRE38 )
+ IF( nMes > 38, 0, CPDEB39 - CPCRE39 )
+ IF( nMes > 39, 0, CPDEB40 - CPCRE40 )
+ IF( nMes > 40, 0, CPDEB41 - CPCRE41 )
+ IF( nMes > 41, 0, CPDEB42 - CPCRE42 )
+ IF( nMes > 42, 0, CPDEB43 - CPCRE43 )
+ IF( nMes > 43, 0, CPDEB44 - CPCRE44 )
+ IF( nMes > 44, 0, CPDEB45 - CPCRE45 )
+ IF( nMes > 45, 0, CPDEB46 - CPCRE46 )
+ IF( nMes > 46, 0, CPDEB47 - CPCRE47 )
+ IF( nMes > 47, 0, CPDEB48 - CPCRE48 )
+ IF( nMes > 48, 0, CPDEB49 - CPCRE49 )
+ IF( nMes > 49, 0, CPDEB50 - CPCRE50 )
+ IF( nMes > 50, 0, CPDEB51 - CPCRE51 )
+ IF( nMes > 51, 0, CPDEB52 - CPCRE52 )
+ IF( nMes > 52, 0, CPDEB53 - CPCRE53 )
+ IF( nMes > 53, 0, CPDEB54 - CPCRE54 )
+ IF( nMes > 54, 0, CPDEB55 - CPCRE55 )
+ IF( nMes > 55, 0, CPDEB56 - CPCRE56 )
+ IF( nMes > 56, 0, CPDEB57 - CPCRE57 )
+ IF( nMes > 57, 0, CPDEB58 - CPCRE58 )
+ IF( nMes > 58, 0, CPDEB59 - CPCRE59 )
+ IF( nMes > 59, 0, CPDEB60 - CPCRE60 )
+ IF( nMes > 60, 0, CPDEB61 - CPCRE61 )
+ IF( nMes > 61, 0, CPDEB62 - CPCRE62 )
+ IF( nMes > 62, 0, CPDEB63 - CPCRE63 )
+ IF( nMes > 63, 0, CPDEB64 - CPCRE64 )
+ IF( nMes > 64, 0, CPDEB65 - CPCRE65 )
+ IF( nMes > 65, 0, CPDEB66 - CPCRE66 )
+ IF( nMes > 66, 0, CPDEB67 - CPCRE67 )
+ IF( nMes > 67, 0, CPDEB68 - CPCRE68 )
+ IF( nMes > 68, 0, CPDEB69 - CPCRE69 )
+ IF( nMes > 69, 0, CPDEB70 - CPCRE70 )
+ IF( nMes > 70, 0, CPDEB71 - CPCRE71 )
+ IF( nMes > 71, 0, CPDEB72 - CPCRE72 )
+ IF( nMes > 72, 0, CPDEB73 - CPCRE73 )
+ IF( nMes > 73, 0, CPDEB74 - CPCRE74 )
+ IF( nMes > 74, 0, CPDEB75 - CPCRE75 )
+ IF( nMes > 75, 0, CPDEB76 - CPCRE76 )
+ IF( nMes > 76, 0, CPDEB77 - CPCRE77 )
+ IF( nMes > 77, 0, CPDEB78 - CPCRE78 )
+ IF( nMes > 78, 0, CPDEB79 - CPCRE79 )
+ IF( nMes > 79, 0, CPDEB80 - CPCRE80 )
+ IF( nMes > 80, 0, CPDEB81 - CPCRE81 )
+ IF( nMes > 81, 0, CPDEB82 - CPCRE82 )
+ IF( nMes > 82, 0, CPDEB83 - CPCRE83 )
+ IF( nMes > 83, 0, CPDEB84 - CPCRE84 )
+ IF( nMes > 84, 0, CPDEB85 - CPCRE85 )
+ IF( nMes > 85, 0, CPDEB86 - CPCRE86 )
+ IF( nMes > 86, 0, CPDEB87 - CPCRE87 )
+ IF( nMes > 87, 0, CPDEB88 - CPCRE88 )
+ IF( nMes > 88, 0, CPDEB89 - CPCRE89 )
+ IF( nMes > 89, 0, CPDEB90 - CPCRE90 )
+ IF( nMes > 90, 0, CPDEB91 - CPCRE91 )
+ IF( nMes > 91, 0, CPDEB92 - CPCRE92 )
+ IF( nMes > 92, 0, CPDEB93 - CPCRE93 )
+ IF( nMes > 93, 0, CPDEB94 - CPCRE94 )
+ IF( nMes > 94, 0, CPDEB95 - CPCRE95 )
+ IF( nMes > 95, 0, CPDEB96 - CPCRE96 )
FROM JPCTCONTA
WHERE IDCONTA = cConta );

RETURN nValor;

END
Desta forma é um único SELECT.

Nota: só criei de curiosidade, ainda não resolvi se vou fazer assim mesmo, igual é em DBF.

Algumas coisas vou só fazendo testes, pra ver o que dá.... assim vou criando idéias...
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

Meu modo de trabalho

Mensagem por JoséQuintas »

jpempresa.png
O que estou mexendo no momento é o arquivo JPEMPRESA.DBF que virou a tabela JPEMPRESA.
Muita coisa é pra conversão, mas tem bastante.
Pra cada parte estou usando uma solução diferente.
Mas em muitos lugares foi esse cnSQL:ReturnSelect()
Em outros, aproveitei um SELECT já existente pra acrescentar a informação da empresa.
Em outros, criei variáveis no início da rotina.
Em certos casos, criei variáveis visíveis em multithread.

336 lugares de fonte usando jpempresa->, portanto o DBF.
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

Meu modo de trabalho

Mensagem por JoséQuintas »

Nesta alteração mostra legal as possibilidades do SQL

Código: Selecionar todos

      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.

Código: Selecionar todos

         :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.

Código: Selecionar todos

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

Meu modo de trabalho

Mensagem por JoséQuintas »

Os ajustes estilo gambiarra....

Código: Selecionar todos

   m_texto = Trim( jpempresa->emCarTit)
esse virou isto:

Código: Selecionar todos

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

Código: Selecionar todos

   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.

Código: Selecionar todos

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

Meu modo de trabalho

Mensagem por JoséQuintas »

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

Meu modo de trabalho

Mensagem por JoséQuintas »

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

Meu modo de trabalho

Mensagem por JoséQuintas »

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

Meu modo de trabalho

Mensagem por JoséQuintas »

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

Meu modo de trabalho

Mensagem por JoséQuintas »

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.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/
Responder