MariaDB

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

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

MariaDB

Mensagem por JoséQuintas »

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

MariaDB

Mensagem por JoséQuintas »

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 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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MariaDB

Mensagem por asimoes »

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 )

Código: Selecionar todos

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MariaDB

Mensagem por asimoes »

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MariaDB

Mensagem por asimoes »

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

Código: Selecionar todos

   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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

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 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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MariaDB

Mensagem por asimoes »

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MariaDB

Mensagem por asimoes »

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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

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 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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MariaDB

Mensagem por asimoes »

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

Código: Selecionar todos

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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

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

MariaDB

Mensagem por JoséQuintas »

Achei isto, e de geralmente usarem Tiny Int
mysql.png
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MariaDB

Mensagem por asimoes »

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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MariaDB

Mensagem por asimoes »

Filtro e Sort com um resultset

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

Ex.:

Código: Selecionar todos

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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MariaDB

Mensagem por JoséQuintas »

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