Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
_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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.007 c
1-46833
Yanis
2003-04-30 15:44
2003.05.15
Помогите с OpenDialog!!!!!!!!!!!!!!!!


1-46776
Димыч
2003-05-01 13:35
2003.05.15
Прочитать чужой Memo


6-46864
R@nger
2003-03-15 10:42
2003.05.15
Frames в WebBrowser


8-46851
Eugeny (r66)
2003-02-05 10:43
2003.05.15
bmp(24bit) -> gif(4bit) (+)


1-46809
KSergey
2003-05-02 17:20
2003.05.15
Про PopUpMenu и Actions





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский