powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Relations между таблицами...
12 сообщений из 12, страница 1 из 1
Relations между таблицами...
    #33948380
s@ilor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос такой.
С помощью функции ADBOBJECTS() можно получить информацию об связях между таблицами в базе данных. В том числе и информацию о действиях при удаленнии, обновлении и добавлении записей.
Подскажите пожалуйста как при создании таблиц программным путем(CREATE TABLE ил ALTER TABLE) можно задать эти свойства отношений между таблицами. Или может быть есть какие функции для реализации этого? Нужно именно программным путем, не с помощью мастеров и прочего.
Заранее спасибо!
...
Рейтинг: 0 / 0
Relations между таблицами...
    #33948453
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Relations между таблицами...
    #33948486
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир САСм. 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
Relations между таблицами...
    #33948506
s@ilor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прочитал всю справку вдоль и поперек. Ничего про Rules on Update, Delete and Insert там не нашел :(.
Да и примеры в справке какие-то дряхлые.
Если есть какой-нить пример кода, скиньте пожалуйста.
...
Рейтинг: 0 / 0
Relations между таблицами...
    #33948509
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Relations между таблицами...
    #33948536
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s@ilorПрочитал всю справку вдоль и поперек. Ничего про Rules on Update, Delete and Insert там не нашел :(.
Да и примеры в справке какие-то дряхлые.
Если есть какой-нить пример кода, скиньте пожалуйста.

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

Спасибо теперь более понятно стало. Если для этого используется триггер, но вот создается он самим ФоксПро. Мне не нужно писать каккой-то свой собственный триггер при вставке, удалении или обновлении. Просто мне бы узнать как можно создать "стандартный" триггер, который создается системой при использовании Referential Integrity Builder.
...
Рейтинг: 0 / 0
Relations между таблицами...
    #33949636
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместе с 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
Relations между таблицами...
    #33949936
s@ilor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ

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


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