SELECT Nome FROM Cliente WHERE Nome = 'Maria D'Avila'
Moderador: Moderadores
- susviela@bol.com.br
- Usuário Nível 3

- Mensagens: 236
- Registrado em: 30 Jun 2017 11:17
- Localização: São José / SC
- Contato:
SELECT Nome FROM Cliente WHERE Nome = 'Maria D'Avila'
Sei que uma das soluções é usar DOIS apóstrofes ou usar o escape \'
Como os colegas tratam esse detalhe ?
Nada que um StrTran não resolva mas ...
SGBD: MariaDB
Lib: HMG 3.4.4
Como os colegas tratam esse detalhe ?
Nada que um StrTran não resolva mas ...
SGBD: MariaDB
Lib: HMG 3.4.4
.
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com
( #ProgramandoxBase #AllxBase )
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com
( #ProgramandoxBase #AllxBase )
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
SELECT Nome FROM Cliente WHERE Nome = 'Maria D'Avila'
Acho que depende do que está usando pra acessar MySQL.
No ADO acabei criando uma função de/para.
Nessas funções, faço as conversões de/para, e até mesmo pra colocar entre aspas.
Ao invés de colocar tratamento especial em tudo que é fonte, só usar uma função e pronto.
Inclusive funções extras pra fazer "de baciada".... rs
Neste último caso, crio um array com todos os campos, e no final crio a query por função.
Fica um fonte mais legível, na maioria dos casos, comparado a ficar convertendo tudo em cada fonte/comando.
No ADO acabei criando uma função de/para.
Código: Selecionar todos
cSql += StringSql( cTexto ) // ValueSql()
...
cCampo := Rs:StringSql( "CAMPO" )
Ao invés de colocar tratamento especial em tudo que é fonte, só usar uma função e pronto.
Inclusive funções extras pra fazer "de baciada".... rs
Código: Selecionar todos
cnMySql:QueryCreate()
cnMySql:QueryAdd( "campo", valor )
cnMySql:QueryAdd( "campo", valor)
cnMySql:QueryExecuteUpdate( "clientes", "CODIGO=" + NumberSql( nCodigo ) )
Fica um fonte mais legível, na maioria dos casos, comparado a ficar convertendo tudo em cada fonte/comando.
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/
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/
- susviela@bol.com.br
- Usuário Nível 3

- Mensagens: 236
- Registrado em: 30 Jun 2017 11:17
- Localização: São José / SC
- Contato:
SELECT Nome FROM Cliente WHERE Nome = 'Maria D'Avila'
Estou usando a classe TMySQLServer() nativamente com HMG / MariaDB ...
Vou dar uma estudada mas acho que vai ter que ser isso mesmo colocar na minha classe de manutenção da tabela uns filtros.
Como diz querer pegar uns atalhos as vezes acaba não rendendo, eu não usei métodos GET / SET, poderia colocar os filtros nesses métodos, mas vou pensar ... se não faço a coisa certa antes de ficar maior ainda.
Código: Selecionar todos
LOCAL cSql := "INSERT INTO "+ ::cTabela +"( " +;
"usuario, senha, nome, ativo, nivel, imagem, ultimologin ) "+;
"VALUES ( " +;
"'" + ::usuario +"', "+;
"'" + ::senha +"', "+;
"'" + ::nome +"', "+;
" " + ALLTRIM(STR(::ativo)) +" , "+;
" " + ALLTRIM(STR(::nivel)) +" , "+;
"'" + ::imagem +"', "+;
"'" + ::ultimologin +"' " ;
Como diz querer pegar uns atalhos as vezes acaba não rendendo, eu não usei métodos GET / SET, poderia colocar os filtros nesses métodos, mas vou pensar ... se não faço a coisa certa antes de ficar maior ainda.
.
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com
( #ProgramandoxBase #AllxBase )
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com
( #ProgramandoxBase #AllxBase )
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
SELECT Nome FROM Cliente WHERE Nome = 'Maria D'Avila'
Poderia fazer igual eu faço, e centralizar numa função de conversão.
É só um exemplo.
Tratando tudo em função, é menos fonte, mais legível, e já ajusta tudo num logar só.
Opcionalmente, pode usar única função.
Só sugestão.
Código: Selecionar todos
LOCAL cSql := "INSERT INTO "+ ::cTabela +"( " +;
"usuario, senha, nome, ativo, nivel, imagem, ultimologin ) "+;
"VALUES ( " + ;
StringSql( ::usuario ) + "," + ;
StringSql( ::senha ) + "," + ;
StringSql( ::nome ) + "," + ;
NumberSql( ::Ativo ) + "," + ;
NumberSql( ::nivel ) + "," + ;
StringSql( ::Imagem ) + "," + ;
StringSql( ::UltimoLogin ) + " )"
FUNCTION StringSql( xValue )
xValue := StrTran( xValue, ['], [\']
RETURN ['] + xValue + [']
FUNCTION NumberSql( xValue )
RETURN AllTrim( Str( xValue ) )
Tratando tudo em função, é menos fonte, mais legível, e já ajusta tudo num logar só.
Opcionalmente, pode usar única função.
Código: Selecionar todos
FUNCTION ValueSql( xValue )
DO CASE
CASE ValType( xValue ) == "C"; RETURN StringSql( xValue )
CASE ValType( xValue ) == "N"; RETURN NumberSql( xValue )
CASE ValType( xValue ) == "D"; RETURN DateSql( xValue )
ENDCASE
// tipo nao tratado
RETURN xValue
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/
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/
- susviela@bol.com.br
- Usuário Nível 3

- Mensagens: 236
- Registrado em: 30 Jun 2017 11:17
- Localização: São José / SC
- Contato:
SELECT Nome FROM Cliente WHERE Nome = 'Maria D'Avila'
Muito bom ...
O mais estranho que cada pessoa tem o seu modo de escrever o código ... sabe que nunca uso [ ] para delimitar string e ficou gravado em minha mente como delimitador de matriz .... hehehe.
aDados := {}
aDados[1,2] := "Teste"
----
Voltando ao assunto você usa os atributos (nome dos campos como PROTECTED na classe ) ou EXPORTED, tenho adotado esse modelo mas estou pensando em fazer o correto que seria não permitir que os atributos da classe fossem alterado externamente.
Gostei, mesmo da dica e vou adotar ...Código: Selecionar todos
FUNCTION StringSql( xValue ) xValue := StrTran( xValue, ['], [\'] RETURN ['] + xValue + ['] FUNCTION NumberSql( xValue ) RETURN AllTrim( Str( xValue ) )
O mais estranho que cada pessoa tem o seu modo de escrever o código ... sabe que nunca uso [ ] para delimitar string e ficou gravado em minha mente como delimitador de matriz .... hehehe.
aDados := {}
aDados[1,2] := "Teste"
----
Voltando ao assunto você usa os atributos (nome dos campos como PROTECTED na classe ) ou EXPORTED, tenho adotado esse modelo mas estou pensando em fazer o correto que seria não permitir que os atributos da classe fossem alterado externamente.
.
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com
( #ProgramandoxBase #AllxBase )
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com
( #ProgramandoxBase #AllxBase )
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
SELECT Nome FROM Cliente WHERE Nome = 'Maria D'Avila'
Por enquanto não.
Mas pode ser interessante pra impedir colocar tipo de variável errado em variáveis da classe, por exemplo.
Por outro lado, isso pode esconder erros de fonte.
No geral vou alterando conforme a necessidade.
Tipo... quando começo a errar muito o nome de uma variável da classe, sinal de que tá na hora de alterar aquele nome... rs
Mas pode ser interessante pra impedir colocar tipo de variável errado em variáveis da classe, por exemplo.
Por outro lado, isso pode esconder erros de fonte.
No geral vou alterando conforme a necessidade.
Tipo... quando começo a errar muito o nome de uma variável da classe, sinal de que tá na hora de alterar aquele nome... rs
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/
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/