Meu modo de trabalho
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
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.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Até que não ficou tão grande assim...
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...
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()
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
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.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
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.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Apenas uma possibilidade, ainda não testado, mas....
Débito
Crédito
E a partir daí:
Vai ser muito select pra chegar a um simples saldo mas... é uma opção...
Falta testar velocidade disso.
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
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
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
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Aqui dá pra notar uma mudança no passar dos tempos:
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.
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 ) )
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Sobre aquilo do saldo de conta.....
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...
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
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
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.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Nesta alteração mostra legal as possibilidades do SQL
o JPEMPRESA.DBF era DBF (jpempresa->emCep), agora está no MySQL.
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.
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.
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
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
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()
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Os ajustes estilo gambiarra....
esse virou isto:
mas este aqui:
Se fosse igual o anterior, seriam 3 selects juntando no Harbour.... melhor trazer pronto.
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.
Código: Selecionar todos
m_texto = Trim( jpempresa->emCarTit)
Código: Selecionar todos
m_Texto := cnSQL:ReturnSelect( "SELECT EMCARTIT FROM JPEMPRESA WHERE IDEMPRESA=1" )
Código: Selecionar todos
m_texto = Trim( jpempresa->emCarCon) + " - CRC/" + jpempresa->emUfCrc + ": " + Trim( jpempresa->emCrcCon )
Código: Selecionar todos
m_texto = cnSQL:ReturnSelect( "CONCAT( EMCARCON,'-CRC/',EMUFCRC,':',EMCRCCON) FROM JPEMPRESA WHERE IDEMPRESA=1" )
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Essa linha mexia no DBF de pedidos, que não existe há vários meses...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)
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
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...
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
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.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Eu deveria ter procurado GOTO também, e SKIP.... kkkkSYSTEM 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)
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
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.
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/
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/