Como usar String Replace para uma coluna no Banco de Dados

06/01/2016

2

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.

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
Responder

Post mais votado

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

Mais Posts

06/01/2016

Raylan Zibel

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

Text := StringReplace(Text, 'www.', '@', [rfReplaceAll, rfIgnoreCase]);


Algo assim...
Responder

06/01/2016

Gabriel

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

06/01/2016

Raylan Zibel

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
Responder

06/01/2016

Gabriel

Quando tento criar um campo no dataset aparece a mensagem
[img]http://arquivo.devmedia.com.br/forum/imagem/465319-20160106-150807.png[/img]
Responder

06/01/2016

Gabriel

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.

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
Responder

06/01/2016

Raylan Zibel

dmdados.queBanco.SQL.Add('select replace (website,''www.'',@) from accounts;');

ou

dmdados.queBanco.SQL.Add('select replace (website,'+ quotedstr('www.') +',@) from accounts;');
Responder

06/01/2016

Gabriel

Desculpe,

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
Responder

06/01/2016

Raylan Zibel

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  ';
Responder

06/01/2016

Gabriel

Raylan,

Agora funcionou perfeitamente, agradeço sua atenção e paciência!


Att,
Gabriel Fernandes
Responder