Текущий архив: 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.48 MB
Время: 0.061 c