Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание процедуры программно [D6, IB6.x]


Страницы:   1 2

yuray ©   (2004-12-06 12:57:00) 

Уважаемые мастера! Как программно создать хранимую процедуру?
При использовании TQuery, ругается на строку типа "into :parametr".
Если создавать простенькую процедуру компонентом TQuery, например:
       create procedure myproc returns (a integer)
as
begin
  a=5;
end
тогда все работает.


yuray   (2004-12-07 12:29:00) [21]

Упростим задачу. Чтобы снять подозрения с самой процедуры, предлагаю создать программно такую универсальную процедуру
CREATE PROCEDURE PROCEDURES
RETURNS (
   NAME VARCHAR(25))
AS
BEGIN
 FOR select rdb$procedure_name from rdb$procedures
 into :name
 DO
 BEGIN
   suspend;
 END
end

Такая процедура будет работать в любой IB базе.
Когда пытаюсь ее создать с помощью TQuery, ругается на  into :name.
Как программно создать такую процедуру?


Zacho   (2004-12-06 18:08:00) [22]

yuray   (06.12.04 16:47) [8]

Чёрт его знает, в чём там дело. Я уже плохо помню BDE, но вроде бы там есть что-то типа SQL Monitor ? Посмотри, какой запрос реальноуходит на сервер.


yuray   (2004-12-06 16:47:00) [23]

Запрос в TQuery и приведённый запрос абсолютно одинаковые(копирую через буфер). Более того, он успешно работает в IB Expert.
Я всегда создавал процедуры с помощью IB Experta либо скриптом и с такой проблемой не встречался. Вероятно, проблемы и нет как таковой. Но тогда где я ошибаюсь?
За EXIST спасибо.


yuray   (2004-12-06 16:46:00) [24]

Запрос в TQuery и приведённый запрос абсолютно одинаковые(копирую через буфер). Более того, он успешно работает в IB Expert.
Я всегда создавал процедуры с помощью IB Experta либо скриптом и с такой проблемой не встречался. Вероятно, проблемы и нет как таковой. Но тогда где я ошибаюсь?


Zacho   (2004-12-06 14:14:00) [25]

Johnmen ©   (06.12.04 13:50) [5]

Вероятно, имеется в виду into :payercode

2 yuray
На первый взгляд, синтаксических ошибок в приведённом коде нет. Ты уверен, что запрос в TQuery и приведённый запрос абсолютно одинаковые ?
И ещё : вместо SELECT COUNT советую использовать EXIST


Johnmen   (2004-12-06 13:50:00) [26]

И где здесь :parametr ?


yuray   (2004-12-06 13:33:00) [27]

CREATE PROCEDURE BALANC_PILG
RETURNS (
   PAYERCODE VARCHAR(9),
   N INTEGER,
   BORG DOUBLE PRECISION,
   COMPENS DOUBLE PRECISION,
   VAR_BORG DOUBLE PRECISION)
AS
DECLARE VARIABLE NARAH FLOAT;
DECLARE VARIABLE SYBSIDY FLOAT;
DECLARE VARIABLE OPL_PAYMENT FLOAT;
DECLARE VARIABLE OPL_RECEIPTS FLOAT;
DECLARE VARIABLE VAR_BILLNUM INTEGER;
DECLARE VARIABLE VAR_BILLPRIVPAY DOUBLE PRECISION;
DECLARE VARIABLE VAR_BILLTARIFFSTD DOUBLE PRECISION;
DECLARE VARIABLE VAR_BILLTARIFFPRIV DOUBLE PRECISION;
DECLARE VARIABLE VAR_BILLPRIVCONS INTEGER;
BEGIN
 FOR select payercode from payers
 into :payercode
 DO
 BEGIN
   select count(*) from bills
   where payercode=:payercode and billprivcons is not null and billprivcons<>0 and (billpayed<>billtopay or billpayed is null)
   into :n;
   if (:n>0) then
   begin
     /* ====================== Borg start ========================*/
     narah=0.00; sybsidy=0.00;
     select sum(billcalc+billtax),sum(billsubsidy)
     from bills a where payercode=:payercode
     into :narah, :sybsidy;
     /*------------------------------*/
     opl_payment=0.00;
     select sum(receiptpay) from payment
     where billnum is not null and payercode=:PAYERCODE
     into :opl_payment;
     /* --------------------------- */
     opl_receipts=0.00;
     select sum(receiptpay) from receipts
     where billnum is not null and payercode=:PAYERCODE
     into :opl_receipts;
     /* ---------------- */
     BORG=0.00; compens = 0.00;
     if (:narah is null) then narah=0.00;
     if (:sybsidy is null) then sybsidy=0.00;
     if (:opl_payment is null) then opl_payment=0.00;
     if (:opl_receipts is null) then opl_receipts=0.00;
     BORG=:narah-:sybsidy-:opl_payment-:opl_receipts;
     /* ====================== Borg end ========================*/
     if (:borg>0) then
     begin
       var_borg = :borg;
       for select billnum from bills
       where payercode=:payercode and billprivcons is not null and billprivcons<>0 and (billpayed<>billtopay or billpayed is null)
       order by billnum
       into :var_billnum
       do
       begin
         var_billprivpay=0.00;
         select billtariffstd, billtariffpriv, billprivcons, billprivpay from bills
         where payercode=:payercode and billnum=:var_billnum
         into :var_billtariffstd, :var_billtariffpriv, :var_billprivcons, :var_billprivpay;
         if ((:var_billtariffstd is not null) and (:var_billtariffpriv is not null)
         and (:var_billprivpay is not null)) then
         begin
           if (:var_billprivpay <= :var_borg) then
           begin
             compens = :compens + (:var_billtariffstd - :var_billtariffpriv)*:var_billprivcons;
             var_borg = :var_borg - :var_billprivpay;
           end /*else
           begin
             compens = :compens + (:var_billtariffstd - :var_billtariffpriv)*(:var_borg/:var_billtariffpriv);
             var_borg = :var_borg - :var_billprivpay;
           end */
         end
       end
   suspend;
   end
   end
 END
end


Zacho   (2004-12-06 13:25:00) [28]

Приведи полностью текст запроса.


yuray   (2004-12-06 13:21:00) [29]

Сделал ParamCheck=false,
query1.ExecSQL.
Пишет General SQL error. Token unknown - line 20, char 6?
В 20 строке: into :parametr.
Этот запрос запускаю в IB Expert - все работает.


ЮЮ   (2004-12-06 12:59:00) [30]

ParamCheck отключи


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо