Вызов ХП из Delphi

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Bychok
Сообщения: 13
Зарегистрирован: 19 июн 2007, 22:37

Вызов ХП из Delphi

Сообщение Bychok » 03 мар 2009, 18:11

Доброго времени суток.
Подскажите, будьте добры.
Процедура-выборка, при вызове в IBExpert отрабатывает беспроблемно.
При вызове из Delphi 7 через свойство SQL компонента TIBQuery ничего не происходит. При повторном вызове отрабатывает, но результат тот, который должен был быть при первом вызове. Описания подобной проблемы не нашел.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Вызов ХП из Delphi

Сообщение kdv » 04 мар 2009, 09:41

небось, suspend?

Bychok
Сообщения: 13
Зарегистрирован: 19 июн 2007, 22:37

Re: Вызов ХП из Delphi

Сообщение Bychok » 04 мар 2009, 10:45

Ну да) А как же без suspend'a?)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Вызов ХП из Delphi

Сообщение kdv » 04 мар 2009, 11:04

ну и. тогда процедуру вызываем как select * from myproc?

Bychok
Сообщения: 13
Зарегистрирован: 19 июн 2007, 22:37

Re: Вызов ХП из Delphi

Сообщение Bychok » 04 мар 2009, 11:17

Код: Выделить всё

CREATE PROCEDURE SP_S_MGR (
    mgr INTEGER)
RETURNS (
    maname VARCHAR(20),
    moid INTEGER,
    moname VARCHAR(60),
    ...
    c1970 INTEGER)
AS
BEGIN
    FOR     SELECT Marka.Name AS Ma_Name, Model.Model_id,
            ...
            Cost."_1971", Cost."_1970"
            FROM Marka JOIN Model ON Marka.Marka_id =Model.Marka_id
            ...
            ORDER BY Model.marka_id, Model.order_by
    INTO    :MaName, :MoId, :MoName, :BA45, :BA44, :BA43, :BA42, :BA41, :BA40,
            ...
            :c1970
    DO
    BEGIN
        SUSPEND;
    END
END

Код: Выделить всё

  DM.qMGR.Close;
  DM.qMGR.SQL.Clear;
  DM.qMGR.SQL.Add('SELECT * FROM Sp_s_mgr('
  	+ IntToStr(DM.tModel.FieldByName('Modelgroup').AsInteger) + ')');
  DM.qMGR.Open;

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Вызов ХП из Delphi

Сообщение kdv » 04 мар 2009, 12:23

программу копайте. никаких причин чтобы не получить результат при первом вызове, не вижу, абсолютно.
так что скорее всего глючит Ваш код. А еще лучше, вот это
DM.tModel.FieldByName('Modelgroup').AsInteger
сначала лучше присвоить отдельной переменной, и только потом втыкать в текст запроса.
Хотя бы при отладке будет видно, "первый раз" там есть что-либо или нет (или то или не то).

p.s. код положено оформлять кнопочкой code. В первый раз сделал это за Вас, во второй раз будет предупреждение.

Bychok
Сообщения: 13
Зарегистрирован: 19 июн 2007, 22:37

Re: Вызов ХП из Delphi

Сообщение Bychok » 04 мар 2009, 12:26

Извините, об оформлении запамятовал. Не так уж часто отписываюсь.

Bychok
Сообщения: 13
Зарегистрирован: 19 июн 2007, 22:37

Re: Вызов ХП из Delphi

Сообщение Bychok » 04 мар 2009, 12:27

Спасибо, буду колупать код.

Bychok
Сообщения: 13
Зарегистрирован: 19 июн 2007, 22:37

Re: Вызов ХП из Delphi

Сообщение Bychok » 04 мар 2009, 12:34

Потрясающе)

Код: Выделить всё

  MGR := IntToStr(DM.tModel.FieldByName('Modelgroup').AsInteger);
  DM.qMGR.Close;
  DM.qMGR.SQL.Clear;
  DM.qMGR.SQL.Add('SELECT * FROM Sp_s_mgr(' + MGR + ')');
  DM.qMGR.Open;
Это работает без проблем) Не думал, что здесь может быть проблема)
Еще раз спасибо.

Ответить