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 »

A lista tá aumentando.

Código: Selecionar todos

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

spsf.png
Sem idéia ainda.
Talvez agrupar tudo num 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 »

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

Código: Selecionar todos

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

Vou trocar isto e os vários arquivos indicados:

Código: Selecionar todos

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:

Código: Selecionar todos

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 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 acrescentei isto no meu pré-hbmk2:

Código: Selecionar todos

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

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:

Código: Selecionar todos

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

compilado.png
Tem objeto muito maior no aplicativo.
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 »

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

Código: Selecionar todos

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

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

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

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

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


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

Código: Selecionar todos

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

Sefazclass, por exemplo.

Código: Selecionar todos


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

Código: Selecionar todos

[
["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 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 »

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