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

Вниз

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

 
Andrushk   (2002-12-23 17:05) [0]

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

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


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

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


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

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


 
Val ©   (2002-12-23 19:46) [3]

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


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

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


 
DenK_vrtz ©   (2002-12-24 09:20) [5]

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

Удачи.


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

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


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

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


 
AlexGreG ©   (2002-12-25 11:38) [8]

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


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

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


 
Andrushk   (2002-12-25 12:15) [10]

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


 
id_privin ©   (2002-12-25 13:47) [11]

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


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

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

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


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

Попробуй так

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-26 10:52) [14]

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

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

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


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

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

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

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


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

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


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

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


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

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

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


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

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

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


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

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

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



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

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

Наверх




Память: 0.51 MB
Время: 0.012 c
3-86673
Kurt_
2003-01-08 13:06
2003.01.27
Вопрос по DBComboBox-у! проблема в следующем: когда быстро переме


14-87051
Makhanev A.S.
2003-01-11 13:49
2003.01.27
Сколько раз можно перезаписывать инфу на CD-RW -шку?


4-87197
Василий2
2002-12-10 18:42
2003.01.27
Как это самое... удалять из файла???


3-86624
LP
2003-01-10 11:03
2003.01.27
Проблема с TDBGrid


14-87111
Anatoly Podgoretsky
2003-01-01 01:27
2003.01.27
Именинники 1 января