Noob ie проблема с использованием параметров в пределах SQL on Delphi 10.3 - PullRequest
1 голос
/ 23 января 2020

Я уверен, что я делаю что-то глупое здесь, но здесь идет - извините за мою нелюбовь.

Я экспериментирую с Delphi, чтобы попытаться написать простое приложение. В настоящее время я использую SQLlite с демонстрационной базой данных Chinook, в которой перечислены несколько исполнителей и альбомов.

Мне удалось подключить ComboBox к полю в БД, чтобы выбрать имя исполнителя.

Затем я хочу заполнить сетку альбомов исполнителей, используя выделение ComboBox в качестве параметра в этом утверждении:

select * from albums JOIN artists ON albums.artistid = artists.artistid WHERE artists.name=:selection

Если я заполнил «выделение» вручную на вкладке параметров объекта запроса, он работает нормально.

Но мне нужно: выбор должен исходить из ComboBox, для которого я думаю, что мне нужно сделать что-то вроде:

FDQuery1.ParamByName('selection').AsString := 'ComboBox1.text'

Но я не могу ради своей жизни выяснить, где я бы положил этот бит кода? Документы, которые я читаю, говорят: чтобы поместить маркер параметра в текст SQL, используйте синтаксис:. Затем назначьте соответствующие значения, используя коллекцию Params.

Если я разверну бит Params под запросом, я не увижу, где его можно разместить. Создание нового, похоже, тоже не дает мне возможности сделать это. Если я переключусь в режим просмотра кода, я не увижу раздел с моим запросом SQL, в котором он будет добавлен вручную. Может быть, что-то особенное?

Извинения, если это действительно глупый вопрос. Просто начинаю с Delphi!

Ответы [ 2 ]

0 голосов
/ 23 января 2020

У меня обычно есть процедура «BuildQuery» в форме, которую я вызываю, когда форма первоначально отображается (FormShow), или когда меняются выпадающие списки (OnSelect) или нажимается кнопка «Поиск».

В этой процедуре очистите и повторно добавьте SQL к запросу, он автоматически обнаружит и добавит параметры при go.

Затем сделайте, как вы сделали, но без одинарных кавычек, затем откройте Ваш запрос.

0 голосов
/ 23 января 2020

Событие OnSelect в выпадающем списке является одним местом для обновления запроса.

procedure TForm1.ComboBox1Select(Sender: TObject);
begin
  FDQuery1.ParamByName('selection').AsString := ComboBox1.Text;
  FDQuery1.Open();
end;
...