2017-01-27 4 views
0

Это работает нормально на SQL Server 2014:текст трактуется как имя столбца

UPDATE MYTABLE 
SET MYFIELD = MYFIELD + 'the quick brown fox jumped over the lazy dog' 
       + CAST(FOR_DATE AS VARCHAR(30)) 

Портирование его запроса в Delphi:

SQL.Text := UPDATE MYTABLE SET MYFIELD = MYFIELD 
+ "the quick brown fox jumped over the lazy dog" 
+ CAST(FOR_DATE AS VARCHAR(30)) 

Это выдает ошибку:

the quick brown fox jumped over the lazy dog" is treated as a column name (?).

Одиночные кавычки вокруг текста не работают.

Что мне не хватает?

ответ

1

Этот запрос должен сделать трюк, вы можете использовать функцию QuotedStr включить кавычки в строку:

SQL.Text := 'UPDATE MYTABLE SET MYFIELD=MYFIELD + ' + 
      QuotedStr('the quick brown fox jumped over the lazy dog') + 
      '+ CAST(FOR_DATE as varchar(30))'; 

или если вы хотите включить цитату в строку, вы должны удвоить его:

SQL.Text := 'UPDATE MYTABLE SET MYFIELD=MYFIELD + ' + 
      '''the quick brown fox jumped over the lazy dog''' + 
      '+ CAST(FOR_DATE as varchar(30))'; 

наконец, лучше и более безопасным способом является использование параметризованных запросов, это единственный способ предотвратить SQL Injection:

SQL.Text := 'UPDATE MYTABLE SET MYFIELD = MYFIELD + :MyText'+ 
      ' + CAST(FOR_DATE AS VARCHAR(30))'; 
ParamByName('MyText').AsString := 'variable text'; 
+0

Вместо этого вы должны использовать параметризованный запрос, чтобы он обрабатывал кавычки для вас: 'SQL.Text: = 'UPDATE MYTABLE SET MYFIELD = MYFIELD +: MyText + CAST (FOR_DATE AS VARCHAR (30))'; ParamByName ('MyText'). AsString: = «быстрая коричневая лиса перепрыгнула через ленивую собаку»; ' –

+0

@RemyLebeau: Привет реми, включенный в вопрос, thx – whosrdaddy