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

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

Как из Oracl-овой процедуры вернуть в Delphi набор данных? [D7]


Andrushk ©   (2002-12-23 17:05:00) 

Процедура выбирает набор данных состоящий из нескольких строк и столбцов, то, что она выбрала мне надо отображать в DBGrid"е.

Сделал у процедуры out параметр типа CURSOR. У компонента TSQLStoredProc в списке параметров он появился, но что мне делать дальше, как теперь Это впендюрить в Grid. Или я иду неверным путем?


Andrushk   (2003-01-07 13:56:00) [1]

А как мне теперь передать в процедуру параметр?
Процедура описана так:
PROCEDURE GetProc(r1 IN OUT Pkpackage.RetProc, doc_id IN NUMBER)

В Delphi не получается в ClientDataset добавить список полей курсора.


Andrushk   (2003-01-07 12:14:00) [2]

>Vovkin
Ёкарный бабай, а ведь пробовал так, не получалось (не помню уже что за ошибка была), прочитал твой ответ (и DPashin) - думаю дай еще разок попробую все неспеша проделать - получилось.

Всем спасибо!!!


DPashin   (2002-12-28 17:49:00) [3]

Попробуй сделать то, что посоветовал Ustas (26.12.02 03:48),
но использовать не TStoredProc, f TQuery:

query1.SQL.Text:="begin Pkpackage.GetProc(r1);end;";
query1.Params[0].DataType:=ftCursor;


Vovkin   (2002-12-28 16:02:00) [4]

Operation not allowed on a unidirectional dataset - ошибка вылезает, когда пытаешся всунуть в грид датасет с типом курсора ForwardOnly, понятно дело грид с таким курсором работать не сможет, нужно либо запихать этот курсор например в ClientDataset или что-то решать


Andrushk   (2002-12-28 15:27:00) [5]

Ну народ, кто отвечал на вопросы, вы же не на голом месте советы давали, пришлите примерчик плиз, не выходит нефига...


Andrushk   (2002-12-27 10:01:00) [6]

Народ, у кого вот все работает, пришлите небольшую програмулину (ну прям только форма, StoredProc, DataSource, Grid, ну и что еще надо для работы) и скрипт, делающий процедуру. (Delphi 7, Oracle 8.1.7.)

Я не знаю, мне советы не помогли, у меня ничего не работает

Неродные компоненты мне использовать нельзя


Andrushk   (2002-12-26 10:52:00) [7]

>Ustas
Я попробовал, опять та же ошибка: Operation not allowed on a unidirectional dataset

Может ты еще у StoredProc какие-то специфические настройки используешь, хотя там свойств-то раз и обчелся...

И еще, ты к StoredProc сразу привязываешь DataSource, а к нему DBGrid? Никаких посредников нет?


Ustas   (2002-12-26 03:48:00) [8]

Попробуй так

CREATE OR REPLACE PACKAGE Pkpackage IS
TYPE RetProc IS REF CURSOR RETURN <schema>.<table>%rowtype;

PROCEDURE GetProc(r1 IN OUT RetProc);
END Pkpackage;
/
CREATE OR REPLACE PACKAGE BODY Pkpackage AS
PROCEDURE GetProc(r1 IN OUT RetProc)
AS BEGIN
OPEN r1 FOR SELECT * FROM <schema>.<table>;
END GetProc;
END Pkpackage;
/

CREATE OR REPLACE PROCEDURE GetProc(r1 IN OUT Pkpackage.RetProc)
AS BEGIN
OPEN r1 FOR SELECT * FROM <schema>.<table>;
END GetProc;

У меня это дело работало


Andrushk   (2002-12-25 14:29:00) [9]

а можно подробнее, еще лучше пример
сейчас я объявляю курсор: TYPE curstype IS REF CURSOR; - его и возвращаю: PROCEDURE test(result out curstype);

- в рез-те возникает ошибка, описанная выше


id_privin   (2002-12-25 13:47:00) [10]

Объявляешь табличный тип. И Возвращаешь его из процедуры. А потом просто его селектишь. Если проблемы можно сказать
cast as table


Andrushk   (2002-12-25 12:15:00) [11]

а вообще odac не подходит, я так понял ее компоненты с SQLConnection работать не захотят, и придется Session вытаскивать, а у меня все на SQLConnection сделано


Andrushk   (2002-12-25 11:49:00) [12]

>AlexGreG
Нет я не забыл :-)) не совсем дурак, в смысле дурак, но не совсем :-))
Когда DataSource"у присваиваешь DataSet, возникает ошибка:
Operation not allowed on a unidirectional dataset


AlexGreG   (2002-12-25 11:38:00) [13]

Может ты забыл связать хранимую процедуру с гридом?
Это делается через TDataSource


roottim   (2002-12-25 11:34:00) [14]

http://connect.to/oralab
описание на http://www.crlab.com/odac


Andrushk   (2002-12-25 11:26:00) [15]

>dimis
что за odac такой? и где его взять
>DenK_vrtz
Я все так и делал, разве что имя параметра у меня не result было, попробовал с result - всеравно не выходит


DenK_vrtz   (2002-12-24 09:20:00) [16]

На серваке объявляешь ref cursor. В функции результат запроса "засовываешь" в это курсор.
В Делфе берешь StoredProc. Parametr name (Result) -> Parameter type - Result, Data type - Cursor.
И вперед делаешь open, не забыв "связать" StoredProc с DataSource, а DataSource с гридом!

Удачи.


dimis   (2002-12-24 08:36:00) [17]

используется видимо ref cursor
я работаю с ораклом через odac
там в OraQuery
пишу так
begin
MyProc(Myinparam,MyOutRef);
end;
получается обычный DataSet с полями из MyOutRef.
будет ли работать через BDE не знаю


Val   (2002-12-23 19:46:00) [18]

>Serginio (23.12.02 18:58)
неверно, покрайней до Oracle 8.1.7 вы не получите так НД
>Andrushk (23.12.02 17:05)
..но что мне делать дальше..
запускать ее на выполнение, как минимум


Serginio   (2002-12-23 18:58:00) [19]

Обычно из процедур возвращающие данные
Обычный Query Select * From название процедуры


Andrushk   (2002-12-23 18:47:00) [20]

Чувакииии, ну помогите кто-нибудь!!! ведь так наверняка можно делать!!!


Наверх

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