Clipper On Line • Ver Tópico - Idéia pra armazenar comandos SQL

Idéia pra armazenar comandos SQL

Discussão sobre SQL

Moderador: Moderadores

 

Idéia pra armazenar comandos SQL

Mensagempor JoséQuintas » 26 Jul 2021 14:06

xml.png


Até pensei que ia ficar no mesmo, mas....

o fonte C de update2020 reduziu em 700kb, mas o ze_resxml tá por volta de 600kb
Tá menor incluir como json do que incluir usando #include.
Interessante isso, pensei que seria o contrário.
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: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Idéia pra armazenar comandos SQL

Mensagempor JoséQuintas » 26 Jul 2021 20:25

resxml.png


Vixe...
Como cresceu...
26.154 linhas !!!

Nada diferente de antes, apenas juntei tudo.
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: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Idéia pra armazenar comandos SQL

Mensagempor JoséQuintas » 26 Jul 2021 20:35

 Pasta de d:\wwwjpa\arquivos

26/07/2021  12:43         3.513.264 JPA.EXE

Pasta de d:\fontes\integra

26/07/2021  20:32         3.502.512 jpa.exe


O EXE reduziu de 3.513 pra 3.502

NÃO estava nem interessado nisso, mas reduziu um pouco o tamanho.
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: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Idéia pra armazenar comandos SQL

Mensagempor JoséQuintas » 28 Jul 2021 01:49

res.png


Uia...
LBALGER

O obj tinha 755.988

agora tem 220.440

Simples: Porque incluir a DLL normal, se posso incluir a DLL zipada....

A única coisa esquisita é que o EXE aumentou de tamanho.
Acho que a taxa de compressão final baixou.
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: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Idéia pra armazenar comandos SQL

Mensagempor JoséQuintas » 28 Jul 2021 09:00

E depois de tudo isso....

capicom.dll, msxml5.dll, msxml5r.dll, rmchart.dll....

Quem vai usar isso precisa internet.

Se tenho um servidor grátis na internet.... gravar no MySQL da internet e pronto, em base64.

Quanto ao restante, vou avaliar aonde pode ser interessante deixar igual.

Notas:
- Não que seja grátis, faz parte do meu site, apenas não tenho cobrança adicional pra fazer uso dele.
- As dlls não faziam parte do arquivo, mas eram resource.
- Opcionalmente podem ficar no SQL do cliente, atualizado pelo da internet.
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: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Idéia pra armazenar comandos SQL

Mensagempor JoséQuintas » 28 Jul 2021 09:16

E uma idéia gera outra....

Pra quem ainda transfere DBF....

Uma opção seria salvar o DBF inteiro no MySQL, pra transferência.

Tanto faz se é DBF, EXE, DLL, OCX, PDF, XLS, DOC, ZIP, ou qualquer coisa.
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: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Idéia pra armazenar comandos SQL

Mensagempor JoséQuintas » 28 Jul 2021 13:55

mysql.png


Não sei no cliente, mas aqui que tá com uma internet do carvalho... fica mais rápido do que ler do HD... kkkk
E mesmo pro upload.
Por enquanto tem DLL e JSON
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: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Idéia pra armazenar comandos SQL

Mensagempor JoséQuintas » 29 Jul 2021 00:19

mysqljson.png


Gostei desse esquema que acabei criando.
Uma tabela inteira vira apenas um campo no registro.
Ainda testando as possibilidades.

SELECT * FROM WEBBINARY WHERE NAME = 'sefazcfop'

Isso trás a tabela inteira de CFOP em ..... array !!!!

Muito interessante mesmo.

É aquele mesmo XML, mas agora dividido em registros do MySQL.
A parte XML sumiu e virou tabela MySQL.

Com isso, usar Excel ou DBF pra transferir informações virou coisa do passado.

Um gerador de relatórios capaz de ler JSON..... uau !!!
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: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Idéia pra armazenar comandos SQL

Mensagempor JoséQuintas » 30 Jul 2021 23:17

binary.png


Qual a diferença do anterior?
Esse é o servidor local, depois de ser atualizado com informações do servidor da internet.
A rotina de atualização que usei foi esta:

STATIC FUNCTION AtualizaBinary()

   LOCAL cnInternet := ADOClass():New( AppcnInternet() )
   LOCAL cnSQL := ADOClass():New( AppConexao() )

   SayScroll( "Atualizando referências" )
   cnInternet:cSQL := "SELECT * FROM WEBBINARY"
   cnInternet:Execute()
   DO WHILE ! cnInternet:Eof()
      cnSQL:cSQL := "SELECT BINDATE FROM JPBINARY WHERE BINNAME = " + StringSQL( cnInternet:String( "BINNAME" ) )
      cnSQL:Execute()
      IF cnSQL:Date( "BINDATE" ) < cnInternet:Date( "BINDATE" )
         cnSQL:QueryCreate()
         cnSQL:QueryAdd( "BINDATE", cnInternet:Date( "BINDATE" ) )
         cnSQL:QueryAdd( "BINTYPE", cnInternet:String( "BINTYPE" ) )
         cnSQL:QueryAdd( "BINVALUE", cnInternet:String( "BINVALUE" ) )
         IF cnSQL:Eof()
            cnSQL:QueryAdd( "BINNAME", cnInternet:String( "BINNAME" ) )
            cnSQL:QueryExecuteInsert( "JPBINARY" )
         ELSE
            cnSQL:QueryExecuteUpdate( "JPBINARY", "BINNAME = " + StringSQL( cnInternet:String( "BINNAME" ) ) )
         ENDIF
      ENDIF
      cnInternet:MoveNext()
   ENDDO
   cnInternet:CloseRecordset()

   RETURN Nil


Serve pra trazer tudo que existir de atualização de uma vez.
Qualquer coisa: EXE, DLL, JSON, comando SQL, DBF, etc. qualquer coisa.

A partir daí, qualquer terminal tem acesso a tudo, sempre que precisar.
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: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Idéia pra armazenar comandos SQL

Mensagempor JoséQuintas » 30 Jul 2021 23:53

STATIC FUNCTION AtualizaBinary()

   LOCAL cnInternet := ADOClass():New( AppcnInternet() )
   LOCAL cnSQL := ADOClass():New( AppConexao() )
   LOCAL aList := {}, aItem

   SayScroll( "Atualizando referências" )
   WITH OBJECT cnInternet
      :cSQL := "SELECT BINNAME, BINDATE, BINTYPE FROM WEBBINARY"
      :Execute()
      DO WHILE ! cnInternet:Eof()
         AAdd( aList, { :String( "BINNAME" ), :Date( "BINDATE" ), :String( "BINTYPE" ) } )
         :MoveNext()
      ENDDO
      :CloseRecordset()
      FOR EACH aItem IN aList
         cnSQL:cSQL := "SELECT BINDATE FROM JPBINARY WHERE BINNAME = " + StringSQL( aItem[ 1 ] )
         cnSQL:Execute()
         IF cnSQL:Date( "BINDATE" ) < aItem[ 2 ]
            cnInternet:cSQL := "SELECT * FROM WEBBINARY WHERE BINNAME = " + StringSQL( aItem[ 1 ] )
            cnInternet:Execute()
            cnSQL:ExecuteCmd( "DELETE FROM JPBINARY WHERE BINNAME = " + StringSQL( aItem[ 1 ] ) )
            cnSQL:ExecuteCmd( "INSERT INTO JPBINARY ( BINNAME, BINDATE, BINTYPE, BINVALUE ) VALUES ( " + ;
               StringSQL( aItem[ 1 ] ) + ", " + DateSQL( aItem[ 2 ] ) + ", " + StringSQL( aItem[ 3 ] ) + ", " + ;
               StringSQL( cnInternet:String( "BINVALUE" ) ) + " )" )
            cnInternet:CloseRecordset()
         ENDIF
      NEXT
   ENDWITH
   cnInternet:CloseConnection()

   RETURN Nil


Versão atualizada.
Baixa uma coisa de cada vez, e só baixa se precisar.
Isso é bom, caso o tamanho dos arquivos cresça muito, pra não perder tempo com o que não interessa.
Falta testar com internet lenta....
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: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Idéia pra armazenar comandos SQL

Mensagempor JoséQuintas » 31 Jul 2021 12:19

Abusar é um perigo....

Pensei... porque não também já não armazenar o ODBC de MySQL/MariaDB ????

Porque NÃO serve pra nada.

Se pra acessar o MySQL precisa do ODBC instalado.... eu só teria acesso a ele, se ele já estivesse instalado, e neste caso, eu baixaria ele pra que ????

Pois é... ainda bem que pensei nisso antes de fazer....
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: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Idéia pra armazenar comandos SQL

Mensagempor JoséQuintas » 31 Jul 2021 14:02

resource.png


Ainda nos testes iniciais.

4 DLLs
25 stored function
21 json
15 stored procedure
100 create table

passando de 4MB.

Por enquanto, puxando durante atualização de versão, mas não é o ideal ainda.
É que o aplicativo pode precisar de parte das coisas enquanto está sendo carregado, então desse jeito não atende totalmente.
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: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Idéia pra armazenar comandos SQL

Mensagempor JoséQuintas » 31 Jul 2021 14:18

Essa é uma "tabela livre".
Não significa que criou as tabelas, procedures, functions, etc.
O aplicativo apenas vai trazer do servidor externo para o servidor local, sem mexer em mais nada, algo como "deixar anotado".
Depois.... o aplicativo vai fazer uso disso pra se atualizar.

Já acrescentei tamanho e CRC32, pra conferir tudo, e evitar problemas.

É que quando for usar pra valer... tem que funcionar... não pode correr o risco de estar com defeito.
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: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Idéia pra armazenar comandos SQL

Mensagempor JoséQuintas » 01 Ago 2021 18:24

A rotina ficou complicada: ler um campo do SQL kkkk

FUNCTION BinaryFromSQL( cName )

   LOCAL cTxt
   LOCAL cnSQL := ADOClass():New( AppConexao() )

   WITH OBJECT cnSQL
      :cSQL := "SELECT * FROM JPBINARY WHERE BINNAME = " + StringSQL( cName )
      :Execute()
      cTxt := :String( "BINVALUE" )
      :CloseRecordset()
   ENDWITH

   RETURN cTxt
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: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Idéia pra armazenar comandos SQL

Mensagempor JoséQuintas » 01 Ago 2021 18:29

Um módulo usando isso acima:

#include "inkey.ch"

PROCEDURE pTesRemSony

   LOCAL aList, nOpc, aHash
   LOCAL oAparelho, nOpcAparelho := 1
   LOCAL oFabricante, nOpcFabricante := 1
   LOCAL oCode

   aHash := hb_JsonDecode( BinaryFromSQL( "sonyremote" ) )
   DO WHILE .T.
      Cls()
      aList := {}
      FOR EACH oAparelho IN aHash[ "devices" ]
         AAdd( aList, oAparelho[ "device" ] )
      NEXT
      wAchoiceNoClose( 1, 1, aList, @nOpcAparelho,  "Device" )
      IF Lastkey() == K_ESC
         EXIT
      ENDIF
      DO WHILE .T.
         @ 0, 60 CLEAR TO MaxRow(), MaxCol()
         aList := {}
         FOR EACH oFabricante IN aHash[ "devices", nOpcAparelho, "brandCodes" ]
            AAdd( aList, oFabricante[ "brand" ] )
         NEXT
         wAchoiceNoClose( 5, 30, aList, @nOpcFabricante, aHash[ "devices", nOpcAparelho, "device" ] )
         IF LastKey() == K_ESC
            EXIT
         ENDIF
         aList := {}
         FOR EACH oCode IN aHash[ "devices", nOpcAparelho, "brandCodes", nOpcFabricante, "codes" ]
            AAdd( aList, oCode )
         NEXT
         wAchoice( 10, 60, aList, @nOpc, aHash[ "devices", nOpcAparelho, "brandCodes", nOpcFabricante, "brand" ] )
         ( nOpc )
         Inkey(0)
         wClose()
      ENDDO
      wClose()
   ENDDO

   //ShowJson( aHash, "aHash" )
   //Inkey(0)

   RETURN


sony.png


É pra facilitar a configuração do meu controle remoto universal.

Tem o browse do tipo de equipamento, os fabricantes do tipo de equipamento, e os códigos.
Tudo montado a partir do JSON que vém do SQL.

   aHash := hb_JsonDecode( BinaryFromSQL( "sonyremote" ) )


Adorei isso.
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: 18160
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Anterior Próximo



Retornar para SQL

Quem está online

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