Idéia pra armazenar comandos SQL

Forum sobre SQL.

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

Idéia pra armazenar comandos SQL

Mensagem por JoséQuintas »

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

Idéia pra armazenar comandos SQL

Mensagem por JoséQuintas »

resxml.png
Vixe...
Como cresceu...
26.154 linhas !!!

Nada diferente de antes, apenas juntei tudo.
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

Idéia pra armazenar comandos SQL

Mensagem por JoséQuintas »

Código: Selecionar todos

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

Idéia pra armazenar comandos SQL

Mensagem por JoséQuintas »

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

Idéia pra armazenar comandos SQL

Mensagem por JoséQuintas »

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

Idéia pra armazenar comandos SQL

Mensagem por JoséQuintas »

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

Idéia pra armazenar comandos SQL

Mensagem por JoséQuintas »

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

Idéia pra armazenar comandos SQL

Mensagem por JoséQuintas »

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

Idéia pra armazenar comandos SQL

Mensagem por JoséQuintas »

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:

Código: Selecionar todos

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

Idéia pra armazenar comandos SQL

Mensagem por JoséQuintas »

Código: Selecionar todos

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

Idéia pra armazenar comandos SQL

Mensagem por JoséQuintas »

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

Idéia pra armazenar comandos SQL

Mensagem por JoséQuintas »

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

Idéia pra armazenar comandos SQL

Mensagem por JoséQuintas »

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

Idéia pra armazenar comandos SQL

Mensagem por JoséQuintas »

A rotina ficou complicada: ler um campo do SQL kkkk

Código: Selecionar todos

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

Idéia pra armazenar comandos SQL

Mensagem por JoséQuintas »

Um módulo usando isso acima:

Código: Selecionar todos

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

Código: Selecionar todos

   aHash := hb_JsonDecode( BinaryFromSQL( "sonyremote" ) )
Adorei isso.
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