![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как из 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]Чувакииии, ну помогите кто-нибудь!!! ведь так наверняка можно делать!!!