это список всех возможных значений

рываюTFDConnection для MS SQL Server с параметрами:

DriverID=MSSQL
Password=test
User_Name=test
Server=VS2003-2008
Database=test
Single Connection=TRUE
Max Cursors=256
USE OLEDB=TRUE

Затем я создаюTFDQuery (во время выполнения), установите его соединение с вышеуказанным, заполните его параметризованным INSERT-запросом:

insert into TT_ACT (TT_ACT_ID,TT_PARENT_ID,TT_FROMDATE,TT_TODATE,TT_NAME,TT_NR,TT_CODE,TT_GROUP...)
values (:TT_ACT_ID,:TT_PARENT_ID,:TT_FROMDATE,:TT_TODATE,:TT_NAME,:TT_NR,:TT_CODE,:TT_GROUP,...)

Затем я вызываю Prepare для запроса и получаю:

[FireDAC][Phys][MSSQL]-335 Parameter [TT_ACT_ID] data type is unknown.
Hint: Specify TFDParam.DataType or Assign TFDParam.Value before Prepare/Execute call

Если я делаю то же самое для базы данных FireBird, никаких проблем не возникает.
Я думаю, это как-то связано с использованием OLEDB. На машине нет собственного клиента MS SQL.
Здесь нетFDPhysMSSQLDriverLink в модуле данных, гдеTFDConnection проживает, но добавление одного не имеет значения.
Таблица TT_ACT существует.

Что я забыл сделать эту работу?

 Jan Doggen26 сент. 2017 г., 16:25
@Tanner. Я не; Я позволяюПодготовить понять это
 Tanner26 сент. 2017 г., 16:19
это ссылка / пример c # за то, что я ожидал увидеть эквивалентный кусок кода.command.Parameters.Add("@ID", SqlDbType.Int);
 Tanner26 сент. 2017 г., 16:14
как вы настраиваете параметры? Кажется, ошибка говорит о том, что вы не указали тип данных для своих параметров, но не показали код установки параметров.
 Victoria26 сент. 2017 г., 16:40
Я буду следовать рекомендации от помощи«Рекомендуется настроить параметры перед вызовом Prepare».
 Victoria26 сент. 2017 г., 16:38
Firebird описывает так называемыеXSQLVAR переменные, когда команда подготовлена ​​(они анализируют команду и возвращают набор того, что необходимо), в то время как с ODBC вы должны явно запросить описания параметров для подготовленной команды (вызываяSQLDescribeParam) что не происходит в FireDAC. Но я бы не стал воспринимать это как проблему, потому что, в конце концов, именно разработчик заполняет коллекцию параметров, и они должны знать, что они делают (какие типы данных они используют и какие значения они заполняют). Если он готовится, ничего не изменится.

Ответы на вопрос(2)

Установите каждый из ваших параметровТип данных собственности, а затем вы можете позвонитьПодготовить то есть:

  qry.ParamByName('foo').DataType := TFieldType.ftString;
  qry.ParamByName('bar').DataType := TFieldType.ftInteger;
  qry.Prepare;

DataType свойство типаData.DB.TFieldType, Вот это список всех возможных значений

Решение Вопроса

Подготовить до определения параметров (их типы данных полностью указаны). Вы ничего не пропустили, кроме этой заметки из справки:

Рекомендуется настроить параметры доПодготовить вызов.

Для распространенных драйверов ODBC (вы все еще общаетесь с драйвером ODBC, независимо от того, используют ли они OLE DB для связи с СУБД внутри), FireDAC не определяет типы данных параметров для подготовленной команды. Вместо этого он подготавливает оператор команды на целевой СУБД и пытается связать существующие изParams коллекция. Вот такПодготовить Метод реализован (Токио).

ODBC API обеспечиваетSQLDescribeParam функция для получения сведений о параметре для подготовленной команды, но FireDAC нигде не использует его (в настоящее время). Вместо этого он оставляет сборку параметров вручную. Что не так, потому что, в конце концов, именно разработчик должен знать, какое значение назначить определенному параметру команды, чтобы узнать этот тип значения.

 Jan Doggen27 сент. 2017 г., 17:00
Хорошо, теперь я настроил все параметры правильно, затем вызвал Prepare. Это работает.

Ваш ответ на вопрос