Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Post на TIBDataSet.   Найти похожие ветки 

 
DROWSY   (2010-06-04 21:23) [0]

Firebird 1.5, Delphy 6.0
Есть набор TIBDataSet из двух таблиц.

select effects.code, effects.effeciency, effects.multiplier, effects_pro.pr_id, effects_pro.activ
from effects
  left outer join effects_pro on (effects.code = effects_pro.effects_code and PR_ID =  :PR_ID) order By effects.code

Значение "присоединённого" поля effects_pro.activ, для всех записей = Null.
Заполняю в гриде поле effects_pro.activ.
Если CachedUpdates = true, то всё нормально  Post-ится,
а если false, то значение поля в BeforePost = установленное в гриде,
,а уже в AfterPost сбрасывается в NULL,
VarisNull( DataSet.FieldByName("ACTIV").Value) = true.
Почему это происходит?


 
turbouser ©   (2010-06-04 21:40) [1]


> DROWSY   (04.06.10 21:23)  

Потому, что ibx, да и темболее под D6 1) заточены под ib 2) глюкодром
или ищи апдейты на ibx для D6 или используй нормальные компоненты - FIB например, или UIB


 
Loginov Dmitry ©   (2010-06-04 23:08) [2]

то значение поля в BeforePost = установленное в гриде,
,а уже в AfterPost сбрасывается в NULL,


Как настроены InsertSQL, ModifySQL, RefreshSQL ?


> Потому, что ibx, да и темболее под D6 1) заточены под ib
> 2) глюкодром


Компоненты IBX ниже версии X.11 использовать просто опасно.
Последние версии вот: http://ibase.ru/components.htm#components

Насчет глюков: работаю несколько лет с ними (D2007), причем весьма жестоко. Глюков не припомню (правда кроме TIBDatSet особо ничем другим не увлекался).


 
turbouser ©   (2010-06-04 23:24) [3]


> Loginov Dmitry ©   (04.06.10 23:08) [2]


> D2007

у автора D6..
в d2007 с ibx не работал, сказать не могу, но вот d7, d2006 - были проблемы. даже с апдейтами. бо FB уже давно <> IB


 
DROWSY   (2010-06-04 23:48) [4]


> Loginov Dmitry ©


========== TABLE EFFECTS ===========
SET SQL DIALECT 3;
SET NAMES NONE;

CREATE GENERATOR GEN_EFFECTS_ID;

CREATE TABLE EFFECTS (
   CODE        INTEGER NOT NULL,
   EFFECIENCY  INTEGER,
   MULTIPLIER  NUMERIC_4_3 /* NUMERIC_4_3 = NUMERIC(4,3) */
);

ALTER TABLE EFFECTS ADD CONSTRAINT PK_EFFECTS PRIMARY KEY (CODE);

/* Trigger: EFFECTS_BI */
CREATE TRIGGER EFFECTS_BI FOR EFFECTS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
 IF (NEW.CODE IS NULL) THEN
   NEW.CODE = GEN_ID(GEN_EFFECTS_ID,1);
END
^

========== TABLE EFFECTS_PRO ===========

CREATE GENERATOR GEN_EFFECTS_PRO_ID;

CREATE TABLE EFFECTS_PRO (
   CODE          INTEGER NOT NULL,
   EFFECTS_CODE  SMALLINT NOT NULL,
   PR_ID         SMALLINT NOT NULL,
   ACTIV         T_YESNO /* T_YESNO = CHAR(1) CHECK ((VALUE IS NULL) OR (VALUE IN ("N","Y") OR (VALUE IN ("T","F")))) */
);

ALTER TABLE EFFECTS_PRO ADD CONSTRAINT PK_EFFECTS_PRO PRIMARY KEY (CODE);

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

ALTER TABLE EFFECTS_PRO ADD CONSTRAINT FK_EFFECTS_PRO_1 FOREIGN KEY (EFFECTS_CODE) REFERENCES EFFECTS (CODE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE EFFECTS_PRO ADD CONSTRAINT FK_EFFECTS_PRO_2 FOREIGN KEY (PR_ID) REFERENCES MAIN (PRID) ON DELETE CASCADE ON UPDATE CASCADE;

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

/* Trigger: EFFECTS_PRO_BI */
CREATE TRIGGER EFFECTS_PRO_BI FOR EFFECTS_PRO
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
 IF (NEW.CODE IS NULL) THEN
   NEW.CODE = GEN_ID(GEN_EFFECTS_PRO_ID,1);
END

WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW WW

insertsql =

insert into EFFECTS
 (EFFECIENCY, MULTIPLIER)
values
 (:EFFECIENCY, :MULTIPLIER)
----------------------------
modifysql =
update EFFECTS
set
 EFFECIENCY = :EFFECIENCY,
 MULTIPLIER = :MULTIPLIER
where
 CODE = :OLD_CODE
----------------------------
refreshsql =
Select
 CODE,
 EFFECIENCY,
 MULTIPLIER
from EFFECTS
where
 CODE = :CODE
--------------------------

для обновления в таблице Effects_Pro, в AfterPost выполняется процедура:

SET TERM ^ ;

CREATE PROCEDURE INSERT_UPDATE_EFFECTS_PRO (
   prid integer,
   effects_code integer,
   activ char(1))
as
begin
 if (exists (select Effects_pro.activ from Effects_pro where Effects_pro.effects_code = :effects_code))
 then
 update Effects_pro set Effects_pro.pr_id = :PRID, Effects_pro.activ = :activ where (Effects_pro.effects_code = :Effects_code);
 else
 insert into Effects_pro values (null, :Effects_code, :prid, :activ);
end^

SET TERM ; ^

GRANT SELECT,INSERT,UPDATE ON EFFECTS_PRO TO PROCEDURE INSERT_UPDATE_EFFECTS_PRO;

GRANT EXECUTE ON PROCEDURE INSERT_UPDATE_EFFECTS_PRO TO SYSDBA;


 
DROWSY   (2010-06-05 01:00) [5]

Спасибо, мужчины.
Установил
IBX 6.11 для Delphi 6 SP2
Бяка исчезла.


 
turbouser ©   (2010-06-05 01:06) [6]


> DROWSY   (05.06.10 01:00) [5]

Пожалуйста :)


 
Германн ©   (2010-06-05 01:46) [7]


> Спасибо, мужчины.

Обычно принято говорить "спасибо, мужики". Тогда (не всегда, но в подобных случаях) женщины не обижаются. :)


 
turbouser ©   (2010-06-05 01:48) [8]


> Германн ©   (05.06.10 01:46) [7]


> Обычно принято

Иногда можно и деликатно промолчать.


 
Германн ©   (2010-06-05 02:12) [9]


> Иногда можно и деликатно промолчать.

До ответа на сабж, пожалуй можно и нужно.
После - тут уж на усмотрение. :)


 
turbouser ©   (2010-06-05 02:29) [10]


> Германн ©   (05.06.10 02:12) [9]

Человеку помогли? Он спасибо сказал? Ну так чего тут еще придираться? ЧСВ мучает??


 
Германн ©   (2010-06-05 02:44) [11]


> turbouser ©   (05.06.10 02:29) [10]
>
>
> > Германн ©   (05.06.10 02:12) [9]
>
> Человеку помогли? Он спасибо сказал? Ну так чего тут еще
> придираться?

Ты, Коля где увидел "придирки"?
Давай  закончим спор. :)


 
turbouser ©   (2010-06-05 02:49) [12]


> Германн ©   (05.06.10 02:44) [11]


> Ты, Коля где увидел "придирки"?

в [7], [9]

> Давай  закончим спор. :)

я и не спорил.



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.069 c
6-1224709751
serko
2008-10-23 01:09
2010.08.27
Telnet через Delphi...


15-1265194467
зодиак
2010-02-03 13:54
2010.08.27
Странный метод


15-1264404182
Polkin
2010-01-25 10:23
2010.08.27
ЗАГС - вопросы


2-1273056659
Свободный художник
2010-05-05 14:50
2010.08.27
Заблокировать ввод в определенные ячейки StringGrid


15-1265367565
unmazable
2010-02-05 13:59
2010.08.27
Создание интерпритатора(компилятора)