Delphi - Aspas simples dentro de uma string

Uma dúvida cruel para desenvolvedores iniciantes em delphi é "Como inserir aspas simples dentro de uma string", já que o delphi utiliza aspas simples para iniciar e terminar strings.

Procurando na internet encontrei várias formas de fazer isso. Para demonstrar vou resolver a seguinte string sql: "IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TABELA' AND COLUMN_NAME = 'COLUNA') BEGIN ALTER TABLE TABELA DROP COLUMN COLUNA END".

Esta função SQL verifica se a coluna "COLUNA" existe na tabela "TABELA". Se existir, eu removo a coluna.

Delphi

1 - Três aspas simples

Este método é simples porém não aconselho utiliza-lo pois o seu código pode ficar meio embolado.

Ex.:

 sql := 'IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE 
TABLE_NAME = '''TABELA''' AND COLUMN_NAME = '''COLUNA''') BEGIN ALTER 
TABLE TABELA DROP COLUMN COLUNA END';

2 - Concatenar com Chr(39)

Este método apenas concatena a string com o código ascii da aspas simples.

Ex.:

 sql := 'IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE 
TABLE_NAME = '+Chr(39)+'TABELA'+Chr(39)+' AND COLUMN_NAME = 
'+Chr(39)+'COLUNA'+Chr(39)+') BEGIN ALTER TABLE TABELA DROP COLUMN 
COLUNA END';

3 - Função QuotedStr('string')

Esta função retorna a string desejada dentro de aspas simples. Então você simplesmente concatena sua string à esta função e pronto. Para mim é a forma mais simples de resolver o problema das aspas simples.

Ex.:

sql := 'IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE 
TABLE_NAME = '+quotedstr('TABELA')+' AND COLUMN_NAME = 
'+quotedstr('COLUNA')+') BEGIN ALTER TABLE TABELA DROP COLUMN COLUNA 
END';

Estas 3 dicas funcionam normalmente mas, como eu avisei, preferi a regra 3 pois o código fica mais legível.

Se você conhece outra maneira ou tem algo a acrescentar à esta matéria, deixe seu comentário abaixo.

Até a próxima dica!


Tags desta matéria

Comentários  (12)

  • Vinicius Belisário
    Vinicius Belisário 20/12/2011 15:59

    Valeu, salvou meu dia hoje!

  • Henrique Corrêa
    Henrique Corrêa 20/12/2011 16:21

    Valeu Vinícius,
    Também já fui salvo por várias matérias de blog e é por isso mesmo que escrevo!!!
    Forte Abraço

  • Flavio
    Flavio 01/02/2012 16:24

    Parabens dicas importantes, e me ajudou muito.

  • Henrique Corrêa
    Henrique Corrêa 01/02/2012 17:40

    Obrigado Flávio,
    Espero poder ajudar mais em outras postagens!
    Forte Abraço

  • Maycon
    Maycon 07/04/2015 19:28

    Simples e objetivo, parabens.

  • Marcelo
    Marcelo 27/06/2017 11:12

    Eu faria da seguinte maneira :
    sql := \'IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = \';
    sql := sql + quotedstr(\'TABELA\');
    sql := sql + \' AND COLUMN_NAME = \';
    sql := sql + quotedstr(\'COLUNA\') ;
    sql := sql + \') BEGIN ALTER TABLE TABELA DROP COLUMN COLUNA END\';

    Acho que fica bem mais legível.

  • ACE
    ACE 10/11/2017 11:17

    Parabens, me resolveu um grande problema de forma bem simples. Obrigado.

  • Henrique Corrêa
    Henrique Corrêa 17/11/2017 12:41

    Fico feliz em ajudar, ACE!

  • Henrique Corrêa
    Henrique Corrêa 17/11/2017 12:42

    Marcelo, valeu a dica, sempre é bom ter todas as informações possíveis.

  • Henrique Corrêa
    Henrique Corrêa 17/11/2017 12:43

    Obrigado Maycon!

  • Maycon
    Maycon 19/03/2018 11:09

    Marcelo, ta horrível o seu, pqp em, que bosta de código, namoral

  • Nelson Moura
    Nelson Moura 24/03/2023 09:32

    Eu copio o código do próprio banco de dados, e substituo mando o Delphi trocas aspas DUPLAS por aspas simples:

    a:= 'CREATE INDEX "COMPETENCIAS1" ON -COMPETENCIAS- ( "DEBITO" ASC, "ANO" ASC, "MES" ASC ' ;
    a:= StringReplace( a, '"', chr(39), [rfReplaceAll]); {troca asterisco por aspas simples}

Deixe sua opnião