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

Вниз

Проблема с вызовом хранимых процедур   Найти похожие ветки 

 
Goida ©   (2003-11-20 22:24) [0]

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

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

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

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


 
Johnmen ©   (2003-11-20 23:36) [1]

>...неправильное количество параметров

Ну да. А где же здесь параметры то ???

>Прямо не знаю что и делать.

Может стоит сделать над собой минимальное усилие и посмотреть наконец в документацию ?


 
Goida ©   (2003-11-21 10:38) [2]

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

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


 
Johnmen ©   (2003-11-21 10:43) [3]

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

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

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

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


 
aVast ©   (2003-11-21 10:48) [4]

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


 
paul_k ©   (2003-11-21 11:29) [5]

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


 
Goida ©   (2003-11-21 22:31) [6]

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

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

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


 
Johnmen ©   (2003-11-21 23:14) [7]

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


 
Goida ©   (2003-11-22 21:15) [8]

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


 
Vlad ©   (2003-11-22 21:24) [9]

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


 
Goida ©   (2003-11-22 21:35) [10]

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

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


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

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


 
Goida ©   (2003-11-22 21:58) [12]

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


 
Johnmen ©   (2003-11-22 23:51) [13]

>Goida © (22.11.03 21:58)

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


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

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


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


 
Akni ©   (2003-11-24 11:43) [15]

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

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-25 06:59) [16]

> 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"

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


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

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


 
Akni ©   (2003-11-25 11:50) [18]

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

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


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

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


 
Akni ©   (2003-11-26 12:12) [20]

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


 
Gold   (2003-12-09 12:58) [21]

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



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

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

Наверх




Память: 0.51 MB
Время: 0.028 c
1-11989
z.Evgen
2003-12-19 08:25
2004.01.05
Form в стиле XP


14-12094
stud
2003-12-11 10:49
2004.01.05
станки с чпу


7-12173
Dima_dvp
2003-10-23 03:38
2004.01.05
Global HOOK без DLL.. Это как? Или вообще ни хук?


7-12181
Evgeniy_K
2003-10-24 07:06
2004.01.05
Отловить нажатие клавиш в любом приложении


14-12158
McSimm
2003-12-12 10:55
2004.01.05
Самая короткая программа подсчета