2015-02-19 3 views
0

просто хотите запустить инструкцию SQL, которая принимает буквы (буквы), введенные в текстовое поле, и возвращает результаты, в которых имена книг имеют одну и ту же первую букву. Например. если ввести H, тогда будут возвращены такие книги, как «Счастливые дни», «Небеса», «Надеяться на завтра». Вот что я использовал, но я не получаю никаких результатов в моем DBgrid. Текстовое поле, в которое введена буква, - edtBookTitle.text.SQL с параметром и подстановочным знаком

qbook.SQL.Text:='SELECT BookID,BookTitle FROM Book WHERE BookTitle LIKE CONCAT(edtBookTitle.text,"%")'; 
+0

Примените вашу рекомендацию (см. Выше). Получил сообщение «Неизвестный столбец« edtBookTitle.text »в разделе« where ». Не знаю, почему это происходит. Мне пришлось использовать речевые метки «» вместо «». – user3396486

ответ

2

Неправильный код LIKE. Он должен быть

SELECT .... WHERE BookTitle LIKE CONCAT(edtBookTitle.text, '%') 

Вы ВГ голой % там, что в MySQL будет арифметическим оператор по модулю, отсутствует операнд. Таким образом, ваш запрос является синтаксической ошибкой.

+0

Пробовал это, но он обрабатывает edtBookTitle.text как столбец. – user3396486

+0

Да, потому что так оно и было в исходном запросе. если это должно быть переменная или что-то из вашего кода delphi, тогда вам нужно построить ее в строке запроса, чтобы начать с 'query =" SELECT ... LIKE CONCAT ("+ edtBookTitle.text +", '%') 'и т. д. ... помните: sql - это всего лишь текст до тех пор, пока он не достигнет сервера БД. Вы пишете запрос, но он по-прежнему остается текстовым только в том, что касается вашего языка программирования. –

0
SELECT * FROM dbo WHERE someColumn LIKE 'h%'; 

Возможно, вам потребуется объединить дикую карту в конце вашего запроса, она должна быть в кавычках.

-1

Это вопрос возиться с апострофами.

qbook.SQL.Text:='SELECT BookID,BookTitle FROM Book WHERE BookTitle LIKE CONCAT("'+edtBookTitle.text+'%")'; 
qbook.open; 
+0

Это создает' CONCAT ("text%")) ', который не объединяет две строки. Вместо этого используйте' CONCAT («+ ​​edtBookTitle.Text +», «%»). И будьте осторожны, если 'edtBookTitle.Text' уже содержит цитаты в нем, он сломает SQL. Для этого используйте 'QuotedStr()' или параметризованный запрос для учетной записи. –

+0

минус один: ошибка SQL-инъекции – Johan