Форум: "Базы";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
ВнизПроблема с вызовом хранимых процедур Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.014 c