Página 1 de 1

Sugestão sobre SQL em resource

Enviado: 25 Abr 2021 12:47
por JoséQuintas
Ainda estou na dúvida se vai valer a pena.
Trocando isto:

Código: Selecionar todos

         :ExecuteCmd( ;
            "CREATE TABLE IF NOT EXISTS JPCIDADE ( " + ;
            "IDCIDADE INT(11) NOT NULL AUTO_INCREMENT, " + ;
            "CINOME   VARCHAR(40) NOT NULL DEFAULT '', " + ;
            "CIUF     VARCHAR(2) NOT NULL DEFAULT '', " + ;
            "CIIBGE   VARCHAR(7) NOT NULL DEFAULT '', " + ;
            "CIINFINC VARCHAR(80) NOT NULL DEFAULT '', " + ;
            "CIINFALT VARCHAR(80) NOT NULL DEFAULT '', " + ;
            "PRIMARY KEY ( IDCIDADE ) " + ;
            ") COLLATE=latin1_swedish_ci ENGINE=InnoDB" )
por isto:

Código: Selecionar todos

         :ExecuteCmd( ResourceText( "SQL_JPCONTABIL" ) )
E colocar tudo como resource, com o comando direto.

Código: Selecionar todos

STATIC FUNCTION ResourceText( cName )

   cName := Lower( cName )
   DO CASE
   CASE cName == "sql_jpcontabil"           ; #pragma __binarystreaminclude "resource/sql_jpcontabil.sql" | RETURN %s
   CASE cName == "sql_ze_domingodepascoa"   ; #pragma __binarystreaminclude "resource/sql_ze_domingodepascoa.sql" | RETURN %s
   CASE cName == "sql_ze_extensounidade"    ; #pragma __binarystreaminclude "resource/sql_ze_extensounidade.sql" | RETURN %s
   CASE cName == "sql_ze_extensodezena"     ; #pragma __binarystreaminclude "resource/sql_ze_extensodezena.sql" | RETURN %s
   CASE cName == "sql_ze_extensocentena"    ; #pragma __binarystreaminclude "resource/sql_ze_extensocentena.sql" | RETURN %s
   CASE cName == "sql_ze_extensonumero"     ; #pragma __binarystreaminclude "resource/sql_ze_extensonumero.sql" | RETURN %s
   CASE cName == "sql_ze_extenso"           ; #pragma __binarystreaminclude "resource/sql_ze_extenso.sql" | RETURN %s
   CASE cName == "sql_ze_tercadecarnaval"   ; #pragma __binarystreaminclude "resource/sql_ze_tercadecarnaval.sql" | RETURN %s
   ENDCASE

   RETURN ""
por exemplo, sql_jpcontabil.sql

Código: Selecionar todos

CREATE TABLE IF NOT EXISTS JPCONTABIL (
IDCONTABIL INT(11) NOT NULL AUTO_INCREMENT,
CTLOTE INT(11) NOT NULL DEFAULT '0',
CTLANC INT(11) NOT NULL DEFAULT '0',
CTMOV INT(11) NOT NULL DEFAULT '0',
CTPARTIDA CHAR(1) NOT NULL DEFAULT ' ',
CTDATA DATE,
CTDEBCRE CHAR(1) NOT NULL DEFAULT ' ',
CTCONTA1 INT(11) NOT NULL DEFAULT '0',
CTCCONTA VARCHAR(12) NOT NULL DEFAULT '',
CTTEXTO VARCHAR(300) NOT NULL DEFAULT '',
CTVALOR NUMERIC(17,2) NOT NULL DEFAULT '0',
CTCCUSTO INT(11) NOT NULL DEFAULT '0',
CTCONTRA VARCHAR(12) NOT NULL DEFAULT '',
CTCONTA2 INT(11) NOT NULL DEFAULT '0',
CTBAIXA DATE,
CTINFINC VARCHAR(100) NOT NULL DEFAULT '',
CTINFALT VARCHAR(100) NOT NULL DEFAULT '',
PRIMARY KEY ( IDCONTABIL ),
INDEX IDX1 ( CTLOTE, CTLANC, CTMOV ),
INDEX IDX2 ( CTCCONTA ),
INDEX IDX3 ( CTCONTA1 ),
INDEX IDX4 ( CTDATA, IDCONTABIL )
) COLLATE=latin1_swedish_ci ENGINE=InnoDB

Sugestão sobre SQL em resource

Enviado: 25 Abr 2021 12:54
por JoséQuintas
Também criando resource como função STATIC.

Por um lado, dá até pra perder o controle sobre quanta coisa está em resource.
Mas por outro lado, o resource fica junto ao módulo que interessa, o que facilita porque é só remover o módulo que já remove resources dele.
Evita ficar resource lixo, que não precisa mais.

Sugestão sobre SQL em resource

Enviado: 25 Abr 2021 20:48
por JoséQuintas
À primeira vista o fonte C está ficando maior com a substituição.
Mas a lista é grande, ainda faltam muitos, a criação de cada tabela, e também funções pra teste.

Código: Selecionar todos

 Pasta de d:\fontes\integra\RESOURCE

25/04/2021  13:16               841 sql_jpagenda.sql
25/04/2021  16:48             3.136 sql_jpcadastro.sql
25/04/2021  11:32               889 sql_jpcontabil.sql
25/04/2021  20:42             2.434 sql_jpitem.sql
25/04/2021  18:03             3.588 sql_jpitped.sql
25/04/2021  20:45             2.764 sql_jppedido.sql
25/04/2021  13:36               293 sql_jptabcadgru.sql
25/04/2021  13:38               342 sql_jptabcadsta.sql
25/04/2021  13:41               293 sql_jptabccusto.sql
25/04/2021  13:37               296 sql_jptabcorrecao.sql
25/04/2021  13:37               293 sql_jptabfinope.sql
25/04/2021  14:20               293 sql_jptabfinpor.sql
25/04/2021  13:26               483 sql_jptabplanoref.sql
25/04/2021  14:22               293 sql_jptabprodep.sql
22/04/2021  22:30               907 sql_ze_domingodepascoa.sql
18/04/2021  19:41               855 sql_ze_extenso.sql
18/04/2021  19:39               950 sql_ze_extensocentena.sql
18/04/2021  19:39               915 sql_ze_extensodezena.sql
18/04/2021  19:39             1.941 sql_ze_extensonumero.sql
18/04/2021  19:39               804 sql_ze_extensounidade.sql
22/04/2021  22:33               196 sql_ze_tercadecarnaval.sql

Sugestão sobre SQL em resource

Enviado: 25 Abr 2021 20:52
por JoséQuintas
Pensando bem, como a lista vai ficar grande, melhor criar uma pasta exclusiva pra resource SQL.
Assim elimino o prefixo SQL dos nomes.

E se precisar no HeidiSQL, é só copiar/colar.

Sugestão sobre SQL em resource

Enviado: 25 Abr 2021 20:58
por JoséQuintas

Código: Selecionar todos

 Pasta de d:\fontes\integra\SQL

25/04/2021  20:56    <DIR>          .
25/04/2021  20:56    <DIR>          ..
25/04/2021  13:16               841 jpagenda.sql
25/04/2021  16:48             3.136 jpcadastro.sql
25/04/2021  11:32               889 jpcontabil.sql
25/04/2021  20:42             2.434 jpitem.sql
25/04/2021  18:03             3.588 jpitped.sql
25/04/2021  20:45             2.764 jppedido.sql
25/04/2021  13:36               293 jptabcadgru.sql
25/04/2021  13:38               342 jptabcadsta.sql
25/04/2021  13:41               293 jptabccusto.sql
25/04/2021  13:37               296 jptabcorrecao.sql
25/04/2021  13:37               293 jptabfinope.sql
25/04/2021  14:20               293 jptabfinpor.sql
25/04/2021  13:26               483 jptabplanoref.sql
25/04/2021  14:22               293 jptabprodep.sql
22/04/2021  22:30               907 ze_domingodepascoa.sql
18/04/2021  19:41               855 ze_extenso.sql
18/04/2021  19:39               950 ze_extensocentena.sql
18/04/2021  19:39               915 ze_extensodezena.sql
18/04/2021  19:39             1.941 ze_extensonumero.sql
18/04/2021  19:39               804 ze_extensounidade.sql
22/04/2021  22:33               196 ze_tercadecarnaval.sql
              21 arquivo(s)         22.806 bytes
Melhorou.
O prefixo ze_ é pra criação de função ficar no fim da fila.
O restante é criação de tabela.

Sugestão sobre SQL em resource

Enviado: 25 Abr 2021 21:01
por JoséQuintas
Por enquanto, como é teste, só na minha máquina, a parte de função.

Código: Selecionar todos

   IF IsMaquinaJPA()
      WITH OBJECT cnSQL
         FOR EACH cFunction IN { "ze_extenso", "ze_extensounidade", "ze_extensodezena", ;
            "ze_extensocentena", "ze_extensonumero", "ze_domingodepascoa", ;
            "ze_tercadecarnaval" }
            :ExecuteCmd( "DROP FUNCTION IF EXISTS " + cFunction )
            :ExecuteCmd( ze_LoadResource( cFunction ) )
         NEXT
      ENDWITH
   ENDIF
Apaga e cria novamente, só pra confirmar que não dá erro no comando, e que aqui funciona.
Quando for rodar em cliente vai ser uma vez só, ou talvez a cada mudança de versão, mas vejo depois.
A conferência de tabela existente é em toda mudança de versão.

Os arquivos não incluem mudanças de estruturas já existentes, apenas criam com a estrutura nova se não existir.
Mudança de estrutura não segue padrão, pode até precisar de outras mudanças.
Além disso, assim que trocar em todo mundo, é apagar todas as mudanças.

Sugestão sobre SQL em resource

Enviado: 25 Abr 2021 21:05
por JoséQuintas
Sei lá....
Não é comum mas.... e se precisar usar um backup antigo?
Teoricamente o atual tem tudo, mas nunca se sabe....
Vou ter que limitar isso, ou então, como já venho fazendo, salvar versões anteriores do aplicativo na internet, sempre prontos pra uso.