Текущий архив: 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