Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Relations между таблицами... / 12 сообщений из 12, страница 1 из 1
29.08.2006, 07:46
    #33948380
s@ilor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Relations между таблицами...
Вопрос такой.
С помощью функции ADBOBJECTS() можно получить информацию об связях между таблицами в базе данных. В том числе и информацию о действиях при удаленнии, обновлении и добавлении записей.
Подскажите пожалуйста как при создании таблиц программным путем(CREATE TABLE ил ALTER TABLE) можно задать эти свойства отношений между таблицами. Или может быть есть какие функции для реализации этого? Нужно именно программным путем, не с помощью мастеров и прочего.
Заранее спасибо!
...
Рейтинг: 0 / 0
29.08.2006, 08:44
    #33948453
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Relations между таблицами...
s@ilor...Подскажите пожалуйста как при создании таблиц программным путем(CREATE TABLE ил ALTER TABLE) можно задать эти свойства отношений между таблицами. Или может быть есть какие функции для реализации этого? Нужно именно программным путем, не с помощью мастеров и прочего.
Заранее спасибо!См. Help по команде SET RELATION Command:
Код: plaintext
1.
2.
SET RELATION TO [eExpression1 INTO nWorkArea1 | cTableAlias1
   [, eExpression2 INTO nWorkArea2 | cTableAlias2 ...]
   [IN nWorkArea | cTableAlias] [ADDITIVE]]
...
Рейтинг: 0 / 0
29.08.2006, 09:05
    #33948486
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Relations между таблицами...
Владимир САСм. Help по команде SET RELATION Command:

Нет, set relation создает т.с. "визуализацию" связей, которая не несёт за собой никаких последствий для данных.

s@ilor Подскажите пожалуйста как при создании таблиц программным путем(CREATE TABLE ил ALTER TABLE) можно задать эти свойства отношений между таблицами.

В хелпе написано,

Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE ......
PRIMARY KEY ....
либо
[, FOREIGN KEY eExpression4 TAG TagName4 [NODUP] 
    [COLLATE cCollateSequence] 
    REFERENCES TableName3 [TAG TagName5]]

Здесь есть небольшой пример
http://forum.foxclub.ru/read.php?29,180541,180541#msg-180541
...
Рейтинг: 0 / 0
29.08.2006, 09:20
    #33948506
s@ilor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Relations между таблицами...
Прочитал всю справку вдоль и поперек. Ничего про Rules on Update, Delete and Insert там не нашел :(.
Да и примеры в справке какие-то дряхлые.
Если есть какой-нить пример кода, скиньте пожалуйста.
...
Рейтинг: 0 / 0
29.08.2006, 09:22
    #33948509
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Relations между таблицами...
PaulWistНет, set relation создает т.с. "визуализацию" связей, которая не несёт за собой никаких последствий для данных.

s@ilor Подскажите пожалуйста как при создании таблиц программным путем(CREATE TABLE ил ALTER TABLE) можно задать эти свойства отношений между таблицами.

В хелпе написано,

Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE ......
PRIMARY KEY ....
либо
[, FOREIGN KEY eExpression4 TAG TagName4 [NODUP] 
    [COLLATE cCollateSequence] 
    REFERENCES TableName3 [TAG TagName5]]
Извиняюсь, мой ответ только о визуализации. PaulWist вы правы.
...
Рейтинг: 0 / 0
29.08.2006, 09:32
    #33948536
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Relations между таблицами...
s@ilorПрочитал всю справку вдоль и поперек. Ничего про Rules on Update, Delete and Insert там не нашел :(.
Да и примеры в справке какие-то дряхлые.
Если есть какой-нить пример кода, скиньте пожалуйста.

Надо смотреть CREATE TRIGGER, именно они создают правила ссылочной целостности.
...
Рейтинг: 0 / 0
29.08.2006, 12:28
    #33949191
s@ilor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Relations между таблицами...
Триггеры - это немного другое. Триггер действует в пределах таблицы, а мне нужно установить эти свойства для связей между таблицами, то есть, например, при удалении связанной записи может быть установлено одно из следующих правил - Restrict, Cascade или Ignore.
Это в Фоксе может быть установлено, если кликнуть по "линии" связи в Database Designer и выбрать Referential Integrity Builder.
Но это делается мышью :). А мне надо как это сделать программно можно.
...
Рейтинг: 0 / 0
29.08.2006, 13:08
    #33949361
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Relations между таблицами...
use dd1.dbc again
1 байт в поле riinfo
I R C
...
Рейтинг: 0 / 0
29.08.2006, 13:15
    #33949390
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Relations между таблицами...
Почитай
http://www.foxclub.ru/articles/index.php?id=37
...
Рейтинг: 0 / 0
29.08.2006, 13:57
    #33949556
s@ilor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Relations между таблицами...
PaulWistПочитай
http://www.foxclub.ru/articles/index.php?id=37

Спасибо теперь более понятно стало. Если для этого используется триггер, но вот создается он самим ФоксПро. Мне не нужно писать каккой-то свой собственный триггер при вставке, удалении или обновлении. Просто мне бы узнать как можно создать "стандартный" триггер, который создается системой при использовании Referential Integrity Builder.
...
Рейтинг: 0 / 0
29.08.2006, 14:14
    #33949636
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Relations между таблицами...
Вместе с FoxPro поставляется утилита (программа) GenDBC.prg

Эта утилита формирует на основе существующей базы данных файл PRG, который содержит программный код генерации структуры указанной базы данных.

Создай тестовую базу данных из 2 таблиц (пустых), настрой между этими таблицами связь, а затем "натрави" на нее эту утилиту. Т.е. прямо в командном окне дай команду

Код: plaintext
DO (Home()+"Tools\GenDBC\GenDBC.prg")

На первом шаге эта утилита предложит указать базу данных, на втором - имя файла PRG в который будет записан код создания структуры этой базы данных.

Далее открываешь на модификацию полученный файл PRG и смотришь какими командами и что было сделано.

"Стандартный" триггер создается с помощью приложения Builder.app, которое лежит в корневой директории FoxPro. Исходный код этого приложения написан также на FoxPro и его можно посмотреть в архиве в папаке

Home()+"Tools\XSource\xsource.zip"

Раскрой этот архив и посмотри в нем проект RIBuildr.pjx
...
Рейтинг: 0 / 0
29.08.2006, 15:11
    #33949936
s@ilor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Relations между таблицами...
ВладимирМ

FoxPro делает это очень просто, оказывается. Просто меняет значение поля riinfo в главной таблице, где и прописаны эти свойства. Была мысль делать тоже самое, но думал есть какой-то "цивилизованный" способ :).
Вот кусок сгенерированного кода для Northwind:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
USE 'NORTHWIND.DBC'
LOCATE FOR ObjectType = 'Table' AND ObjectName = 'Products'
IF FOUND()
    nObjectID = ObjectID
    LOCATE FOR ObjectType = 'Relation' AND 'categoryid'$Property AND 'Categories'$Property AND 'categoryid'$Property AND ParentID = nObjectID
    IF FOUND()
	      REPLACE RiInfo WITH 'RRI   '
    ELSE
       ? "Could not set RI Information."
    ENDIF
ENDIF


Спасибо большое, очень помогли!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Relations между таблицами... / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]