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 » 03 Jun 2021 09:52

A lista tá aumentando.

d:\fontes\integra>dir sql
O volume na unidade D é TRABALHO
O Número de Série do Volume é C4CC-0221

Pasta de d:\fontes\integra\sql

26/05/2021  16:43    <DIR>          .
26/05/2021  16:43    <DIR>          ..
17/05/2021  18:31               841 jpagenda.sql
17/05/2021  18:31               333 jpauxiliar.sql
17/05/2021  18:31               458 jpbaauto.sql
17/05/2021  18:31               442 jpbaccusto.sql
17/05/2021  18:31               684 jpbancario.sql
17/05/2021  18:31             3.136 jpcadastro.sql
17/05/2021  18:31               364 jpcidade.sql
17/05/2021  18:31               768 jpcombustivel.sql
17/05/2021  18:31               419 jpcomissao.sql
17/05/2021  18:31               336 jpconfi.sql
17/05/2021  18:31               889 jpcontabil.sql
17/05/2021  18:31               583 jpedicfg.sql
17/05/2021  18:31               423 jpemanfe.sql
17/05/2021  18:31             1.095 jpestoque.sql
17/05/2021  18:31             1.261 jpfinan.sql
17/05/2021  18:31             1.444 jpfiscal.sql
17/05/2021  18:31               946 jpfisica.sql
17/05/2021  18:31             1.747 jpimposto.sql
17/05/2021  18:31             2.434 jpitem.sql
17/05/2021  18:31             3.588 jpitped.sql
17/05/2021  18:31               505 jpmdfcab.sql
17/05/2021  18:31               624 jpmdfdet.sql
17/05/2021  18:31               363 jpmotori.sql
17/05/2021  18:31               516 jpnfbase.sql
17/05/2021  18:31               897 jpnfekey.sql
17/05/2021  18:31             2.704 jpnotfis.sql
17/05/2021  18:31               510 jppatdetalhe.sql
17/05/2021  18:31               502 jppatrimonio.sql
17/05/2021  18:31             2.751 jppedido.sql
17/05/2021  18:31               727 jppreco.sql
17/05/2021  18:31               816 jpprehis.sql
17/05/2021  18:31               388 jpreguso.sql
17/05/2021  18:31               328 jptabanpage.sql
17/05/2021  18:31               330 jptabanpins.sql
17/05/2021  18:31               428 jptabanploc.sql
17/05/2021  18:31               477 jptabanpope.sql
17/05/2021  18:31               265 jptabanppro.sql
17/05/2021  18:31               293 jptabcadgru.sql
17/05/2021  18:31               342 jptabcadsta.sql
17/05/2021  18:31               343 jptabcategoria.sql
17/05/2021  18:31               293 jptabccusto.sql
17/05/2021  18:31               280 jptabcfop.sql
17/05/2021  18:31               280 jptabcnae.sql
17/05/2021  18:31               292 jptabcofcst.sql
17/05/2021  18:31               292 jptabcofenq.sql
17/05/2021  18:31               296 jptabcorrecao.sql
17/05/2021  18:31               315 jptabdecreto.sql
17/05/2021  18:31               293 jptabeditip.sql
17/05/2021  18:31               293 jptabfilial.sql
17/05/2021  18:31               293 jptabfinope.sql
17/05/2021  18:31               293 jptabfinpor.sql
17/05/2021  18:31             1.504 jptabforpag.sql
17/05/2021  18:31               700 jptabibpt.sql
17/05/2021  18:31               292 jptabicmcst.sql
17/05/2021  18:31               292 jptabipicst.sql
17/05/2021  18:31               292 jptabipienq.sql
17/05/2021  18:31               540 jptablicenca.sql
17/05/2021  18:31               474 jptablicmix.sql
17/05/2021  18:31               287 jptabmidia.sql
17/05/2021  18:31               292 jptabmodfis.sql
17/05/2021  18:31               293 jptabmotivo.sql
17/05/2021  18:31               292 jptaborigem.sql
17/05/2021  18:31               642 jptabpercentual.sql
17/05/2021  18:31               292 jptabpiscst.sql
17/05/2021  18:31               292 jptabpisenq.sql
17/05/2021  18:31               483 jptabplanoref.sql
17/05/2021  18:31               293 jptabprodep.sql
17/05/2021  18:31               293 jptabprogru.sql
17/05/2021  18:31               293 jptabproloc.sql
21/05/2021  14:40               299 jptabprosec.sql
21/05/2021  14:40               299 jptabtricad.sql
21/05/2021  14:40               299 jptabtriemp.sql
21/05/2021  14:40               299 jptabtripro.sql
21/05/2021  14:40               293 jptabtriuf.sql
21/05/2021  14:40               316 jptabuf.sql
21/05/2021  14:40               292 jptabunidade.sql
21/05/2021  14:35               340 jptransacao.sql
21/05/2021  14:34             1.286 jptransp.sql
21/05/2021  14:35               867 jpveiculo.sql
21/05/2021  14:35               384 jpvendedor.sql
03/06/2021  09:47             5.132 ze_calculapedido.sql
21/05/2021  13:32               907 ze_domingodepascoa.sql
17/05/2021  18:31               855 ze_extenso.sql
21/05/2021  13:31               950 ze_extensocentena.sql
17/05/2021  18:31               915 ze_extensodezena.sql
21/05/2021  13:30             1.941 ze_extensonumero.sql
17/05/2021  18:31               804 ze_extensounidade.sql
26/05/2021  16:46             3.630 ze_govisimp.sql
21/05/2021  13:28               196 ze_tercadecarnaval.sql
21/05/2021  20:10               657 ze_troco.sql
              90 arquivo(s)         68.327 bytes


Estou acrescentando isso no EXE através de #pragma
O ruim é que alterando um desses, o fonte não é considerado alterado, e não é recompilado automático.
Estou começando a pensar em alternativas, talvez até tirar fora do EXE.
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: 18150
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 » 04 Jul 2021 13:16

spsf.png


Sem idéia ainda.
Talvez agrupar tudo num 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: 18150
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 » 07 Jul 2021 12:13

Não, o "menos ruim" é XML mesmo.

[xml]

[function]
[nome]dfdshfsddsfds[/nome]
[codigo]

dsfsfdsfd
dsfdsfdsfds
dsfdsfsdfds
dfdsfsdfdsdfs

[/codigo]
[/function]

[function]
[nome]dfdshfsddsfds[/nome]
[codigo]

dsfsfdsfd
dsfdsfdsfds
dsfdsfsdfds
dfdsfsdfdsdfs

[/codigo]
[/function]

[/xml]


json implica em mais gambiarras.
XML mais tranquilo, depois é só extrair com XmlNode(), MultipleNodeToArray(), etc.

É que só pra inscrição estadual, serão 26 funções, uma pra cada UF, e é muito arquivo espalhado, e muito fonte pra aproveitar arquivos SQL.
Com tudo num XML, um FOR/NEXT ou FOR/EACH resolvem.
Um arquivo pra tudo que é SQL, e uma rotina pra recuperar tudo.
Acho que vai ser a melhor solução.
Opcionalmente.... dá pra deixar o arquivo XML como externo ou resource ou outra opção.
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: 18150
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 » 07 Jul 2021 12:25

Vou trocar isto e os vários arquivos indicados:

STATIC FUNCTION jpagendaCreateSQL() ; #pragma __binarystreaminclude "sql/jpagenda.sql" | RETURN %s

STATIC FUNCTION jpauxiliarCreateSQL() ; #pragma __binarystreaminclude "sql/jpauxiliar.sql" | RETURN %s

STATIC FUNCTION jpbaautoCreateSQL() ; #pragma __binarystreaminclude "sql/jpbaauto.sql" | RETURN %s

STATIC FUNCTION jpbaccustoCreateSQL() ; #pragma __binarystreaminclude "sql/jpbaccusto.sql" | RETURN %s

STATIC FUNCTION jpbancarioCreateSQL(); #pragma __binarystreaminclude "sql/jpbancario.sql" | RETURN %s

STATIC FUNCTION jpcadastroCreateSQL(); #pragma __binarystreaminclude "sql/jpcadastro.sql" | RETURN %s

STATIC FUNCTION jpcidadeCreateSQL(); #pragma __binarystreaminclude "sql/jpcidade.sql" | RETURN %s

STATIC FUNCTION jptabcofcstCreateSQL(); #pragma __binarystreaminclude "sql/jptabcofcst.sql" | RETURN %s

STATIC FUNCTION jptabcofenqCreateSQL(); #pragma __binarystreaminclude "sql/jptabcofenq.sql" | RETURN %s

STATIC FUNCTION jpcombustivelCreateSQL(); #pragma __binarystreaminclude "sql/jpcombustivel.sql" | RETURN %s

STATIC FUNCTION jpcomissaoCreateSQL(); #pragma __binarystreaminclude "sql/jpcomissao.sql" | RETURN %s

STATIC FUNCTION jpcontabilCreateSQL(); #pragma __binarystreaminclude "sql/jpcontabil.sql" | RETURN %s

STATIC FUNCTION jpedicfgCreateSQL(); #pragma __binarystreaminclude "sql/jpedicfg.sql" | RETURN %s

STATIC FUNCTION jpemanfeCreateSQL(); #pragma __binarystreaminclude "sql/jpemanfe.sql" | RETURN %s

STATIC FUNCTION jpestoqueCreateSQL(); #pragma __binarystreaminclude "sql/jpestoque.sql" | RETURN %s

STATIC FUNCTION jpfinanCreateSQL(); #pragma __binarystreaminclude "sql/jpfinan.sql" | RETURN %s

STATIC FUNCTION jpfiscalCreateSQL(); #pragma __binarystreaminclude "sql/jpfiscal.sql" | RETURN %s

STATIC FUNCTION jpfisicaCreateSQL(); #pragma __binarystreaminclude "sql/jpfisica.sql" | RETURN %s

STATIC FUNCTION jpimpostoCreateSQL(); #pragma __binarystreaminclude "sql/jpimposto.sql" | RETURN %s

STATIC FUNCTION jpitemCreateSQL(); #pragma __binarystreaminclude "sql/jpitem.sql" | RETURN %s

STATIC FUNCTION jpitpedCreateSQL(); #pragma __binarystreaminclude "sql/jpitped.sql" | RETURN %s

STATIC FUNCTION jpmdfcabCreateSQL(); #pragma __binarystreaminclude "sql/jpmdfcab.sql" | RETURN %s

STATIC FUNCTION jpmdfdetCreateSQL(); #pragma __binarystreaminclude "sql/jpmdfdet.sql" | RETURN %s

STATIC FUNCTION jpmotoriCreateSQL(); #pragma __binarystreaminclude "sql/jpmotori.sql" | RETURN %s

STATIC FUNCTION jpnfbaseCreateSQL(); #pragma __binarystreaminclude "sql/jpnfbase.sql" | RETURN %s

STATIC FUNCTION jpnfekeyCreateSQL() ; #pragma __binarystreaminclude "sql/jpnfekey.sql" | RETURN %s

STATIC FUNCTION jpnotfisCreateSQL() ; #pragma __binarystreaminclude "sql/jpnotfis.sql" | RETURN %s

STATIC FUNCTION jppatdetalheCreateSQL() ;#pragma __binarystreaminclude "sql/jppatdetalhe.sql" | RETURN %s

STATIC FUNCTION jppedidoCreateSQL() ; #pragma __binarystreaminclude "sql/jppedido.sql" | RETURN %s

STATIC FUNCTION jpprecoCreateSQL() ; #pragma __binarystreaminclude "sql/jppreco.sql" | RETURN %s

STATIC FUNCTION jpprehisCreateSQL() ; #pragma __binarystreaminclude "sql/jpprehis.sql" | RETURN %s

STATIC FUNCTION jptabanpageCreateSQL() ; #pragma __binarystreaminclude "sql/jptabanpage.sql" | RETURN %s

STATIC FUNCTION jptabanpinsCreateSQL() ; #pragma __binarystreaminclude "sql/jptabanpins.sql" | RETURN %s

STATIC FUNCTION jptabanplocCreateSQL() ; #pragma __binarystreaminclude "sql/jptabanploc.sql" | RETURN %s

STATIC FUNCTION jptabanpopeCreateSQL() ; #pragma __binarystreaminclude "sql/jptabanpope.sql" | RETURN %s

STATIC FUNCTION jptabanpproCreateSQL() ; #pragma __binarystreaminclude "sql/jptabanppro.sql" | RETURN %s

STATIC FUNCTION jptabcadgruCreateSQL() ; #pragma __binarystreaminclude "sql/jptabcadgru.sql" | RETURN %s

STATIC FUNCTION jptabcadstaCreateSQL() ; #pragma __binarystreaminclude "sql/jptabcadsta.sql" | RETURN %s

STATIC FUNCTION jptabcategoriaCreateSQL() ; #pragma __binarystreaminclude "sql/jptabcategoria.sql" | RETURN %s

STATIC FUNCTION jptabccustoCreateSQL() ; #pragma __binarystreaminclude "sql/jptabccusto.sql" | RETURN %s

STATIC FUNCTION jptabcfopCreateSQL() ; #pragma __binarystreaminclude "sql/jptabcfop.sql" | RETURN %s

STATIC FUNCTION jptabcnaeCreateSQL() ; #pragma __binarystreaminclude "sql/jptabcnae.sql" | RETURN %s

STATIC FUNCTION jptabcorrecaoCreateSQL() ; #pragma __binarystreaminclude "sql/jptabcorrecao.sql" | RETURN %s

STATIC FUNCTION jptabdecretoCreateSQL() ; #pragma __binarystreaminclude "sql/jptabdecreto.sql" | RETURN %s

STATIC FUNCTION jptabeditipCreateSQL() ; #pragma __binarystreaminclude "sql/jptabeditip.sql" | RETURN %s

STATIC FUNCTION jptabfilialCreateSQL() ; #pragma __binarystreaminclude "sql/jptabfilial.sql" | RETURN %s

STATIC FUNCTION jptabfinopeCreateSQL() ; #pragma __binarystreaminclude "sql/jptabfinope.sql" | RETURN %s

STATIC FUNCTION jptabfinporCreateSQL() ; #pragma __binarystreaminclude "sql/jptabfinpor.sql" | RETURN %s

STATIC FUNCTION jptabforpagCreateSQL() ; #pragma __binarystreaminclude "sql/jptabforpag.sql" | RETURN %s

STATIC FUNCTION jptabibptCreateSQL() ; #pragma __binarystreaminclude "sql/jptabibpt.sql" | RETURN %s

STATIC FUNCTION jptabicmcstCreateSQL() ; #pragma __binarystreaminclude "sql/jptabicmcst.sql" | RETURN %s

STATIC FUNCTION jptabipicstCreateSQL() ; #pragma __binarystreaminclude "sql/jptabipicst.sql" | RETURN %s

STATIC FUNCTION jptabipienqCreateSQL() ; #pragma __binarystreaminclude "sql/jptabipienq.sql" | RETURN %s

STATIC FUNCTION jptablicencaCreateSQL() ; #pragma __binarystreaminclude "sql/jptablicenca.sql" | RETURN %s

STATIC FUNCTION jptablicmixCreateSQL() ; #pragma __binarystreaminclude "sql/jptablicmix.sql" | RETURN %s

STATIC FUNCTION jptabmidiaCreateSQL() ; #pragma __binarystreaminclude "sql/jptabmidia.sql" | RETURN %s

STATIC FUNCTION jptabmodfisCreateSQL() ; #pragma __binarystreaminclude "sql/jptabmodfis.sql" | RETURN %s

STATIC FUNCTION jptabmotivoCreateSQL() ; #pragma __binarystreaminclude "sql/jptabmotivo.sql" | RETURN %s

STATIC FUNCTION jptaborigemCreateSQL() ; #pragma __binarystreaminclude "sql/jptaborigem.sql" | RETURN %s

STATIC FUNCTION jppatrimonioCreateSQL() ; #pragma __binarystreaminclude "sql/jppatrimonio.sql" | RETURN %s

STATIC FUNCTION jptabpiscstCreateSQL() ; #pragma __binarystreaminclude "sql/jptabpiscst.sql" | RETURN %s

STATIC FUNCTION jptabpisenqCreateSQL() ; #pragma __binarystreaminclude "sql/jptabpisenq.sql" | RETURN %s

STATIC FUNCTION jptabplanorefCreateSQL() ; #pragma __binarystreaminclude "sql/jptabplanoref.sql" | RETURN %s

STATIC FUNCTION jptabpercentualCreateSQL() ; #pragma __binarystreaminclude "sql/jptabpercentual.sql" | RETURN %s

STATIC FUNCTION jptabprodepCreateSQL() ; #pragma __binarystreaminclude "sql/jptabprodep.sql" | RETURN %s

STATIC FUNCTION jptabprogruCreateSQL() ; #pragma __binarystreaminclude "sql/jptabprogru.sql" | RETURN %s

STATIC FUNCTION jptabprolocCreateSQL() ; #pragma __binarystreaminclude "sql/jptabproloc.sql" | RETURN %s

STATIC FUNCTION jptabprosecCreateSQL() ; #pragma __binarystreaminclude "sql/jptabprosec.sql" | RETURN %s

STATIC FUNCTION jptabtricadCreateSQL() ; #pragma __binarystreaminclude "sql/jptabtricad.sql" | RETURN %s

STATIC FUNCTION jptabtriempCreateSQL() ; #pragma __binarystreaminclude "sql/jptabtriemp.sql" | RETURN %s

STATIC FUNCTION jptabtriproCreateSQL() ; #pragma __binarystreaminclude "sql/jptabtripro.sql" | RETURN %s

STATIC FUNCTION jptabtriufCreateSQL(); #pragma __binarystreaminclude "sql/jptabtriuf.sql" | RETURN %s

STATIC FUNCTION jptabufCreateSQL() ; #pragma __binarystreaminclude "sql/jptabuf.sql" | RETURN %s

STATIC FUNCTION jptabunidadeCreateSQL() ; #pragma __binarystreaminclude "sql/jptabunidade.sql" | RETURN %s

STATIC FUNCTION jptransacaoCreateSQL() ; #pragma __binarystreaminclude "sql/jptransacao.sql" | RETURN %s

STATIC FUNCTION jptranspCreateSQL() ; #pragma __binarystreaminclude "sql/jptransp.sql" | RETURN %s

STATIC FUNCTION jpveiculoCreateSQL() ; #pragma __binarystreaminclude "sql/jpveiculo.sql" | RETURN %s

STATIC FUNCTION jpvendedorCreateSQL() ; #pragma __binarystreaminclude "sql/jpvendedor.sql" | RETURN %s

STATIC FUNCTION ze_domingodepascoaCreateSQL() ; #pragma __binarystreaminclude "sql/ze_domingodepascoa.sql" | RETURN %s

STATIC FUNCTION ze_extensounidadeCreateSQL() ; #pragma __binarystreaminclude "sql/ze_extensounidade.sql" | RETURN %s

STATIC FUNCTION ze_extensodezenaCreateSQL() ; #pragma __binarystreaminclude "sql/ze_extensodezena.sql" | RETURN %s

STATIC FUNCTION ze_extensocentenaCreateSQL() ; #pragma __binarystreaminclude "sql/ze_extensocentena.sql" | RETURN %s

STATIC FUNCTION ze_extensonumeroCreateSQL() ; #pragma __binarystreaminclude "sql/ze_extensonumero.sql" | RETURN %s

STATIC FUNCTION ze_extensoCreateSQL() ; #pragma __binarystreaminclude "sql/ze_extenso.sql" | RETURN %s

STATIC FUNCTION ze_tercadecarnavalCreateSQL() ; #pragma __binarystreaminclude "sql/ze_tercadecarnaval.sql" | RETURN %s

STATIC FUNCTION ze_GovISimpCreateSQL(); #pragma __binarystreaminclude "sql/ze_GovISimp.sql" | RETURN %s

STATIC FUNCTION ze_PedidoRecalculoCreateSQL() ; #pragma __binarystreaminclude "sql/ze_PedidoRecalculo.sql" | RETURN %s

STATIC FUNCTION ze_EstoqueRecalculoCreateSQL() ; #pragma __binarystreaminclude "sql/ze_EstoqueRecalculo.sql" | RETURN %s

STATIC FUNCTION ze_PedidoBaixaReservaCreateSQL(); #pragma __binarystreaminclude "sql/ze_PedidoBaixaReserva.sql" | RETURN %s

STATIC FUNCTION ze_CalculaDigitoCreateSql(); #pragma __binarystreaminclude "sql/ze_CalculaDigito.sql" | RETURN %s

STATIC FUNCTION ze_SoNumerosCreateSql(); #pragma __binarystreaminclude "sql/ze_SoNumeros.sql" | RETURN %s

STATIC FUNCTION ze_ValidCpfCreateSql(); #pragma __binarystreaminclude "sql/ze_ValidCpf.sql" | RETURN %s

STATIC FUNCTION ze_ValidCnpjCreateSql(); #pragma __binarystreaminclude "sql/ze_ValidCnpj.sql" | RETURN %s


por isto:

FUNCTION ze_CmdSQL( cName )

   LOCAL cXML := ze_LoadSQL()
   
   RETURN XmlNode( cXML, cName )

STATIC FUNCTION ze_LoadSQL(); #pragma __binarystreaminclude "sql/sql.xml" | RETURN %s
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: 18150
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 » 07 Jul 2021 13:21

E acrescentei isto no meu pré-hbmk2:

   AEval( Directory( "c:\temp\ze_cmdsql.*" ), { | e | fErase( "c:\temp\" + e[ F_NAME ] ) } )


O hbmk2 compara FONTE pra fazer compilação incremental.
Isso de incluir por #pragma fica de fora.
Significa que o EXE pode ficar com versão velha dos comandos SQL.
Essa alteração vai forçar que o arquivo seja recompilado sempre.

É pra essas coisas que eu uso meu pré-build.
Acaba sendo um complemento ao HBMK2, adicionando minhas necessidades particulares à compilação automática.

Ao invés de ficar criando BATs sem fim..... um EXE que deixa tudo preparado para o HBMK2.
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: 18150
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 » 08 Jul 2021 12:20

sp1.png


sp2.png


sp3.png


Enquanto não encontrar outra forma, vai ficar assim.

Nem comecei, e já está com 2.500 linhas.

Esse arquivo é compilado junto ao EXE.

A extração de cada bloco é feita assim:

FUNCTION ze_CmdSQL( cName )

   LOCAL cXML := ze_LoadSQL()
   LOCAL cCmd

   cCmd := AllTrim( XmlNode( cXML, cName ) )
   IF Empty( cCmd )
      MsgExclamation( "Não encontrado SQL pra " + cName )
   ENDIF

   RETURN cCmd

STATIC FUNCTION ze_LoadSQL(); #pragma __binarystreaminclude "sql/sql.xml" | RETURN %s
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: 18150
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 » 08 Jul 2021 12:26

compilado.png


Tem objeto muito maior no aplicativo.
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: 18150
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 » 09 Jul 2021 14:07

Pra quem quiser brincar.
Mas não se enganem.... é de principiante, porque ainda sou principiante nisso.

<sql>

<ze_calculadigito>
CREATE FUNCTION ze_CalculaDigito(
   cNumero VARCHAR(30),
   nModulo INT(11)
)
RETURNS VARCHAR(1)

BEGIN

DECLARE nFator INT(11);
DECLARE nSoma INT(11);
DECLARE nCont INT(11);
DECLARE nResto INT(11);

IF LENGTH( cNumero ) < 1 THEN
   RETURN '';
END IF;

SET nFator = 2;
SET nSoma = 0;
SET nCont = LENGTH( cNumero );

IF nModulo = 10 THEN
   WHILE nCont > 0 DO
      SET nSoma = nSoma + ( CAST( SUBSTR( cNumero, nCont, 1 ) AS SIGNED ) * nFator ) ;
      SET nFator = nFator + 1;
      SET nCont = nCont - 1;
   END WHILE;
ELSE
   WHILE nCont > 0 DO
      SET nSoma = nSoma + ( CAST( SUBSTR( cNumero, nCont, 1 ) AS SIGNED ) * nFator ) ;
      IF nFator = 9 THEN
         SET nFator = 2;
      ELSE
         SET nFator = nFator + 1;
      END IF;
      SET nCont = nCont - 1;
   END WHILE;
END IF;

SET nResto = 11 - MOD( nSoma, 11 );
IF nResto > 9 THEN
   SET nResto = 0;
END IF;

RETURN CAST( nResto AS CHAR(1) );

END
</ze_calculadigito>

<ze_domingodepascoa>
CREATE FUNCTION ze_DomingoDePascoa( nAno INT )
RETURNS DATE

BEGIN

DECLARE nA, nB, nC, nD, nE, nF, nG, nH, nI, nK, nL, nM, nMes, nDia INT;
DECLARE dData DATE;

SET nA    = MOD( nAno, 19 );
SET nB    = FLOOR( nAno / 100 );
SET nC    = MOD( nAno, 100 );
SET nD    = FLOOR( nB / 4 );
SET nE    = MOD( nB, 4 );
SET nF    = FLOOR( ( nB + 8 ) / 25 );
SET nG    = FLOOR( ( nB - nF + 1 ) / 3 );
SET nH    = MOD( 19 * nA + nB - nD - nG + 15, 30 );
SET nI    = FLOOR( nC / 4 );
SET nK    = MOD( nC, 4 );
SET nL    = MOD( 32 + 2 * nE + 2 * nI - nH - nK, 7 );
SET nM    = FLOOR( ( nA + 11 * nH + 22 * nL ) / 451 );
SET nMes  = FLOOR( ( nH + nL - 7 * nM + 114 ) / 31 );
SET nDia  = MOD( nH + nL - 7 * nM + 114, 31 ) + 1;
SET dData = CONCAT( LPAD( nAno, 4, '0' ), '-', + LPAD( nMes, 2, '0' ), '-', LPAD( nDia, 2, '0' ) );

RETURN dData;

END
</ze_domingodepascoa>

<ze_extenso>
CREATE FUNCTION ze_Extenso( nValor DECIMAL(18,2) )
RETURNS varchar(500)

BEGIN

DECLARE cTxt VARCHAR(500) DEFAULT '';
DECLARE nInteiro DECIMAL(18,0);
DECLARE nDecimal DECIMAL(5,0);
SET nInteiro = FLOOR( nValor );
SET nDecimal = FLOOR( ( nValor - nInteiro ) * 100 );
IF nInteiro != 0 THEN
   SET cTxt = CONCAT( cTxt, ze_ExtensoNumero( nInteiro ), ' ', IF( nInteiro > 1, 'REAIS', 'REAL' ) );
END IF;
IF nInteiro != 0 AND nDecimal != 0 THEN
   SET cTxt = CONCAT( cTxt, ' E ' );
END IF;
IF nDecimal != 0 THEN
   SET cTxt = CONCAT( cTxt, ze_ExtensoNumero( nDecimal ), ' ', IF( nDecimal > 1, 'CENTAVOS', 'CENTAVO' ) );
   IF nInteiro = 0 THEN
      SET cTxt = CONCAT( cTxt, ' DE REAL' );
   END IF;
END IF;
SET cTxt = REPLACE( cTxt, 'ILHAO REAIS', 'ILHAO DE REAIS' );
SET cTxt = REPLACE( cTxt, 'ILHOES REAIS', 'ILHOES DE REAIS' );
RETURN cTxt;

END
</ze_extenso>

<ze_extensocentena>
CREATE FUNCTION ze_ExtensoCentena( nValor INT )
RETURNS VARCHAR(500)

BEGIN

DECLARE cTxt VARCHAR(500);
DECLARE nCentena INT;
DECLARE nDezena INT;
SET cTxt = '';
IF nValor > 0 THEN
   IF nValor = 100 THEN
      SET cTxt = 'CEM';
   ELSE
      SET nCentena = floor( nValor / 100 );
      SET nDezena = nValor - ( nCentena * 100 );
      SET cTxt = (
      CASE
         WHEN nCentena = 1 THEN 'CENTO'
         WHEN nCentena = 2 THEN 'DUZENTOS'
         WHEN nCentena = 3 THEN 'TREZENTOS'
         WHEN nCentena = 4 THEN 'QUATROCENTOS'
         WHEN nCentena = 5 THEN 'QUINHENTOS'
         WHEN nCentena = 6 THEN 'SEISSENTOS'
         WHEN nCentena = 7 THEN 'SETECENTOS'
         WHEN nCentena = 8 THEN 'OITOCENTOS'
         WHEN nCentena = 9 THEN 'NOVECENTOS'
      ELSE ''
      END );
      IF nDezena != 0 THEN
         SET cTxt = CONCAT( cTxt, IF( nCentena = 0, '', ' E ' ), ze_ExtensoDezena( nDezena ) );
      END IF;
   END IF;
END IF;
RETURN cTxt;

END
</ze_extensocentena>

<ze_extensodezena>
CREATE FUNCTION ze_ExtensoDezena( nValor INT )
RETURNS varchar(500)

BEGIN

DECLARE cTxt VARCHAR(500);
DECLARE nDezena INT;
DECLARE nUnidade INT;
SET cTxt = '';
IF nValor > 0 THEN
   IF nValor < 20 THEN
      SET cTxt = ze_ExtensoUnidade( nValor );
   ELSE
      SET nDezena = floor( nValor / 10 );
      SET nUnidade = nValor - ( nDezena * 10 );
      SET cTxt = (
      CASE
         WHEN nDezena = 2 THEN 'VINTE'
         WHEN nDezena = 3 THEN 'TRINTA'
         WHEN nDezena = 4 THEN 'QUARENTA'
         WHEN nDezena = 5 THEN 'CINQUENTA'
         WHEN nDezena = 6 THEN 'SESSENTA'
         WHEN nDezena = 7 THEN 'SETENTA'
         WHEN nDezena = 8 THEN 'OITENTA'
         WHEN nDezena = 9 THEN 'NOVENTA'
      ELSE ''
      END );
      IF nUnidade != 0 THEN
         SET cTxt = CONCAT( cTxt, ' E ', ze_ExtensoUnidade( nUnidade ) );
      END IF;
   END IF;
END IF;
RETURN cTxt;

END
</ze_extensodezena>

<ze_extensonumero>
CREATE FUNCTION ze_ExtensoNumero( nValor DECIMAL(18,0) )
RETURNS varchar(500)

BEGIN

DECLARE cTxt VARCHAR(500) DEFAULT '';
DECLARE nGrupo INT DEFAULT 0;
DECLARE nValGrupo DECIMAL(15,0);
DECLARE nValResto DECIMAL(15,0);
DECLARE cStrValor VARCHAR(20);
DECLARE cTxtGrupo VARCHAR(20);
DECLARE cTxtThis VARCHAR(500);
IF nValor = 0 THEN
   RETURN '*ZERO*';
END IF ;
SET cStrValor = LPAD( ABS( nValor ), 18, '0' );
SET nGrupo = 0;
LOOP_GRUPOS: LOOP
   SET nGrupo = nGrupo + 1;
   IF nGrupo > 6 THEN
      LEAVE LOOP_GRUPOS;
   END IF;
   SET cTxtGrupo = '';
   SET cTxtThis = '';
   SET nValGrupo = CAST( SUBSTR( cStrValor, ( nGrupo * 3 ) - 2, 3 ) AS DECIMAL(5,0) );
   IF LENGTH( cStrValor ) <= nGrupo * 3 + 4 THEN
      SET nValResto = 0;
   ELSE
      SET nValResto = CAST( SUBSTR( cStrValor, ( nGrupo * 3 ) + 1, 3 ) AS DECIMAL(18,0) );
   END IF;
   IF nValGrupo > 0 THEN
      SET cTxtGrupo = (
      CASE
         WHEN nGrupo = 6 THEN ''
         WHEN nGrupo = 5 THEN 'MIL'
         WHEN nGrupo = 4 THEN 'MILHAO'
         WHEN nGrupo = 3 THEN 'BILHAO'
         WHEN nGrupo = 2 THEN 'TRILHAO'
         WHEN nGrupo = 1 THEN 'QUATRILHAO'
         WHEN nGrupo = 0 THEN 'QUINTILHAO'
         WHEN nGrupo = 0 THEN 'SEPTILHAO'
         WHEN nGrupo = 0 THEN 'OCTILHAO'
         WHEN nGrupo = 0 THEN 'NONILHAO'
         WHEN nGrupo = 0 THEN 'DECILHAO'
      ELSE ''
      END );
      IF nValGrupo > 1 THEN
         SET cTxtGrupo = REPLACE( cTxtGrupo, 'AO', 'OES' );
      END IF ;
      IF LENGTH( cTxt ) <> 0 THEN
         IF nValGrupo = FLOOR( nValGrupo / 100 ) * 100 THEN
            SET cTxt = CONCAT( cTxt, ' E' );
         END IF;
      END IF;
      IF NOT ( nGrupo = 5 AND nValGrupo = 1 ) THEN
         SET cTxt = CONCAT( cTxt, ' ', ze_ExtensoCentena( nValGrupo ), ' ' );
      END IF;
      SET cTxt = CONCAT( cTxt, cTxtGrupo );
   END IF;
   END LOOP LOOP_GRUPOS;
RETURN cTxt;

END
</ze_extensonumero>

<ze_extensounidade>
CREATE FUNCTION ze_ExtensoUnidade( nValor INT )
RETURNS varchar(500)

BEGIN

DECLARE cTxt VARCHAR(500);
SET cTxt = (
CASE
   WHEN nValor = 1 THEN 'UM'
   WHEN nValor = 2 THEN 'DOIS'
   WHEN nValor = 3 THEN 'TRES'
   WHEN nValor = 4 THEN 'QUATRO'
   WHEN nValor = 5 THEN 'CINCO'
   WHEN nValor = 6 THEN 'SEIS'
   WHEN nValor = 7 THEN 'SETE'
   WHEN nValor = 8 THEN 'OITO'
   WHEN nValor = 9 THEN 'NOVE'
   WHEN nValor = 10 THEN 'DEZ'
   WHEN nValor = 11 THEN 'ONZE'
   WHEN nValor = 12 THEN 'DOZE'
   WHEN nValor = 13 THEN 'TREZE'
   WHEN nValor = 14 THEN 'QUATORZE'
   WHEN nValor = 15 THEN 'QUINZE'
   WHEN nValor = 16 THEN 'DEZESSEIS'
   WHEN nValor = 17 THEN 'DEZESSETE'
   WHEN nValor = 18 THEN 'DEZOITO'
   WHEN nValor = 19 THEN 'DEZENOVE'
ELSE ''
END );
RETURN cTxt;
END
</ze_extensounidade>

<ze_sonumeros>
CREATE FUNCTION ze_SoNumeros(
   cValue VARCHAR(20)
   )
RETURNS varchar(20) CHARSET latin1
BEGIN
DECLARE cReturn VARCHAR(20) DEFAULT '';
DECLARE nCont INT(11) DEFAULT 1;
WHILE nCont <= LENGTH( cValue ) DO
   IF SUBSTR( cValue, nCont, 1 ) IN ( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' ) THEN
      set creturn = CONCAT( creturn, SUBSTR( cvalue, ncont, 1 ) );
   END if;
   SET ncont = ncont + 1;
END WHILE;
RETURN creturn;

END
</ze_sonumeros>

<ze_tercadecarnaval>
CREATE FUNCTION ze_TercaDeCarnaval( nAno INT )
RETURNS DATE

BEGIN

DECLARE dData DATE;

SET dData = DATE_SUB( ze_DomingoDePascoa( nAno ), INTERVAL 47 DAY );

RETURN dData;

END
</ze_tercadecarnaval>

<ze_validcnpj>
CREATE FUNCTION ze_ValidCNPJ( cCnpj VARCHAR(20) )
RETURNS int(11)

BEGIN

DECLARE cNumero VARCHAR(20);
DECLARE lOk INT(11);
SET cNumero = ze_SoNumeros( cCnpj );
IF LENGTH( cNumero ) <> 14 THEN
   RETURN IF( LENGTH( cNumero ) = 0, 1, 0 );
END IF;
SET cNumero = LPAD( cNumero, 14, '0' );
SET cNumero = SUBSTR( cNumero, 1, 12 );
SET cNumero = CONCAT( cNumero, ze_CalculaDigito( cNumero, 11 ) );
SET cNumero = CONCAT( cNumero, ze_CalculaDigito( cNumero, 11 ) );
SET lOk =  ( Right( cCnpj, 2 ) = Right( cNumero, 2 ) );
IF lOk THEN
   SET cCnpj = CONCAT( SUBSTR( cNumero, 1, 2 ), '.',
               SUBSTR( cNumero, 3, 3 ), '.',
               SUBSTR( cNumero, 6, 3 ), '/',
               SUBSTR( cNumero, 9, 4 ), '-',
               SUBSTR( cNumero, 13, 2 ) );
END IF;

RETURN lOk;

END
</ze_validcnpj>

<ze_validcpf>
CREATE FUNCTION ze_ValidCPF( cCPF VARCHAR(20) )
RETURNS int(11)

BEGIN

DECLARE cNumero VARCHAR(20);
DECLARE lOk INT(11);
SET cNumero = ze_SoNumeros( CCPF );
IF LENGTH( cNumero ) <> 11 THEN
   RETURN IF( LENGTH( cNumero ) = 0, 1, 0 );
END IF;
SET cNumero = LPAD( cNumero, 11, '0' );
SET cNumero = SUBSTR( cNumero, 1, 9 );
SET cNumero = CONCAT( cNumero, ze_CalculaDigito( cNumero, 10 ) );
SET cNumero = CONCAT( cNumero, ze_CalculaDigito( cNumero, 10 ) );
SET lOK = ( RIGHT( cCPF, 2 ) = RIGHT( cNumero, 2 ) );
IF lOK THEN
   SET CCPF = CONCAT(
              SUBSTR( cNumero, 1, 3 ), '.',
              SUBSTR( CNUMERO, 4, 3 ), '.',
              SUBSTR( CNUMERO, 7, 3 ), '-',
              SUBSTR( cNumero, 10, 2 ) );
END IF;

RETURN lOk;

END
</ze_validcpf>

<ze_validie>
CREATE FUNCTION ze_ValidIE
(
   cInscricao VARCHAR(20),
   cUF VARCHAR(2)
)
RETURNS INT(11)

BEGIN

DECLARE lOk INT(11);
DECLARE nLen INT(11);

IF cInscricao IN ( 'ISENTO', 'NAO CONTRIBUINTE' ) THEN
   RETURN 1;
END IF;

SET nLen = LENGTH( cInscricao );

SET cInscricao = ze_SoNumeros( cInscricao );

/* AC, AL, AP, BA, DF, GO, MA, MG, PE, PR, RJ, RR, RO, SP */
IF cUF = 'AM' THEN RETURN ze_ValidIE_AM( cInscricao ); END IF;
IF cUF = 'CE' THEN RETURN ze_ValidIE_CE( cInscricao ); END IF;
IF cUF = 'ES' THEN RETURN ze_ValidIE_ES( cInscricao ); END IF;
IF cUF = 'MS' THEN RETURN ze_ValidIE_MS( cInscricao ); END IF;
IF cUF = 'MT' THEN RETURN ze_ValidIE_MT( cInscricao ); END IF;
IF cUF = 'PA' THEN RETURN ze_ValidIE_PA( cInscricao ); END IF;
IF cUF = 'PB' THEN RETURN ze_ValidIE_PB( cInscricao ); END IF;
IF cUF = 'PI' THEN RETURN ze_ValidIE_PI( cInscricao ); END IF;
IF cUF = 'RN' THEN RETURN ze_ValidIE_RN( cInscricao ); END IF;
IF cUF = 'RS' THEN RETURN ze_ValidIE_RS( cInscricao ); END IF;
IF cUF = 'SC' THEN RETURN ze_ValidIE_SC( cInscricao ); END IF;
IF cUF = 'SE' THEN RETURN ze_ValidIE_SE( cInscricao ); END IF;
IF cUF = 'TO' THEN RETURN ze_ValidIE_TO( cInscricao ); END IF;
RETURN 0;

END
</ze_validie>

<ze_validie_am>
CREATE FUNCTION ze_ValidIE_AM( cInscricao VARCHAR(20) )
RETURNS INT(11)

BEGIN

IF LENGTH( cInscricao ) <> 9 THEN
   RETURN 0;
END IF;

IF ze_CalculaDigito( Substr( cInscricao, 1, 8 ), "11" ) <> Substr( cInscricao, 9, 1 ) THEN
   RETURN 0;
END IF;

SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 2 ), '.', SUBSTR( cInscricao, 3, 6 ), '-', SUBSTR( cInscricao, 9, 1 ) );

RETURN 1;

END
</ze_validie_am>

<ze_validie_ce>
CREATE FUNCTION ze_ValidIE_CE( cInscricao VARCHAR(20) )
RETURNS INT(11)

BEGIN

IF LENGTH( cInscricao ) <> 9 THEN
   RETURN 0;
END IF;

IF ze_CalculaDigito( Substr( cInscricao, 1, 8 ), "11" ) <> Substr( cInscricao, 9, 1 ) THEN
   RETURN 0;
END IF;

SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 2 ), '.', SUBSTR( cInscricao, 3, 6 ), '-', SUBSTR( cInscricao, 9, 1 ) );

RETURN 1;

END
</ze_validie_ce>

<ze_validie_es>
CREATE FUNCTION ze_ValidIE_ES( cInscricao VARCHAR(20) )
RETURNS INT(11)

BEGIN

IF LENGTH( cInscricao ) <> 9 THEN
   RETURN 0;
END IF;

IF ze_CalculaDigito( Substr( cInscricao, 1, 8 ), "11" ) <> Substr( cInscricao, 9, 1 ) THEN
   RETURN 0;
END IF;

SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 3 ), '.', SUBSTR( cInscricao, 4, 3 ), '.', SUBSTR( cInscricao, 7, 2 ), '-', SUBSTR( cInscricao, 9, 1 ) );

RETURN 1;

END
</ze_validie_es>

<ze_validie_ms>
CREATE FUNCTION ze_ValidIE_MS( cInscricao VARCHAR(20) )
RETURNS INT(11)

BEGIN

IF LENGTH( cInscricao ) <> 9 THEN
   RETURN 0;
END IF;

IF SUBSTR( cInscricao, 1, 2 ) <> '28' THEN
   RETURN 0;
END IF;

IF ze_CalculaDigito( Substr( cInscricao, 1, 8 ), "11" ) <> Substr( cInscricao, 9, 1 ) THEN
   RETURN 0;
END IF;

SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 2 ), '.', SUBSTR( cInscricao, 3, 3 ), '.', SUBSTR( cInscricao, 6, 3 ), '.', SUBSTR( cInscricao, 9, 1 ) );

RETURN 1;

END
</ze_validie_ms>

<ze_validie_mt>
CREATE FUNCTION ze_ValidIE_MT( cInscricao VARCHAR(20) )
RETURNS INT(11)

BEGIN

IF LENGTH( cInscricao ) > 11 THEN
   RETURN 0;
END IF;

SET cInscricao = LPAD( cInscricao, 11, '0' );

IF ze_CalculaDigito( Substr( cInscricao, 1, 10 ), "11" ) <> Substr( cInscricao, 11, 1 ) THEN
   RETURN 0;
END IF;

SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 10 ), '-', SUBSTR( cInscricao, 11, 1 ) );

RETURN 1;

END
</ze_validie_mt>

<ze_validie_pa>
CREATE FUNCTION ze_ValidIE_PA( cInscricao VARCHAR(20) )
RETURNS INT(11)

BEGIN

IF LENGTH( cInscricao ) <> 9 THEN
   RETURN 0;
END IF;

IF SUBSTR( cInscricao, 1, 2 ) <> '15' THEN
   RETURN 0;
END IF;
IF ze_CalculaDigito( Substr( cInscricao, 1, 8 ), "11" ) <> Substr( cInscricao, 9, 1 ) THEN
   RETURN 0;
END IF;

SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 2 ), '-', SUBSTR( cInscricao, 3, 6 ), '-', SUBSTR( cInscricao, 9, 1 ) );

RETURN 1;

END
</ze_validie_pa>

<ze_validie_pb>
CREATE FUNCTION ze_ValidIE_PB( cInscricao VARCHAR(20) )
RETURNS INT(11)

BEGIN

IF LENGTH( cInscricao ) <> 9 THEN
   RETURN 0;
END IF;

IF ze_CalculaDigito( Substr( cInscricao, 1, 8 ), "11" ) <> Substr( cInscricao, 9, 1 ) THEN
   RETURN 0;
END IF;

SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 8 ), '-', SUBSTR( cInscricao, 9, 1 ) );

RETURN 1;

END
</ze_validie_pb>

<ze_validie_pi>
CREATE FUNCTION ze_ValidIE_PI( cInscricao VARCHAR(20) )
RETURNS INT(11)

BEGIN

IF LENGTH( cInscricao ) <> 9 THEN
   RETURN 0;
END IF;

IF ze_CalculaDigito( Substr( cInscricao, 1, 8 ), "11" ) <> Substr( cInscricao, 9, 1 ) THEN
   RETURN 0;
END IF;

SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 2 ), '.', SUBSTR( cInscricao, 3, 3 ), '.', SUBSTR( cInscricao, 6, 3 ), '-', SUBSTR( cInscricao, 9, 1 ) );

RETURN 1;

END
</ze_validie_pi>

<ze_validie_rn>
CREATE FUNCTION ze_ValidIE_RN( cInscricao VARCHAR(20) )
RETURNS INT(11)

BEGIN

IF LENGTH( cInscricao ) <> 9 THEN
   RETURN 0;
END IF;

IF ze_CalculaDigito( Substr( cInscricao, 1, 8 ), "11" ) <> Substr( cInscricao, 9, 1 ) THEN
   RETURN 0;
END IF;

SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 2 ), '.', SUBSTR( cInscricao, 3, 3 ), '.', SUBSTR( cInscricao, 6, 3 ), '-', SUBSTR( cInscricao, 9, 1 ) );

RETURN 1;

END
</ze_validie_rn>

<ze_validie_rs>
CREATE FUNCTION ze_ValidIE_RS( cInscricao VARCHAR(20) )
RETURNS INT(11)

BEGIN

IF LENGTH( cInscricao ) <> 10 THEN
   RETURN 0;
END IF;

IF SUBSTR( cInscricao, 1, 3 ) < '001' THEN
   RETURN 0;
END IF;

IF ze_CalculaDigito( Substr( cInscricao, 1, 9 ), "11" ) <> Substr( cInscricao, 10, 1 ) THEN
   RETURN 0;
END IF;

SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 3 ), '/', SUBSTR( cInscricao, 4, 7 ) );

RETURN 1;

END
</ze_validie_rs>

<ze_validie_sc>
CREATE FUNCTION ZE_ValidIE_SC( cInscricao VARCHAR(20) )
RETURNS INT(11)

BEGIN

IF LENGTH( cInscricao ) <> 9 THEN
   RETURN 0;
END IF;

IF ze_CalculaDigito( Substr( cInscricao, 1, 8 ), "11" ) <> Substr( cInscricao, 9, 1 ) THEN
   RETURN 0;
END IF;

SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 3 ), '.', SUBSTR( cInscricao, 4, 3 ), '.', SUBSTR( cInscricao, 7, 3 ) );

RETURN 1;

END
</ze_validie_sc>

<ze_validie_se>
CREATE FUNCTION ze_ValidIE_SE( cInscricao VARCHAR(20) )
RETURNS INT(11)

BEGIN

IF LENGTH( cInscricao ) <> 9 THEN
   RETURN 0;
END IF;

IF ze_CalculaDigito( SUBSTR( cInscricao, 1, 8 ), "11" ) <> SUBSTR( cInscricao, 9, 1 ) THEN
   RETURN 0;
END IF;

SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 2 ), '.', SUBSTR( cInscricao, 3, 3 ), '.', SUBSTR( cInscricao, 6, 3 ), '-', SUBSTR( cInscricao, 9, 1 ) );

RETURN 1;

END
</ze_validie_se>

<ze_validie_to>
CREATE FUNCTION ze_ValidIE_TO( cInscricao VARCHAR(20) )
RETURNS INT(11)

BEGIN

IF NOT LENGTH( cInscricao ) IN ( 9, 11 ) THEN
   RETURN 0;
END IF;

IF SUBSTR( cInscricao, 1, 2 )  <> '29' THEN
   RETURN 0;
END IF;

IF LENGTH( cInscricao ) = 11 AND NOT SUBSTR( cInscricao, 3, 2 ) IN ( '01', '02', '03', '99' ) THEN
   RETURN 0;
END IF;

IF ze_CalculaDigito( CONCAT( SUBSTR( cInscricao, 1, 2 ), SUBSTR( cInscricao, LENGTH( cInscricao ) - 6, 6 ) ), "11" ) != RIGHT( cInscricao, 1 ) THEN
   RETURN 0;
END IF;

IF LENGTH( cInscricao ) = 11 THEN
   SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 2 ), '.', SUBSTR( cInscricao, 3, 2 ), '.', SUBSTR( cInscricao, 5, 6 ), '-', SUBSTR( cInscricao, 11, 1 ) );
ELSE
   SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 2 ), '.', SUBSTR( cInscricao, 3, 2 ), '.', SUBSTR( cInscricao, 5, 3 ), '-', SUBSTR( cInscricao, 8, 1 ) );
END IF;

RETURN 1;

END
</ze_validie_to>

</sql>
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: 18150
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 » 09 Jul 2021 14:12

stored.png


Sei lá se estou exagerando nesse troço de STORED FUNCTION/PROCEDURE.
Só sei que está divertido.
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: 18150
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 » 11 Jul 2021 18:38

Só tive que ajustar uma para funcionar no MySQL 5.x.
Já estão sendo cadastradas automaticamente nos clientes, e também já fazem parte do backup.

No meio de tanto fonte, foi só remover um SET @variavel = NULL;

Tudo bem até agora...
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: 18150
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 » 13 Jul 2021 14:29

salvaSQL.png


Como eu disse, tá salvando STOREDs em tudo que é cliente, mesmo fora de uso.

Pois é... testando atualização e backup em todos os clientes... das STORED functions/procedures.
Não dá pra deixar isso pra depois.

Agora que essa parte está ok, começando a fazer uso.
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: 18150
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 » 15 Jul 2021 09:38

sqlxml.png


Subindo pra 3.500 linhas.
Só de create table tem trocentas.

E tem só a parte básica, aonde não depende de fonte Harbour.
Por exemplo: "SELECT " + LtrimStr(..." , esse não faz parte.
Não faz parte INSERT, DELETE, UPDATE.
E muitos SELECTs não podem fazer parte.

De um modo geral, são os CREATE TABLE, CREATE PROCEDURE e CREATE FUNCTION.
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: 18150
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 12:55


IF ze_CalculaDigito( CONCAT( SUBSTR( cInscricao, 1, 2 ), SUBSTR( cInscricao, LENGTH( cInscricao ) - 6, 6 ) ), '11' ) != RIGHT( cInscricao, 1 ) THEN
   RETURN 0;
END IF;

IF LENGTH( cInscricao ) = 11 THEN
   SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 2 ), '.', SUBSTR( cInscricao, 3, 2 ), '.', SUBSTR( cInscricao, 5, 6 ), '-', SUBSTR( cInscricao, 11, 1 ) );
ELSE
   SET cInscricao = CONCAT( SUBSTR( cInscricao, 1, 2 ), '.', SUBSTR( cInscricao, 3, 2 ), '.', SUBSTR( cInscricao, 5, 3 ), '-', SUBSTR( cInscricao, 8, 1 ) );
END IF;

RETURN 1;

END
</ze_validie_to>

<json>-----json-----</json>

<sonyremote>
{"devices":[
   {"device":"AV Receiver","brandCodes":[
      {"brand":"Arcam","codes":["81189"]},
      {"brand":"Audiotronic","codes":["81189"]},
      {"brand":"Bang&Olufsen","codes":["80799"]},
      {"brand":"Carver","codes":["108","189","8","981"]},


Expandindo esta merd....
É STORED PROCEDURE, STORED FUNCTION, JSON, e tudo mais.
Alterei o nome físico de de SQL.XML pra RESOURCE.XML.
E o módulo responsável de ze_CmdSQL() pra ze_ResXML()

aHash := hb_JsonDecode( ze_ResXML( "sonyremote" ) )
...
cnSQL:ExecuteCmd( ze_resXml( "ze_extenso" ) )


Se depois vou compactar esse arquivo, embutir como resource ou não, tanto faz.
E se vou continuar com Harbour ou não, tanto faz.
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: 18150
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 13:09

Sefazclass, por exemplo.


#define SEFAZ_UF { ;
   { "AC", "ACRE", "12" }, ;
   { "AL", "ALAGOAS", "27" }, ;
   { "AP", "AMAPA", "16" }, ;
   { "AM", "AMAZONAS", "13" }, ;
   { "BA", "BAHIA", "29" }, ;
   { "CE", "CEARA", "23" }, ;
   { "DF", "DISTRITO FEDERAL", "53" }, ;
   { "ES", "ESPIRITO SANTO", "32" }, ;
   { "EX", "EXTERIOR", "99" }, ;
   { "GO", "GOIAS", "52" }, ;
   { "MA", "MARANHAO", "21" }, ;
   { "MT", "MATO GROSSO", "51" }, ;
   { "MS", "MATO GROSSO DO SUL", "50" }, ;
   { "MG", "MINAS GERAIS", "31" }, ;
   { "PA", "PARA", "15" }, ;
   { "PB", "PARAIBA", "25" }, ;
   { "PR", "PARANA", "41" }, ;
   { "PE", "PERNAMBUCO", "26" }, ;
   { "PI", "PIAUI", "22" }, ;
   { "RJ", "RIO DE JANEIRO", "33" }, ;
   { "RN", "RIO GRANDE DO NORTE", "24" }, ;
   { "RS", "RIO GRANDE DO SUL", "43" }, ;
   { "RO", "RONDONIA", "11" }, ;
   { "RR", "RORAIMA", "14" }, ;
   { "SC", "SANTA CATARINA", "42" }, ;
   { "SP", "SAO PAULO", "35" }, ;
   { "SE", "SERGIPE", "28" }, ;
   { "TO", "TOCANTINS", "17" } }


Substituir o #include da parte acima por um bloco json:

[
["AC","ACRE","12"],
["AL","ALAGOAS","27"],
["AP","AMAPA","16"],
["AM","AMAZONAS","13"],
["BA","BAHIA","29"],
["CE","CEARA","23"],
["DF","DISTRITO FEDERAL","53"],
["ES","ESPIRITO SANTO","32"],
["EX","EXTERIOR","99"],
["GO","GOIAS","52"],
["MA","MARANHAO","21"],
["MT","MATO GROSSO","51"],
["MS","MATO GROSSO DO SUL","50"],
["MG","MINAS GERAIS","31"],
["PA","PARA","15"],
["PB","PARAIBA","25"],
["PR","PARANA","41"],
["PE","PERNAMBUCO","26"],
["PI","PIAUI","22"],
["RJ","RIO DE JANEIRO","33"],
["RN","RIO GRANDE DO NORTE","24"],
["RS","RIO GRANDE DO SUL","43"],
["RO","RONDONIA","11"],
["RR","RORAIMA","14"],
["SC","SANTA CATARINA","42"],
["SP","SAO PAULO","35"],
["SE","SERGIPE","28"],
["TO","TOCANTINS","17"]
]


Mais simples, e manutenção mais fácil.
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: 18150
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 13:16

uf.png


Simples e prático.

o array em json dentro do xml ficou como mostrei no post anterior.
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: 18150
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Próximo



Retornar para SQL

Quem está online

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