Clipper On Line • Ver Tópico - MariaDB

MariaDB

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

MariaDB

Mensagempor JoséQuintas » 26 Jan 2020 20:46

Imagine o seguinte:

INSERT INTO CLIENTE ( NOME ) VALUE ( 'RUA DALVA' )

mas o usuário digita ' ) e mais comandos no nome

INSERT INTO CLIENTE ( NOME ) VALUE ( ' ' ); DELETE FROM.... ')

Só o fato de trocar aspas simples por \' , já evita problemas desse tipo, é uma das coisas a evitar.
O problema maior não é erro na gravação, mas o usuário se aproveitar pra outras coisas.
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: 18151
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

MariaDB

Mensagempor JoséQuintas » 26 Jan 2020 20:51

INSERT INTO CLIENTE ( NOME ) VALUE ( '\' ); DELETE FROM....\'')

Desse jeito vai gravar as aspas (') dentro do texto, sem erro, e sem a possibilidade do usuário injetar comandos, pelo menos com aspas...
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: 18151
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

MariaDB

Mensagempor asimoes » 26 Jan 2020 21:08

Quintas,

Fiz a função RemoveAcentosEspeciais(), com essa função funcionou.

Funcionou também para PTISO e PT850

CASE ValType( xValue ) == "C"
xValue := AllTrim( RemoveAcento( MySqlValidString( xValue ) ) )
RemoveAcentosEspeciais( @xValue )
cSql += StringSql( xValue )

FUNCTION RemoveAcentosEspeciais( xValue )
LOCAL cLetra

   FOR EACH cLetra IN xValue
      DO CASE
         CASE cLetra $ "abcdefghijklmnopqrstuvwxyz"
         CASE cLetra $ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
         CASE cLetra $ "0123456789"
         CASE cLetra $ " /·,+-()"
      OTHERWISE
         xValue := StrTran( xValue, cLetra )
      ENDCASE
   NEXT

RETURN Nil
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

MariaDB

Mensagempor asimoes » 26 Jan 2020 21:48

Tinha um campo com o nome Desc, deu ruim, kkk, modifiquei para DESCONTO, sistema legado tem disso.
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

MariaDB

Mensagempor asimoes » 26 Jan 2020 23:42

Fiz uma modificação aqui só pra ler o dbf que não foi lido por erro ou que entrou na pasta (novo), pra não ter que ler tudo novamente
   hTable := {}

   FOR EACH oFile IN Directory( "*.DBF" )
      cFile := oFile[ F_NAME ]
      cFile := Substr( cFile, 1, At( ".", cFile ) - 1 )
     
      lRead := .T.
     
      IF Hb_FileExists( "ARQUIVO.json" )
         hArquivo := {}
         Hb_JSONDecode( Hb_MemoRead( "ARQUIVO.json" ), @hArquivo )
         lRead := Hb_aScan( hArquivo, { |a| a["DBF"] == cFile } ) = 0
      ENDIF
     
      IF lRead
         hRecord := Nil
         hRecord := {=>}
         hRecord["DBF"] := cFile
         aAdd( hTable, hRecord )
         CopyDbfToMySql( cFile, .T., .T., .T. )
         cJSON := Hb_JSONEncode( hTable, .T. )
         Hb_MemoWrit( "ARQUIVO.json", cJSON )
      ENDIF
       
   NEXT
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

MariaDB

Mensagempor JoséQuintas » 26 Jan 2020 23:59

Tive um problema estranho pra atualizar de 5.5 pra 10.x

Ao chamar a atualização, selecionar MySQL, deu erro.
Fazendo de novo, e clicando em "select all", aí marcou MySQL e funcionou.
Vai entender...

Atualizei da 5.5 pra 10.x

A única coisa que não gostei, é que os bancos continuaram na pasta 5.5, isso pode confundir.

Mas tudo certo.

Uso servidores diferentes agora, MySQL e MariaDB, minha base local é MariaDB, mas na internet é MySQL.
Como eu já disse, o mesmo conector funciona nos dois.
Agora minhas máquinas só tem MariaDB, mas conectam normalmente no MySQL da internet.

Acho que só faltou dizer uma coisa:

A instalação do MySQL tem 400MB
A instalação do MariaDB tem 50MB, e vém com HeidiSQL.

E pra quem estiver interessado, já pode trocar o ODBC pra MariaDB, mesmo que continue usando MySQL.
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: 18151
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

MariaDB

Mensagempor asimoes » 27 Jan 2020 00:41

Peguntas:

O nome EMAIL é palavra reservada do MariaDB ?

Porque deu erro na criação de primary aqui:

cKeyName é IDEMAIL

cSql += " PRIMARY KEY ( " + cKeyName + " )"

Modifiquei o nome da tabela de EMAIL para XEMAI, não deu erro
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

MariaDB

Mensagempor asimoes » 27 Jan 2020 01:24

Agora tem esse erro maluco:

2020-01-27 01_21_56-Utilitário de Carga MariaDB.png


Já tentei trocar o nome do dbf mais continua o erro.
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

MariaDB

Mensagempor JoséQuintas » 27 Jan 2020 14:18

Faz assim:

Faz a manutenção do HeidiSQL, e dá uma olhada no código CREATE dele.
Pode renomear o nome do campo, criar índice, etc.
Depois é só olhar como ele fez o CREATE.
Uma opção que aparece no HeidiSQL:

`CODIGO` INT(11)
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: 18151
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

MariaDB

Mensagempor asimoes » 27 Jan 2020 19:56

Quintas,

Descobri o problema, não tem tratamento para campo lógico.

Inclui esse código

CASE oStru[ nCont, DBS_TYPE ] == "L"
cSql += " VARCHAR( " + Ltrim( Str( oStru[ nCont, DBS_LEN ] ) ) + " ) DEFAULT 'F' "

Era esse o problema.

2020-01-27 19_55_05-Window.png

Foi criado também essa função para tratar o lógico
FUNCTION LogicSql( lLogic )

   LOCAL cString

   Hb_Default(@lLogic, .F.)
   
   cString := IF( lLogic, "'T'", "'F'" )

   RETURN cString

CASE ValType( xValue ) == "L"
cSql += LogicSql( xValue )
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

MariaDB

Mensagempor JoséQuintas » 27 Jan 2020 22:18

asimoes escreveu:CASE oStru[ nCont, DBS_TYPE ] == "L"
cSql += " VARCHAR( " + Ltrim( Str( oStru[ nCont, DBS_LEN ] ) ) + " ) DEFAULT 'F' "


Mas aí tá criando caractere.
Não seria o binary?

Vou deixar pra quando for usar, assim tiro a dúvida.
Nunca usei campo lógico, não gosto deles, mas talvez um dia use no MariaDB.
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: 18151
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

MariaDB

Mensagempor JoséQuintas » 27 Jan 2020 22:25

Achei isto, e de geralmente usarem Tiny Int

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

MariaDB

Mensagempor asimoes » 28 Jan 2020 08:30

Quintas
Vou modificar como você sugeriu
No Oracle não tem isso, o artifício e dessa forma que eu fiz, o problema é compatibilidade com os outros bancos se for migrar
Varchar é igual nos SGBD
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

MariaDB

Mensagempor asimoes » 29 Jan 2020 11:34

Filtro e Sort com um resultset

Pode-se ordenar um resultset ou filtrar determinado campo dele.

Ex.:
oRs:Sort   := "VENCIMENTO DESC"
           
oRs:Filter := "VENCIMENTO='20/02/2020'"

oRs:Filter := "VENCIMENTO >= #20/01/20#"
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

MariaDB

Mensagempor JoséQuintas » 29 Jan 2020 11:49

asimoes escreveu:Filtro e Sort com um resultset


Só que isso é do ADO, e vale pra qualquer base de dados, até DBF.
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: 18151
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Anterior Próximo



Retornar para Banco de Dados

Quem está online

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