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.
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!
Valeu, salvou meu dia hoje!
Valeu VinÃcius,
Também já fui salvo por várias matérias de blog e é por isso mesmo que escrevo!!!
Forte Abraço
Parabens dicas importantes, e me ajudou muito.
Obrigado Flávio,
Espero poder ajudar mais em outras postagens!
Forte Abraço
Simples e objetivo, parabens.
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.
Parabens, me resolveu um grande problema de forma bem simples. Obrigado.
Fico feliz em ajudar, ACE!
Marcelo, valeu a dica, sempre é bom ter todas as informações possÃveis.
Obrigado Maycon!
Marcelo, ta horrÃvel o seu, pqp em, que bosta de código, namoral
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}