IBStoredProc не выдает результатов
Есть у меня база Interbase, а в ней хранимая процедура. Когда ее запускаю в IBExpert - исправно выдает таблицу результатов. В Delphi кладу на форму IBStoredProc, Задаю все что надо, запускаю (ExecProc) - результатов нет!
Цитата: wanja
Есть у меня база Interbase, а в ней хранимая процедура. Когда ее запускаю в IBExpert - исправно выдает таблицу результатов. В Delphi кладу на форму IBStoredProc, Задаю все что надо, запускаю (ExecProc) - результатов нет!
а если сделать через
Код:
TIBQuery::SQL::Text := "SELECT FROM ProcedureName(Params)"
так выполнится?
Цитата: wanja
Есть у меня база Interbase, а в ней хранимая процедура. Когда ее запускаю в IBExpert - исправно выдает таблицу результатов. В Delphi кладу на форму IBStoredProc, Задаю все что надо, запускаю (ExecProc) - результатов нет!
Вызов ExecProc предназначен для хранимых процедур, которые не возвращают набор данных. Для процедур, возвращающих набор данных используй метод Open, либо Active:=true.
Пробовал. Говорит "Use ExecProc for Procedure. Use TQuery for Select procedures".
Цитата: wanja
Пробовал. Говорит "Use ExecProc for Procedure. Use TQuery for Select procedures".
Правильно говорит. Кидай TIBQuery, в свойстве SQL пиши:
Код:
select * from YourStoredProc(:param1, :param2, :param3)
далее "открыть" процедуру можно методом IBQuery1.Open или IBQuery1.Active:=True
Теперь говорит: Procedure unknown
код процедуры (определение ее в SQL) и код вызова можно глянуть?
Код:
ALTER PROCEDURE "Poisk_po_plany" (
"semestr" SMALLINT,
"kurs" SMALLINT,
"nazvanie_specialnosti" VARCHAR(255))
RETURNS (
"FIO_prepodavatelya" VARCHAR(255),
"nazvanie_predmeta" VARCHAR(255))
AS
DECLARE VARIABLE "id_specialnosti" INTEGER;
begin
FOR SELECT "ID_specialnosti"
FROM "specialnost"
where "specialnost"."nazvanie_specialnosti"=:"nazvanie_specialnosti"
INTO :"id_specialnosti"
DO
BEGIN
SUSPEND;
END
FOR SELECT "nazvanie_predmeta","FIO_prepodavatelya"
FROM "predmet", "plann", "prepodavatel"
where "plann"."kurs"=:"kurs" and "plann"."semestr"=:"semestr" and "plann"."ID_specialnosti"=:"id_specialnosti" and "predmet"."ID_predmeta"= "plann"."ID_predmeta" and "prepodavatel"."ID_prepodavatelya"= "plann"."ID_prepodavatelya"
order by "nazvanie_predmeta"
INTO :"nazvanie_predmeta", :"FIO_prepodavatelya"
DO
BEGIN
SUSPEND;
END
end
"semestr" SMALLINT,
"kurs" SMALLINT,
"nazvanie_specialnosti" VARCHAR(255))
RETURNS (
"FIO_prepodavatelya" VARCHAR(255),
"nazvanie_predmeta" VARCHAR(255))
AS
DECLARE VARIABLE "id_specialnosti" INTEGER;
begin
FOR SELECT "ID_specialnosti"
FROM "specialnost"
where "specialnost"."nazvanie_specialnosti"=:"nazvanie_specialnosti"
INTO :"id_specialnosti"
DO
BEGIN
SUSPEND;
END
FOR SELECT "nazvanie_predmeta","FIO_prepodavatelya"
FROM "predmet", "plann", "prepodavatel"
where "plann"."kurs"=:"kurs" and "plann"."semestr"=:"semestr" and "plann"."ID_specialnosti"=:"id_specialnosti" and "predmet"."ID_predmeta"= "plann"."ID_predmeta" and "prepodavatel"."ID_prepodavatelya"= "plann"."ID_prepodavatelya"
order by "nazvanie_predmeta"
INTO :"nazvanie_predmeta", :"FIO_prepodavatelya"
DO
BEGIN
SUSPEND;
END
end
Вызов
Код:
select * from Poisk_po_plany(:semestr,:kurs,:nazvanie_specialnosti,:FIO_prepodavatelya,:nazvanie_predmeta)
Код:
SELECT* FROM Poisk_po_plany(:semestr,:kurs,:nazvanie_specialnosti)
Че то мне кажется что так правильней ее вызвать, а возвратит она таблицу:
FIO_prepodavatelya VARCHAR(255),
nazvanie_predmeta VARCHAR(255))
Все равно Procedure unknown. Может в настройках что-то не то? (Сделать там что-нибудь Active)?
В кавычках!!!
или из определения кавычки убрать или в вызывающем запросе их поставить
Заработало!