C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Помогите., Связывание полей БД.
maikl
Отправлено: 12.12.2003, 11:12


Станционный диспетчер

Группа: Участник
Сообщений: 135



Всем привет . Помогите пожалуйста, у меня проблема вроде бы не сложная, но у меня что то все таки не получается. В моем примере есть 2 базы, нужно одно поле одной базы связать с полем другой БД, что бы данные которые находятся в поле БД которую я связываю, я мог использовать в другой БД. Пробывал использовать Refential Integtity (целостность на уровне ссылок), как я понял это свойство позволяет обеспечивать связи между данными отдельных таблиц. Возможно это даже не то что мне необходимо, но в любом случаи при нажатии на кнопку Defaine у меня выскакивает ошибка "A primary index is required when maintained indexes or referentional integrity are used". Кто нибудь помогите, скажите что можно сделать и как связать эти два поля, я использую СУБД Paradox.
Nick
Отправлено: 12.12.2003, 13:02


Машинист паровоза

Группа: Участник
Сообщений: 247



Наверно ты не сделал ключевое поле в таблицах.

Пример:

Table Tovar

Name Type
============ =======
Tovar_ID N
Name A120
Cena $

Tovar_ID N  — должно быть Primary Key
В Paradox вроде бы надо поставить * (Type — N*)

Table Data
Name Type
============ =======
Data_ID N*
Docs_ID N
Tovar_ID N  — Тоже нужно сделать Secondary Index
KolVo N
Summa $

После этого можно установить связь между
Как сделать Secondary Index не помню давно в Paradox не работал.

Tovar->Tovar_ID <-> Data->Tovar_ID
отношение один-к-многим записям


maikl
Отправлено: 13.12.2003, 06:14


Станционный диспетчер

Группа: Участник
Сообщений: 135



Спасибо за совет, все сделал как ты сказал, сделал вторичные индексы по полям которые связываю, хотелось бы узнать как теперь отобразить в DBGride во вспомогательной таблице связанные данные из головной таблицы. Я делал так :

Table1 и DataSource1 — компоненты головной таблицы .
Table2 и DataSource2 — компоненты вспомогательной таблицы .

В свойстве MasterSource компонета Table1 я ставлю DataSource2,
а в свойстве MasterFields я уже непосредственно связываю эти два поля, может я что то делаю не так, после всего этого ничего не происходит.
Nick
Отправлено: 13.12.2003, 09:37


Машинист паровоза

Группа: Участник
Сообщений: 247



Я не делал такого с таблицами.
Вообще стараюсь работать с Query

Query1 "Select * from documents"  — ключевое поле Documents_ID
Query2 "Select * from docsdata dd where dd.documents_ID = :Documents_ID"

DS1 — DataSource Query1
DS2 — DataSource Query2

Если у Query2 поставить DataSource = DS1, то в параметр :Documents_ID запроса Query2 будет подставляться Documents_ID текущей записи Query1 и обновляться набор записей Query2 при Scroll Query1. Сдесь главное что бы имя поля главного запроса совпадало с параметром в подчиненном запросе.

Вообще работаю с IBase компоненты IBX перехожу на FIBPlus
с ADO и BDE работал мало. Там может быть немного по другому.








Вернуться в Работа с базами данных в C++Builder