Я добавил ваше определение sppl_ParamTest
в свой Sql Server 2014 и выполнил следующий код после минимальной настройки FDConnection, чтобы указать его на сервер и базу данных на нем. FDQuery только что появился на палитре компонентов, и установлено только его свойство Connection.
procedure TForm1.FormCreate(Sender: TObject);
begin
FDQuery1.SQL.Text := 'sppl_ParamTest';
FDQuery1.Open;
Caption := FDQuery1.Fields[0].AsString;
end;
В заголовке формы отображается 666
, как и ожидалось.
Частичный DFM (имя пользователя и пароль опущены):
object FDConnection1: TFDConnection
Params.Strings = (
'Database=MATest'
'Server=MAT410\ss2014'
'DriverID=MSSQL')
LoginPrompt = False
Left = 32
Top = 16
end
object FDQuery1: TFDQuery
Connection = FDConnection1
Left = 104
Top = 16
end
Обновление Я думаю, что проблема ОП, скорее всего, возникает из-за недостатка в реализации TFDCommand и TFDStoredProc. выполнение
sppl_ParamTest по умолчанию
в Sql Server Management Studio правильно возвращает
666
То же самое можно сказать и об открытии FDQuery с sppl_ParamTest default
(или просто sppl_ParamTest
) в качестве текста команды.
Однако, если для CommandText TFDCommand установлено то же значение, вызов Execute
приводит к этой ошибке.
Не удалось найти хранимую процедуру «MATest.dbo.sspl_ParamTest по умолчанию»
Равным образом, делая
FDStoredProc1.ParamByName('@ID').Value := 'default';
(неудивительно) провоцирует ошибку
Не удалось преобразовать вариант типа (String) в тип (Integer)
при вызове FDStoredProc.Open
и до сих пор сопротивлялся моим попыткам установить тип параметра, который будет принимать «по умолчанию» и правильно выполнять sp.
Кроме того, попытки вызвать FDCommand с EmptyParam
в качестве значения входного параметра не возвращают значение 666.
person
MartynA
schedule
24.01.2017