Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выполнение процедуры [D7, MSSQL]


NigthSkif ©   (2006-12-19 05:50:00) 

Доброе время суток. Скажите, что не так. Есть сторапроцедура

CREATE PROCEDURE qqq(@Fam varchar(20), @id_Nam int, @id_Otch int, @id_Dolgn int, @id_Work int, @Comment Comment, @DBirth varchar(10), @Rez int output)
AS
 Select @Rez=0
 if exists (Select * From dbSotrud
     Where (Fam=RTrim(@Fam) and
    id_Nam=@id_Nam and
    id_Otch=@id_Otch and
    id_Dolgn=@id_Dolgn and
    id_Work=@id_Work and
           Comment=RTrim(@Comment) and
    DBirth=@DBirth))
    begin
       Select @Rez=1
    end

Вызываю ее следующим образом

function Prov: Boolean;
begin
  with DMsp.spdbSotrud_prov do
    begin
       ParamByName('@DBirth').AsString := edtDBirth.Text;
       ParamByName('@Fam').AsString := edtFam.Text;
       ParamByName('@id_Nam').AsInteger := dblcbName.KeyValue;
       ParamByName('@id_Otch').AsInteger := dblcbOtch.KeyValue;
       ParamByName('@id_Dolgn').AsInteger := dblcbDolgnost.KeyValue;
       ParamByName('@id_Work').AsInteger := dblcbWork.KeyValue;
       if mmComment.Text = '' then
         ParamByName('@Comment').Clear
       else
         ParamByName('@Comment').Value := mmComment.Text;

       Open;
       if ParamByName('@Rez').AsInteger = 1 then
         Result := True
       else
         Result := False;
       Close;
    end;
end;

Вываливается сообщение "Error creating cursor handle" когда я открываю стору.


User_Name   (2006-12-19 16:39:00) [1]

2 Ega23 ©   (19.12.06 16:00) [13]
Да, ведь это автору нужно, видно не совсем стилистически правильно написал :(


Ega23   (2006-12-19 16:00:00) [2]


> Никому ничего я не предлагаю.


А, [10] это автору было? Тогда сорри.


User_Name   (2006-12-19 15:36:00) [3]

Никому ничего я не предлагаю.


Ega23   (2006-12-19 15:31:00) [4]


> А что в TStoredProc  %(  (видно что-то я не понимаю) нету
> ParamType ptInputOutput. И нельзя сделать :
>
> execproc;
>
> И посмотреть что там в
>
> ParamByName('@Rez').AsInteger


пардон, ты это МНЕ предлагаешь проделать?


User_Name   (2006-12-19 15:19:00) [5]

А что в TStoredProc  %(  (видно что-то я не понимаю) нету ParamType ptInputOutput. И нельзя сделать :

execproc;

И посмотреть что там в

ParamByName('@Rez').AsInteger


sniknik   (2006-12-19 15:07:00) [6]

> Ну дык между строк надо читать :)
между строк все пишут абсолютно непогрешимый и правильный код... только не у всех он почемуто работает.


Ega23   (2006-12-19 14:56:00) [7]


> @Rez int output


Это в SP. А в TStoredProc - как?


User_Name   (2006-12-19 14:54:00) [8]

//offtop
Ну дык между строк надо читать :)
//end offtop

@Rez int output


Ega23   (2006-12-19 14:31:00) [9]


> ведь @Rez определен как output.


Да. Вот только я чё-то не вижу как :Rez определён...


User_Name   (2006-12-19 14:28:00) [10]

Не пойму, ЗАЧЕМ здесь open нужен :( ведь @Rez определен как output. Ну и делай exec и считывай после этого этот параметр.


Ega23   (2006-12-19 09:58:00) [11]

А вообще - это ужасно. Почему Fam=RTrim(@Fam),  а не Like ?


Ega23   (2006-12-19 09:56:00) [12]


> Это не работает. Должно быть именно Open.


Не работает твоя процедура. Метод Open подразумевает возвращения на клиент RecordSet (можно даже пустой).
RecordSet на клиент возвращается ТОЛЬКО командой Select.
Команды Insert, Update и Delete RecordSet на клиент НЕ ВОЗВРАЩАЮТ.

Чтобы твоя SP заработала, тебе в конце надо добавить строку

CREATE PROCEDURE qqq(@Fam varchar(20), @id_Nam int, @id_Otch int, @id_Dolgn int, @id_Work int, @Comment Comment, @DBirth varchar(10), @Rez int output)
AS
Select @Rez=0
if exists (Select * From dbSotrud
    Where (Fam=RTrim(@Fam) and
   id_Nam=@id_Nam and
   id_Otch=@id_Otch and
   id_Dolgn=@id_Dolgn and
   id_Work=@id_Work and
          Comment=RTrim(@Comment) and
   DBirth=@DBirth))
   begin
      Select @Rez=1
   end
 Select Result=@Rez


Также, почему-то, не вижу Return


NigthSkif   (2006-12-19 09:23:00) [13]

Это не работает. Должно быть именно Open.


Кщд   (2006-12-19 08:13:00) [14]

exec


Наверх

Титульная страница Поиск, карта сайта Написать письмо