Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Использование в Delphi хранимой процедуры SQL


Автор: anya87 9.6.2007, 09:02
Создала хранимую процедуру на SQL сервере. Кто знает полный алгоритм подключения через компонент ADOStoredProcedure к необходимой процедуре на Delphi? И какой код программы (можно на каком-нибудь примере)? Ещё при подключении через этот компонент возникает ошибка вроде: Stored Procedure ecpected parameter @Kat (в моём случае). Что это за ошибка и как её исправить?!! 
Параметры задала в программе, синтаксис самой процедуры правильный...  smile 

Автор: ils 9.6.2007, 11:01
Примерно так

Код

var
  sp: TADOStoredProc;
begin
  sp := TADOStoredProc.Create(nil);
  try
    sp.Connection := MyConnection; // Настроенное соединение
    sp.ProcedureName := StoredProcName;

    sp.Parameters.ParamByName('@param1').Value := 'Значение параметра';
    sp.Parameters.ParamByName('@param2').Value := null;
// и т.д.

    sp.Open; // или sp.Exec если не возвращается набор данных

// тут обрабатываем данные
  finally
    sp.Free;
  end
end;

Автор: Medved 14.9.2009, 07:10
Код не рабочий. 

Автор: Frees 14.9.2009, 07:27
Цитата(Medved @  14.9.2009,  10:10 Найти цитируемый пост)
Код не рабочий. 

голословен!

какая ошибка? что не так делается?

Автор: Medved 14.9.2009, 08:13
Цитата(Frees @  14.9.2009,  10:27 Найти цитируемый пост)
голословен!

какая ошибка? что не так делается? 


А ты соседнюю тему почитай, там я написал почему: http://forum.vingrad.ru/forum/topic-272441.html

В этом коде объект TADOStoredProc  создается программно:
Код

var
  sp: TADOStoredProc;
begin
  sp := TADOStoredProc.Create(nil);


А используется этот экземпляр объекта, так, как будто-бы он создан в режиме Design Mode, т.е. когда компонент TADOStoredProc  добавлен на форму. 
Код

sp.Parameters.ParamByName('@param1').Value := 'Значение параметра';


Метод ParamByName применяется только к уже ранее созданным параметрам (программно, или мышкой). Ну оно и понятно. Логично, что к параметру можно обратиться только к тому, который существует. 

На этапе компиляции данная ошибка не обнаруживается. Если скомпилировать и запустить этот код, то при выполнении его, Delphi ругается на то что такого параметра не существует.

Чтобы программно использовать TADOStoredProc, необходимо вручную задавать параметры, например так:
Код

with ADOStoredProc1.AddParameter do begin
  Name := 'NameParam1';
  DataType := ftString;
  Direction := pdInput;
  Size := 50;
  Value := 'Значение1';
end;
    


или так:

Код

ADOStoredProc1.CreateParameter('NameParam1', ftString, pdInput, 50, 'Значение1');


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)