Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Мастера DELPHI. Новости мира компонент, FAQ, статьи...


Служба Рассылок Subscribe.Ru
Ежедневная рассылка сайта Мастера DELPHI

DELPHI.mastak.ru

Выпуск от 13.01.02 09:04

Кое-что из нашей кладовки   |x|
  • Chat Lamokk lamok@rambler.ru   (13.01.02 00:21)
    Тут люди попросили чат им сделать, начал было делать а у них оборудование
    дернули поэтому чат не полный (дополнительные функции не сделаны)
    но все основное работает вроде!! Если че то не работает пишите!!!
    Дополнительные функции возможно будут потом !!!
    »»» Скачать: исходные тексты (10кб)
Лучшее из нашего FAQ   |x|
Каскадные Update's в таблицах InterBase
Если Update не затpагивает ключевых(ссылочных) полей - то ничего стpашного и военного нет.
Дpугое дело - если затpагивает. Тогда надобно пpоявить немного фантазии.
Пеpвое, что пpиходит в голову - создать в pодительской таблице вpеменную запись(с заpанее оговоpенным ID) и пеpенести все ссылки из Child-таблицы на эту запись(до обновления). А после обновления - занести обpатно.

CREATE TABLE Table1
(
ID INTEGER NOT NULL PRIMARY KEY,
Name VARCHAR(25)
);
CREATE TABLE Table2
(
ID INTEGER NOT NULL PRIMARY KEY,
Table1ID INTEGER NOT NULL,
Name VARCHAR(20),
constraint fkTable2_Table1 FOREIGN KEY Table1ID REFERENCES Table1(ID)
);
SET TERM ^ ;
CREATE TRIGGER trbuTable1_BackUp
before update
as
BEGIN
if (OLD.ID <> NEW.ID) then
update Table2
SET Table1ID = 0
where Table1ID = OLD.ID;
END
^
CREATE TRIGGER trauTable1_Restore
after update
AS
BEGIN
if (OLD.ID <> NEW.ID) then
update Table2
SET Table1ID = NEW.ID
where Table1ID = 0;
END
^
commit ^

....
Естественно, если возможен одновpеменный подобный Update в pазных одновpеменных тpанзакциях, то необходимо пpименить более изощpенный способ.
Hо!.. IMHO, надо поступать немного по дpугому, что ОЧЧЕЬ упpостит опеpации в БД. адо пpосто составить пpоцедуpу, типа:

CREATE PROCEDURE eprTable1_UpdateWithNewID
(
OLDID INTEGER,
NEWID INTEGER,
Name VARCHAR (25)
)
as
BEGIN
insert into Table1
(ID, Name)
values
(:NEWID, :Name);
update Table2
SET Table1ID = :NEWID
where Table1ID = :OLDID;
delete from Table1
where ID = :OLDID;
END
^



Комментарий от Max Rezanov [max@valley.ttn.ru]
На ответ натолкнул меня PowerDesigner 7
Если почитать IB документацию то можно выловить следующую возможность по констраинтам, искать надо в
ALTER TABLE name {ADD colname < datatype> [NOT NULL]
| DROP colname | ADD CONSTRAINT constraintname tableconstraint
| DROP CONSTRAIN! T constraintname};
>
> = [CONSTRAINT constraint]
> [ ...]
> = {UNIQUE | PRIMARY KEY
> | CHECK ( )
> | REFERENCES other_table [( other_col [, other_col -])]
> [ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
> [ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
> }

Список возможностей
> Action specified Effect on foreign key
> NO ACTION
> [Default] The foreign key does not change (can cause the primary key update or delete to fail due to referential integrity checks)
> CASCADE
> The corresponding foreign key is updated or deleted as appropriate to the new value of the primary key
> SET DEFAULT
> Every column of the corresponding foreign key is set to its default value; fails if the default value of the foreign key is not found in the primary key
> SET NULL
> Every column of the corresponding foreign key is set to NULL

Говоря проще нам важна следующая возможность
alter table ENTT_2
add constraint FK_ENTT_2_RLSH_1_ENTT_1 foreign key (ATTR_1)
references ENTT_1
on update cascade
on delete cascade;
Полный SQL код для проверки ниже, При сменен PK на таблице ENTT_1
FK в таблице ENTT_2 меняется автоматом, про удаление я не говорю вобще Ж:))


create database "d:\SQLBASE\T1.GDB"
user "sysdba"
password "masterkey"
page_size = 4096
default character set WIN1251;

/*==============================================================*/
/* Table : ENTT_1 */
/*==============================================================*/
create table ENTT_1 (
ATTR_1 VARCHAR(10) not null,
ATTR_2 VARCHAR(10),
constraint PK_ENTT_1 primary key (ATTR_1)
);

/*==============================================================*/
/* Table : ENTT_2 */
/*===================================! ===========================*/
create table ENTT_2 (
ATTR_4 VARCHAR(10) not null,
ATTR_1 VARCHAR(10) not null,
ATTR_5 VARCHAR(10),
constraint PK_ENTT_2 primary key (ATTR_4)
);

alter table ENTT_2
add constraint FK_ENTT_2_RLSH_1_ENTT_1 foreign key (ATTR_1)
references ENTT_1
on update cascade
on delete cascade;


»»» Прислать свои комментарии

Обсуждается в конференциях   |x|
У нас большой выбор статей   |x|
Обзор формата DIB и компонентов для работы с ним.
Если вы когда-либо занимались программированием для Windows, то наверняка знаете, что растры (bitmaps) встречаются повсюду. Это происходит не только из-за того, что графический формат BMP является единственным, который непосредственно поддерживается Windows ( не считая значков (icons), возможности которых крайне ограничены). Просмотрите любое руководство по программированию для Windows, и вы найдете в нем такие функции, как CreateBitmap() , LoadBitmap() , StretchDIBits() и BitBlt() для создания, загрузки и вывода растров на экран, однако вы не обнаружите аналогичных функций для других графических форматов - например PCX, TIFF или GIF. Следовательно, вы не сможем сколько-нибудь заметно продвинуться в программировании игр для Windows, если не научитесь работать с растрами.
Новинки книжного рынка   |x|
Delphi: специальный справочник
В книге содержится обширный справочный материал по основным элементам языка, включающий в себя наиболее употребительные функции, классы и объекты. Последовательно и подробно изложен процесс создания баз данных, Windows-приложений и динамических библиотек. Приложения с описанием различных кодов ошибок выполнения программ делает книгу полезной не только начинающим программистам, но и пользователям, активно работающим с Delphi
Автор: Б. Карпов
Другие сайты о DELPHI   |x|
Черный программист. Программы, исходники, FAQ по DELPHI. Форматы файлов.
Черный программист. Программы, исходники, FAQ по DELPHI.
Форматы файлов. Обзор новых компонент и исходников.
Опрос населения :)
Новый журнал для программистов "RSDN Magazine". За какую сумму вы готовы его покупать?
»»» 80р.
»»» 100р.
»»» 120р.
»»» 150р.
Журнал "RSDN Magazine"  |x|

Дорогие друзья! Мы рады представить вам новый совместный проект сайтов www.rsdn.ru, delphi.mastak.ru и www.optim.ru - профессиональный журнал для программистов RSDN Magazine.
Несомненно, ваше мнение о необходимости такого журнала, содержании рубрик и темах отдельных статей поможет сделать журнал более полезным и интересным. Высказать свое мнение, проголосовать или же подписаться вы можете на сайте. Без вашего участия, нам будет трудно сделать правильный журнал!

Для души

Хокку дня
Для силы воли
Послабленье -
Бабье лето.

Афоризмы
Человек без зависти, не человек... (муж Тайны)

Фраза дня
Я женщина честная, доверилась компьютеру, а он меня обманул

И на закуску коротенький анекдот
Найден щенок бультерьера. Большая просьба к хозяевам: ЗАБЕРИТЕ ПОСКОРЕЕ ЭТУ СВОЛОЧЬ!

Фотоприколы.
Начните день с хорошего настроения!
http://delphi.mastak.ru/cgi-bin/prikol.pl?id=3589


На этом позвольте откланяться и пожелать вам удачного дня.
Искренне ваш, Алексей (delphi@mastak.com)

Добро пожаловать на сайт -= Мастера DELPHI =- 


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное