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

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

Проблема с вызовом хранимых процедур [D7, SybaseAnywhere7]


Страницы:   1 2

Goida ©   (2003-11-20 22:24:00) 

Создал процедуру:

create procedure"ShowTableStudent" ( )
begin
select * from Student;
end

Пытаюсь ее вызвать с помощью StoredProc:
StoredProc.Open;
StoredProc.Close;
И при этом выдается сообщение, что неправильное количество параметров. Прямо не знаю что и делать.
Подскажите, кто знает в чем дело.

Заранее, СПАСИБО.


Gold   (2003-12-09 12:58:00) [1]

>>ALL
Уважаемые, и что же ни кто не знает??
Та же проблема.
>>Goida
Как процедура работает из Query


Akni   (2003-11-26 12:12:00) [2]

Попробуй тогда взять ADO-Компоненты, только что с ними попробовала - параметры в списке не появляются, процедура выполняется как положено.


Goida   (2003-11-25 19:15:00) [3]

> Akni ©
Процедура действительно без параметров. Но когда я ее выбираю из списка процедур в Design-Time, то в Params появляются, все-равно, два параметра с типом ptOutput.


Akni   (2003-11-25 11:50:00) [4]

А как параметры описаны?
В приведенном тобой примере вообще параметров быть не должно - входных в процедуре нет, а набор данных возвращается не в параметрах, а в StoredProc1.Fields. (надеюсь, что понятно выразилась)

З.Ы. В приведенном мной примере используется TStoredProcedure и соотв. доступ в ВД через BDE


Oleg_em   (2003-11-25 10:00:00) [5]

а зачем ваще использовать процедуры для получения списка ?
есть же вьюхи на случай если нужно получить данные из разных таблиц


Goida   (2003-11-25 06:59:00) [6]

> Akni ©
> вызов из Delphi будет выглядеть так:
> with StoredProc1 do
> begin
> StoredProcName:="Proc";
> Open;
> GetResults; // здесь возвращается набор данных
> end;

Все равно не работает :( Возвращает следующее при попытке открыть (Open):
General SQL error.
[Sybase][ODBC Driver][Adaptive Server Anywhere]Syntax error or access violation: Wrong number of parameters to function "Student_Show"

Вот так вот. И больше ничего. Что делать????? :-*


Akni   (2003-11-24 11:43:00) [7]

в твоем примере

create procedure "Proc" ()
result (Field1 char(50), Field2 integer)
begin
select Name, Age from Student;
end

вызов из Delphi будет выглядеть так:
with StoredProc1 do
begin
StoredProcName:="Proc";
Open;
GetResults; // здесь возвращается набор данных
end;


"пройтись" по набору данных можно след. образом:

var Row, Column,i : integer;
Arr: OLEVariant;

Arr := VarArrayCreate([1, StoredProc1.RecordCount, 1, StoredProc1.FieldCount], varVariant);
Row:=1;
StoredProc1.First;
while not StoredProc1.EOF do
begin
Column := 1;
for i := 0 to StoredProc1.FieldCount - 1 do
begin
Arr[Row, Column] := FieldToVariant(StoredProc1.Fields[i]);
Inc(Column);
end;
Inc(Row);
StoredProc1.Next;
end;


Goida   (2003-11-23 00:04:00) [8]

>Johnmen ©
Мне и нужен пример, чтобы знать чтоискать. На Сибэйсе знаю как писать процедуры возвращающие множество, но они не те, которые нужны:
create procedure "Proc" ()
result (Field1 char(50), Field2 integer)
begin
select Name, Age from Student;
end


Она работает только из Query :(


Johnmen   (2003-11-22 23:51:00) [9]

>Goida © (22.11.03 21:58)

Не разберешься. Для разных СУБД реализация различна.
Может стоит посмотреть наконец в документацию ? По конкретной реализации диалекта SQL для Сибэйса.


Goida   (2003-11-22 21:58:00) [10]

2Vlad ©
Мне все-равно. На любом, я разберусь.


Vlad   (2003-11-22 21:40:00) [11]

В SyBase не силен, не знаю :)


Goida   (2003-11-22 21:35:00) [12]

> Vlad ©
> Только сделай так чтобы твоя ХП возвращала курсор.

Для меня самое интересное - КАК? Я еще новичек БД. Маленький пример, пожалуйста.


Vlad   (2003-11-22 21:24:00) [13]

TStoredProc предназначена для работы с хранимыми процедурами, в т.ч. с курсорными.
Если ХП возвращает курсор, то работа с TStoredProc аналогична работе с TQuery.
Работай себе на здоровье. Только сделай так чтобы твоя ХП возвращала курсор.


Goida   (2003-11-22 21:15:00) [14]

А как на счет заливки процедурой грида?
Видел, что использовали для этого именно StoredProc, а не Query. Только никак не получается у меня.


Johnmen   (2003-11-21 23:14:00) [15]

Да, через TQuery. TStoredProc предназначена не для этого.
И еще. Приведеная процедура вообще ничего не возвращает...:)


Goida   (2003-11-21 22:31:00) [16]

To Johnmen
Извини.
Я ее и вызываю, как мне кажется, без параметров.

To paul_k
ShowTableStudent - я ее выбрал из выпадающего списка. Там не было ShowTableStudent;1

Всем
А как работать с процедурами выбора (те, которые возвращают множество)? Только через Query, или всё-таки можно через StoredProc. Через последнее мне никак не удалось пока.


paul_k   (2003-11-21 11:29:00) [17]

как у тебя процедура подцеплена?
ShowTableStudent;1
или просто
ShowTableStudent
?


aVast   (2003-11-21 10:48:00) [18]

to Goida © (21.11.03 10:38) [2]
а что твоя процедура должна делать?


Johnmen   (2003-11-21 10:43:00) [19]

>Вместо того, чтобы злорадствовать

Не надо приписывать мне то, чего я даже не думал делать !

>лучше бы ответил нормально :(

Так я ответил. Нет у тебя параметров...


Goida   (2003-11-21 10:38:00) [20]

Вместо того, чтобы злорадствовать, лучше бы ответил нормально :(

Параметров нет, я ее выбираю в StoredProc. Далее пытаюсь сделать StoredProc активным, но выдается сообщение, что неправильное кол-во актуальныч параметров :?


Страницы:   1 2

Наверх

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