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

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

Странно необъяснимое поведение хранимой процедуры в Фаерберде ...


Страницы:   1 2 3

Rule ©   (2005-02-17 12:23:00) 

При выполнении хранимой процедуры выдает неправильные результаты, а в режиме отладки выдает правильные результаты, до этого встречался с такой проблеммой ... и решил её путем преставления срок кода, причем это переставление логики никакой не меняло вообще ... опять столкнулся с такойже проблеммой ... что делать, чего посоветуете ?


Rule   (2005-02-17 13:21:00) [21]

Deniz   (17.02.05 13:18) [19]
убрал это условие для отладки .. чтоб лишних ошибок не возникало, а проанализировать результаты можно было бы в ручную ...


Rule   (2005-02-17 13:19:00) [22]

Johnmen ©   (17.02.05 12:53) [15]
так вообще не работает ...


Deniz   (2005-02-17 13:18:00) [23]

>Reindeer Moss Eater ©   (17.02.05 12:46) [14]
Если же поле перечислено в инсерте, то в него попадет что вставляют. В том числе и null.

Null точно не попадет по условию
Rule ©   (17.02.05 12:36) [8]
...
так как в атрибутах поля стоят не нулевое и значени  по умолчанию равное 0

Но что-то условие не канает с реальностью

CREATE TABLE PRICEFUEL (
  ID            INTEGER NOT NULL,
  ID_FUEL       INTEGER,
  NPRICE        SMALLINT,
  PRICE         NUMERIC(7,2),
  ADATIME       TIMESTAMP DEFAULT 'NOW',
  ADATIMEF      TIMESTAMP,
  DISCOUNTTYPE  SMALLINT DEFAULT 0
);


Rule   (2005-02-17 13:16:00) [24]

Reindeer Moss Eater ©   (17.02.05 12:46) [14]
я сверху писал, что в атрибутах поля стоит "нот нулл", что исключает твою теорию ... но вообщето не в этом вопрос


Rule   (2005-02-17 13:13:00) [25]

единственное поле, это поле Эктив, которое является флагом того, что на этой заправке (речье идет про заправки) присутствует такой вид топлива ... так как номенклатура общая и неизменная  ....

вторая таблица - это динамика изменения цен на топливо


Deniz   (2005-02-17 13:06:00) [26]

Так вроде правильно работает
Проверил IBExpert 2005.02.13 FB 1.5.2


Johnmen   (2005-02-17 12:53:00) [27]

Возможно, надо так
2.
      select a.price, a.adatime, a.discounttype
          from pricefuel a
          where a.id_fuel=:idfuel
          and a.nprice=:nprice
          and a.adatime=(select max(b.adatime) from pricefuel b
                          where b.id_fuel=a.id_fuel)


3.
          select a.price
              from pricefuel a
              where a.id_fuel=:idfuel
              and a.nprice=0
              and a.adatime=(select max(b.adatime) from pricefuel b
                              where b.id_fuel=a.id_fuel)


Reindeer Moss Eater   (2005-02-17 12:46:00) [28]

ну Discounttype не может быть равен нулл, так как в атрибутах поля стоят не нулевое и значени  по умолчанию равное 0

Это еще почему?
Default срабатывает когда в инсерте поле не перечислено.
Тогда туда попадет значение Default.
Если же поле перечислено в инсерте, то в него попадет что вставляют. В том числе и null.


Rule   (2005-02-17 12:42:00) [29]

ну если надо описать логику работы фрагменты, то
в таблице с топливом хранится номенклатура по топливу.... тут помоему придельно понятно ....


Rule   (2005-02-17 12:40:00) [30]

ну и наконец данны из таблицы по топливу ...
INSERT INTO FUEL (ID, NAME, AACTIVE) VALUES (10001, 'ДП', 't');
INSERT INTO FUEL (ID, NAME, AACTIVE) VALUES (10002, 'А-76', 't');
INSERT INTO FUEL (ID, NAME, AACTIVE) VALUES (10003, 'А-92', 't');
INSERT INTO FUEL (ID, NAME, AACTIVE) VALUES (10004, 'А-95', 't');

COMMIT WORK;


Rule   (2005-02-17 12:39:00) [31]

ну и сами данные:

INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (54, 10001, 0, 1.15, '2005-02-07 21:55:22', '2005-02-15 18:45:47', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (55, 10002, 0, 1.2, '2005-02-07 21:55:45', '2005-02-15 18:45:47', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (27, 10003, 0, 2.5, '2004-11-30 13:40:03', '2004-12-14 14:59:08', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (28, 10002, 0, 2.3, '2004-11-30 13:40:43', '2004-12-14 14:59:08', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (29, 10004, 0, 3, '2004-12-14 14:53:33', '2004-12-14 14:59:08', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (30, 10001, 0, 1, '2005-01-26 15:09:30', '2005-01-26 22:38:27', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (35, 10001, 0, 1.1, '2005-02-03 16:29:13', '2005-02-03 16:56:06', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (31, 10002, 0, 2, '2005-01-26 15:09:26', '2005-01-26 22:38:27', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (36, 10002, 0, 1.2, '2005-02-03 16:29:30', '2005-02-03 16:56:06', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (37, 10003, 0, 1.3, '2005-02-03 16:29:30', '2005-02-15 18:45:47', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (38, 10004, 0, 1.4, '2005-02-03 16:29:30', '2005-02-03 16:56:06', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (33, 10003, 0, 3, '2005-01-26 15:13:33', '2005-01-26 22:38:27', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (34, 10004, 0, 4, '2005-01-26 15:20:34', '2005-01-26 22:38:27', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (39, 10001, 0, 1.15, '2005-02-03 16:58:32', '2005-02-03 17:02:03', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (40, 10004, 0, 1.45, '2005-02-03 16:58:32', '2005-02-15 18:45:47', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (41, 10001, 2, 1.17, '2005-02-05 19:18:13', '2005-02-03 17:02:03', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (42, 10002, 0, 1.12, '2005-02-05 19:18:13', '2005-02-03 17:02:03', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (43, 10003, 2, 1.17, '2005-02-05 19:18:13', '2005-02-03 17:02:03', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (44, 10004, 2, 1.27, '2005-02-05 19:18:13', '2005-02-03 17:02:03', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (45, 10001, 2, 1.42, '2005-02-05 19:21:01', '2005-02-03 17:02:03', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (46, 10002, 2, 1.17, '2005-02-05 19:22:59', '2005-02-03 17:02:03', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (47, 10003, 2, 1.27, '2005-02-05 19:22:59', '2005-02-03 17:02:03', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (48, 10004, 2, 1.42, '2005-02-05 19:22:59', '2005-02-03 17:02:03', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (49, 10001, 2, 1.12, '2005-02-05 19:22:59', '2005-02-03 17:02:03', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (50, 10001, 1, 1.13, '2005-02-05 21:00:13', '2005-02-03 17:02:03', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (51, 10002, 1, 1.18, '2005-02-05 21:00:13', '2005-02-03 17:02:03', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (52, 10003, 1, 1.28, '2005-02-05 21:00:13', '2005-02-03 17:02:03', 0);
INSERT INTO PRICEFUEL (ID, ID_FUEL, NPRICE, PRICE, ADATIME, ADATIMEF, DISCOUNTTYPE) VALUES (53, 10004, 1, 1.43, '2005-02-05 21:00:13', '2005-02-03 17:02:03', 0);

COMMIT WORK;


Rule   (2005-02-17 12:38:00) [32]

таблица изменения цен на топливо:

/******************************************************************************/
/***               Generated by IBExpert 17.02.2005 11:38:29                ***/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES WIN1251;

/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/
CREATE GENERATOR GEN_PRICEFUEL_ID;

CREATE TABLE PRICEFUEL (
   ID            INTEGER NOT NULL,
   ID_FUEL       INTEGER,
   NPRICE        SMALLINT,
   PRICE         NUMERIC(7,2),
   ADATIME       TIMESTAMP DEFAULT 'NOW',
   ADATIMEF      TIMESTAMP,
   DISCOUNTTYPE  SMALLINT DEFAULT 0
);

/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/

ALTER TABLE PRICEFUEL ADD CONSTRAINT PK_PRICEFUEL PRIMARY KEY (ID);

/******************************************************************************/
/***                              Foreign Keys                              ***/
/******************************************************************************/

ALTER TABLE PRICEFUEL ADD CONSTRAINT FK_PRICEFUEL FOREIGN KEY (ID_FUEL) REFERENCES FUEL (ID) ON UPDATE CASCADE;

/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/

SET TERM ^ ;

/* Trigger: PRICEFUEL_AU */
CREATE TRIGGER PRICEFUEL_AU FOR PRICEFUEL
ACTIVE AFTER UPDATE POSITION 0
as
begin
/*меняем нестеловские цены на стелловские*/
if ((old.nprice=0) and (new.adatimef is not null)) then
   update pricefuel set
       adatimef=new.adatimef
       where adatimef is null
       and nprice<>0;
end
^

/* Trigger: PRICEFUEL_BI */
CREATE TRIGGER PRICEFUEL_BI FOR PRICEFUEL
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
 IF (NEW.ID IS NULL) THEN
   NEW.ID = GEN_ID(GEN_PRICEFUEL_ID,1);
END
^

SET TERM ; ^

/* Fields descriptions */

DESCRIBE FIELD ADATIME TABLE PRICEFUEL
'Теоретическое время и дата активации цены, выставляется бухгалтером';

DESCRIBE FIELD ADATIMEF TABLE PRICEFUEL
'Фактическое время и дата изменения цены, тоесть когда эта цена была залита в кассовый аппарат оператором';

DESCRIBE FIELD DISCOUNTTYPE TABLE PRICEFUEL
'тип скидки по цене
0 - абсолютная цена
1 - процентная скидка
2 - абсолютная скидка';

/******************************************************************************/
/***                               Privileges                               ***/
/******************************************************************************/


Rule   (2005-02-17 12:37:00) [33]

для конечно полноты картины скрипт таблиц:
таблица  с топливом:

/******************************************************************************/
/***               Generated by IBExpert 17.02.2005 11:36:43                ***/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES WIN1251;

/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/
CREATE GENERATOR GEN_FUEL_ID;

CREATE TABLE FUEL (
   ID       INTEGER NOT NULL,
   NAME     VARCHAR(20),
   AACTIVE  CHAR(1) DEFAULT 't'
);

/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/

ALTER TABLE FUEL ADD CONSTRAINT PK_FUEL PRIMARY KEY (ID);

/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/

SET TERM ^ ;

/* Trigger: FUEL_BI */
CREATE TRIGGER FUEL_BI FOR FUEL
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
 IF (NEW.ID IS NULL) THEN
   NEW.ID = GEN_ID(GEN_FUEL_ID,1);
END
^

SET TERM ; ^

/* Fields descriptions */

DESCRIBE FIELD AACTIVE TABLE FUEL
'активность карточки, если карточка активна, то ''t''
''f'' - если не активная';

/******************************************************************************/
/***                               Privileges                               ***/
/******************************************************************************/

/* Privileges of procedures */
GRANT SELECT ON FUEL TO PROCEDURE "show_balans";


Rule   (2005-02-17 12:36:00) [34]

Johnmen ©   (17.02.05 12:32) [7]
ну Discounttype не может быть равен нулл, так как в атрибутах поля стоят не нулевое и значени  по умолчанию равное 0


Johnmen   (2005-02-17 12:32:00) [35]

1. здесь if (Discounttype!=0) then
я бы так if (Discounttype NOT NULL) AND (Discounttype<>0) then


Rule   (2005-02-17 12:31:00) [36]

так самое интересное, что в режиме отладки (ИБЭксперт) всё работает нормально, а вот при выхове из СКЛ, неправильные данные ...

может оптимизатор чегото ломает ?


Rule   (2005-02-17 12:30:00) [37]

Johnmen ©   (17.02.05 12:28) [3]
изредка просто сам отвечаю на ворпосы :-)


Rule   (2005-02-17 12:29:00) [38]

при значении входного параметра равного 0 выдет фигню, тоесть все цены равны первой попавшейся цене ... а при другом значении всё нормально

есть подозрение, что входной параметр, равный 0 неправильно интерпретируется ...

может кто встречался с такой проблеммой ?


Johnmen   (2005-02-17 12:28:00) [39]

Ну ты телепат !
:)


Johnmen   (2005-02-17 12:27:00) [40]

Совет пока один - привести исчерпывающие исх.данные :)


Страницы:   1 2 3

Наверх

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