Como usar String Replace para uma coluna no Banco de Dados
Boa Tarde,
Utilizo o Lazarus para programar em Object Pascal. Tenho um trecho de código que quero que faça uma substituição de caracteres e apareça no DBGrid. No entanto quando executo, os caracteres não são substituídos. Segue o código e a saída quando executo a procedure.
[img]http://arquivo.devmedia.com.br/forum/imagem/465319-20160106-140710.png[/img]
Gostaria que todos os "www." fossem substituídos por "@". Alguém pode me ajudar?
Att,
Gabriel Fernandes
Utilizo o Lazarus para programar em Object Pascal. Tenho um trecho de código que quero que faça uma substituição de caracteres e apareça no DBGrid. No entanto quando executo, os caracteres não são substituídos. Segue o código e a saída quando executo a procedure.
procedure TfrmPrincipal.btnEmailClick(Sender: TObject); var valor: String; begin dmdados.queBanco.SQL.Clear; dmdados.queBanco.SQL.Add('select website from accounts;'); if(dmdados.conBanco.connected=false)then dmdados.conBanco.connected:=true; if(dmdados.trBanco.active=false)then dmdados.trBanco.active:=true; if(dmdados.queBanco.active=false)then dmdados.queBanco.active:=true; valor:= dmdados.queBanco.FieldByName('website').value; valor:= StringReplace(valor, 'www.', '@', [rfReplaceAll, rfIgnoreCase]); DBGrid.Refresh; end;
[img]http://arquivo.devmedia.com.br/forum/imagem/465319-20160106-140710.png[/img]
Gostaria que todos os "www." fossem substituídos por "@". Alguém pode me ajudar?
Att,
Gabriel Fernandes
Gabriel
Curtidas 0
Melhor post
Raylan Zibel
06/01/2016
Veja se não consegue resolver isso direto no seu sql:
[url:descricao=http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace]http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace[/url]
http://www.firebirdsql.org/refdocs/langrefupd25-intfunc-replace.html
[url:descricao=https://msdn.microsoft.com/pt-br/library/ms186862(v=sql.120).aspx]https://msdn.microsoft.com/pt-br/library/ms186862(v=sql.120).aspx[/url]
[url:descricao=http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace]http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace[/url]
http://www.firebirdsql.org/refdocs/langrefupd25-intfunc-replace.html
[url:descricao=https://msdn.microsoft.com/pt-br/library/ms186862(v=sql.120).aspx]https://msdn.microsoft.com/pt-br/library/ms186862(v=sql.120).aspx[/url]
GOSTEI 1
Mais Respostas
Raylan Zibel
06/01/2016
No seu código a variavel "valor" não está indo pra lugar nenhum. Entre no evento onGetText do Field no Dataset e altere o valor de "Text".
Algo assim...
Text := StringReplace(Text, 'www.', '@', [rfReplaceAll, rfIgnoreCase]);
Algo assim...
GOSTEI 0
Gabriel
06/01/2016
Raylan,
No meu Dataset não existe esse evento. Veja:
[img]http://arquivo.devmedia.com.br/forum/imagem/465319-20160106-143552.png[/img]
Você se refere a o fieldDefs dentro do DataSet?
No meu Dataset não existe esse evento. Veja:
[img]http://arquivo.devmedia.com.br/forum/imagem/465319-20160106-143552.png[/img]
Você se refere a o fieldDefs dentro do DataSet?
GOSTEI 0
Raylan Zibel
06/01/2016
Humm..
Você se refere a o fieldDefs dentro do DataSet?
Testei no Delphi, pode ter alguma diferença... Mas é um evento do campo da sua query. Um evendo do Field, não da Query.
Aparentemente tem esse evento sim. Dê uma procurada aí..
Lazarus
Você se refere a o fieldDefs dentro do DataSet?
Testei no Delphi, pode ter alguma diferença... Mas é um evento do campo da sua query. Um evendo do Field, não da Query.
Aparentemente tem esse evento sim. Dê uma procurada aí..
Lazarus
GOSTEI 0
Gabriel
06/01/2016
Quando tento criar um campo no dataset aparece a mensagem
[img]http://arquivo.devmedia.com.br/forum/imagem/465319-20160106-150807.png[/img]
[img]http://arquivo.devmedia.com.br/forum/imagem/465319-20160106-150807.png[/img]
GOSTEI 0
Gabriel
06/01/2016
Raylan,
testei a solução REPLACE no gerenciador do BD e funcionou perfeitamente (uso o MySQL), porém a minha dúvida agora é quanto as aspas.
Pois o Mysql utiliza aspas simples e o pascal também, então quando coloco uma aspa simples antes do www. ele fecha o texto
testei a solução REPLACE no gerenciador do BD e funcionou perfeitamente (uso o MySQL), porém a minha dúvida agora é quanto as aspas.
dmdados.queBanco.SQL.Add('select replace (website,'www.',@) from accounts;');
Pois o Mysql utiliza aspas simples e o pascal também, então quando coloco uma aspa simples antes do www. ele fecha o texto
GOSTEI 0
Raylan Zibel
06/01/2016
dmdados.queBanco.SQL.Add('select replace (website,''www.'',@) from accounts;'); ou dmdados.queBanco.SQL.Add('select replace (website,'+ quotedstr('www.') +',@) from accounts;');
GOSTEI 0
Gabriel
06/01/2016
Desculpe,
Digitei a linha errada, o comando em MySQL é
as aspas vem antes e depois do www, isso que complica
Digitei a linha errada, o comando em MySQL é
select replace (website,'www.','@') from accounts;
as aspas vem antes e depois do www, isso que complica
GOSTEI 0
Raylan Zibel
06/01/2016
Se você estiver passando o sql pelo Delphi, igual no começo, é assim mesmo...
dmdados.queBanco.SQL.Text := ' select replace (website, ' + QuotedStr('www.') + ', ' + QuotedStr('@') + ') as website from accounts ';
GOSTEI 1
Gabriel
06/01/2016
Raylan,
Agora funcionou perfeitamente, agradeço sua atenção e paciência!
Att,
Gabriel Fernandes
Agora funcionou perfeitamente, agradeço sua atenção e paciência!
Att,
Gabriel Fernandes
GOSTEI 0