Пользователь столкнулся с проблемой, когда при добавлении фильтров в SQL-запрос таблица DBGrid в программе на Delphi становилась пустой. Проблема была в том, что при составлении запроса использовалось конкатенация строк, что является небезопасным и может приводить к ошибкам. В качестве решения было предложено использовать параметризованные запросы, которые не только устраняют риск SQL-инъекций, но и упрощают отладку и поддержку кода.
Параметризация запросов в Delphi
Параметризация запросов позволяет заменить конкатенацию строк на передачу значений параметров, что делает запрос более безопасным и удобным в обслуживании. В Delphi для работы с параметризованными запросами обычно используются компоненты TAdoQuery и TDataSetProvider.
Пример кода
procedure TForm1.ApplyFilter(MinStars, MaxStars: Integer);
const
FilterSql = 'SELECT * FROM Hotels WHERE Stars BETWEEN :Min AND :Max';
begin
if AdoQuery1.Active then
AdoQuery1.Close;
AdoQuery1.SQL.Text := FilterSql;
AdoQuery1.Parameters.Clear; // Очищаем список параметров
AdoQuery1.Parameters.ParamByName('Min').Value := MinStars;
AdoQuery1.Parameters.ParamByName('Max').Value := MaxStars;
AdoQuery1.Parameters.ParamByName('Min').DataType := ftInteger;
AdoQuery1.Parameters.ParamByName('Max').DataType := ftInteger;
AdoQuery1.Prepared := True;
AdoQuery1.Open;
end;
Пошаговое руководство
Создание таблицы и заполнение данными:
Создайте таблицу Hotels с необходимыми полями.
Добавьте несколько записей с различным количеством звезд.
Использование параметризованного запроса:
Определите константу FilterSql с параметрами :Min и :Max.
Очистите список параметров компонента AdoQuery1.
Установите значения параметров Min и Max.
Установите свойство Prepared в True для подготовки запроса.
Откройте запрос, чтобы выполнить фильтрацию и отобразить результаты в DBGrid.
Производительность: Сервер может кэшировать подготовленные запросы.
Удобство отладки: Легче отслеживать и изменять параметры запроса.
Заключение
Использование параметризованных запросов в Delphi - это эффективный способ предотвращения пустых таблиц и улучшения безопасности и производительности приложений. Обязательно учитывайте этот подход при разработке новых проектов и при обновлении существующего кода.
Пользователь столкнулся с проблемой пустых результатов запроса в Delphi из-за небезопасной конкатенации строк при составлении SQL-запросов и ищет решение в использовании параметризации для предотвращения возможных ошибок, включая SQL-инъекции.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.