Как соединить Delphi FireDA C код запроса во время разработки - PullRequest
0 голосов
/ 05 мая 2020

Я получаю это сообщение об ошибке синтаксиса:

[FireDAC][Phys][SQLite] ERROR: near "ON": syntax ERROR

В моем коде здесь:

  qryItems.Active := False;
  qryItems.ResourceOptions.ParamCreate := False;
  qryItems.SQL.Text := 'SELECT category.name, item.name, item.description' +
                       'FROM item ' +
                       'JOIN category ON item.category_id = category.list_id' +
                       'WHERE item.name = :searches OR :searches IS NULL' +
                       'ORDER BY category.name LIMIT 5';
  qryItems.ParamByName('searches').AsString := Format('%%%s%%',[edtSearch.Text]);
  qryItems.Active := True;
  qryItems.SQL.Clear;
  qryItems.ExecSQL;

Я без проблем попытался запустить код в редакторе запросов TFDQuery. Я вынужден разрезать запрос, чтобы избежать длинных текстовых нарушений с помощью этого синтаксиса «+» - надеюсь, это все еще практика.

Похоже, что с моим синтаксисом все в порядке. В противном случае я что-то здесь упускаю.

1 Ответ

4 голосов
/ 05 мая 2020

Строки SQL заканчиваются следующим образом (обратите внимание на JOIN, WHERE и ORDER, выделено для выделения ):

SELECT category.name, item.name, item.descriptionJOIN категория ON item.category_id = category.list_idWHERE item.name =: поиск ИЛИ: поиск IS NULLORDER BY category.name LIMIT 5

Вы можете установить SQL с несколькими строками, например:

  qryItems.SQL.Clear;
  qryItems.SQL.AddStrings(TArray<string>.Create(
      'SELECT category.name, item.name, item.description',
      'JOIN category ON item.category_id = category.list_id',
      'WHERE item.name = :searches OR :searches IS NULL',
      'ORDER BY category.name LIMIT 5'));

Возможно, объявив константу, моя улучшенная читаемость:

const
  cSQL: TArray<string> = [
    'SELECT category.name, item.name, item.description',
    'JOIN category ON item.category_id = category.list_id',
    'WHERE item.name = :searches OR :searches IS NULL',
    'ORDER BY category.name LIMIT 5'];
...
  qryItems.SQL.Clear;
  qryItems.SQL.AddStrings(cSQL);
...