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