Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.15;
Скачать: CL | DM;

Вниз

Хранимая процедура....   Найти похожие ветки 

 
_Narayan_   (2003-04-24 17:04) [0]

Хранимая процедура возвращает множество значений в один выходной параметр. Как мне каждое значение (по очереди) обработать ?


 
Соловьев ©   (2003-04-24 17:06) [1]

for
select
...
do
begin
...
suspend;
end


 
Соловьев ©   (2003-04-24 17:10) [2]


> Как мне каждое значение (по очереди) обработать ?


while not Eof do
begin
...
Next;
end;


 
_Narayan_   (2003-04-24 17:23) [3]

2 Соловьев

Чтобы использовать Eof нужно сначала воспользоваться методом Open (Active:=True), но если применять его, появляется ошибка типа "Open" - для "Query", а для "StoredProc" - "ExeProc".

И ваще, до этого я и сам додумался ;-)

Короче не то


 
Соловьев ©   (2003-04-24 17:26) [4]


> ошибка типа "Open" - для "Query", а для "StoredProc" - "ExeProc".

ты что-то не то делаешь. SP - Open тоже есть метод, если возвращает НД.


 
Doomalka   (2003-04-24 17:27) [5]

2 _Narayan_ (24.04.03 17:23)
если ошибка то может она в ХП?


 
Zacho ©   (2003-04-24 17:31) [6]

А в чем проблемы-то ? В FOR SELECT .. DO .. в ХП или в SELECT .. FROM MY_STORED_PROC на клиенте ?


 
kravchuk ©   (2003-04-24 17:35) [7]

_Narayan_ (24.04.03 17:23)
просто там надо сделать select из процедуры и не будет ошибка типа "Open" - для "Query", а для "StoredProc" - "ExeProc".


 
_Narayan_   (2003-04-24 17:49) [8]

2 Doomalka
Молодец, блеснула интеллектом

2 Zacho

Ну хорошо, в таком случае как должна выглядеть такая процедура

CREATE PROCEDURE To_GroupLUID (sSp Char(128), sFo char(32), sYear Integer, sNum Integer, sParamCount Integer)
RETURNS (GroupLUID Integer)

AS

DECLARE VARIABLE P0 Integer;
DECLARE VARIABLE P1 Integer;

BEGIN

select LUID from SPECIALNOSTI where NAME=:sSp
INTO :P0;
select LUID from FORMS where NAME=:sFo
INTO :P1;

If (sParamCount=4) Then select LUID from Groups where Num=:sNum and InComeYear=:sYear and Specialnost=:P0 and Forma=:P1 INTO :GroupLUID;
If (sParamCount=3) Then select LUID from Groups where InComeYear=:sYear and Specialnost=:P0 and Forma=:P1 INTO :GroupLUID;
If (sParamCount=2) Then select LUID from Groups where Specialnost=:P0 and Forma=:P1 INTO :GroupLUID;
If (sParamCount=1) Then select LUID from Groups where Specialnost=:P0 INTO :GroupLUID;
If (sParamCount=0) Then select LUID from Groups INTO :GroupLUID;

EXIT;
END !!


 
Соловьев ©   (2003-04-24 17:50) [9]


> Ну хорошо, в таком случае как должна выглядеть такая процедура

забыл

> Соловьев © (24.04.03 17:06)



 
Doomalka   (2003-04-24 17:52) [10]

2 _Narayan_ (24.04.03 17:49)
не вижу ни одного suspend....


 
Doomalka   (2003-04-24 17:56) [11]

2 _Narayan_ (24.04.03 17:49)
а вообще ты не заметил, что все у тебя спрашиваю где именно у тебя проблема? в ХП или в обрабоке значений....
судя по твоей процедуре именно в ХП....
если у тебя должно возвразаться несколько значений в одну переменную то смотри >Соловьев © (24.04.03 17:06)


 
_Narayan_   (2003-04-24 18:03) [12]

2 Doomalka
Мне помощь нужна, а не бессвязные реплики


 
Zacho ©   (2003-04-24 18:18) [13]


> _Narayan_ (24.04.03 17:49)

Ну откуда я знаю как она должна выглядеть ? Что ты хочешь получить ? Конкретно, в чем проблема ? В ХП для выборки одной записи используется SELECT .. INTO ... Для выборки и обработки набора записей - FOR SELECT .. INTO .. DO .. Почитай в документации про FOR SELECT DO и SUSPEND.


 
_Narayan_   (2003-04-24 19:50) [14]

Всё, разобрался.

Всем спасибо, без Вас не справился бы.


 
Zacho ©   (2003-04-24 20:03) [15]


> _Narayan_ (24.04.03 19:50)

Просто из любопытства, да и чтоб другие на те же грабли не наступали :) задам вопрос:
Все-таки, в чем была проблема ? В выборке набора записей в ХП или в получении их на клиенте ? Или вообще в чем-то другом ? И как решилась ?


 
_Narayan_   (2003-04-24 20:25) [16]

Вобщето и в выборке набора записей, и в получении их на клиенте.

А решилось просто: корректировка процедуры (ниже) плюс замена StoredProc на Query (что позволило без проблем использовать Eof)

CREATE PROCEDURE To_GroupLUID (sSp Char(128), sFo char(32), sYear Integer, sNum Integer, sParamCount Integer)
RETURNS (GroupLUID Integer)

AS

DECLARE VARIABLE P0 Integer;
DECLARE VARIABLE P1 Integer;

BEGIN

select LUID from SPECIALNOSTI where NAME=:sSp
INTO :P0;
select LUID from FORMS where NAME=:sFo
INTO :P1;

If (sParamCount=4) Then For select LUID from Groups where Num=:sNum and InComeYear=:sYear and Specialnost=:P0 and Forma=:P1 INTO :GroupLUID DO SUSPEND;
If (sParamCount=3) Then For select LUID from Groups where InComeYear=:sYear and Specialnost=:P0 and Forma=:P1 INTO :GroupLUID DO SUSPEND;
If (sParamCount=2) Then For select LUID from Groups where Specialnost=:P0 and Forma=:P1 INTO :GroupLUID DO SUSPEND;
If (sParamCount=1) Then For select LUID from Groups where Specialnost=:P0 INTO :GroupLUID DO SUSPEND;
If (sParamCount=0) Then For select LUID from Groups INTO :GroupLUID DO SUSPEND;

END !!


 
Zacho ©   (2003-04-24 20:55) [17]


> _Narayan_ (24.04.03 20:25)

Хочу дать небольшой совет, может пригодится :)
1.Не знаю, какими компонентами доступа ты пользуешся, но возникло подозрение, что BDE. Тогда совет: если возможно, переходи на что-нибудь более нормальное, типа IBX, FIBPlus или IBO - убережешся от многих проблем.
2. Если ты все-таки используешь IBX, то не стоит пользоваться TIBStoredProc и TIBQuery (впрочем, TIBQuery еще можно, если хорошо понимаешь ее возможности и ограничения). Для всего, что может потребоваться, достаточно TIBDataSet и TIBSQL, и возможных проблем будет меньше.
Удачи !



Страницы: 1 вся ветка

Текущий архив: 2003.05.15;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
8-46844
vidiv
2003-02-03 05:22
2003.05.15
Полупрозрачная окружность


3-46640
softmaster
2003-04-15 23:03
2003.05.15
логический тип


3-46623
Rise
2003-04-24 11:50
2003.05.15
Query.RequetLive DBgrid и Access


3-46596
Wedos
2003-04-14 08:50
2003.05.15
Задание min и max в DbChart


6-46865
RUS1
2003-03-17 14:30
2003.05.15
господа где качнуть Indy компоненты посвежее и нахаляву??