Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по связи таблиц с последующим добавлением записей в подчин [D6, Paradox]


Страницы:   1 2

leonidus ©   (2004-07-21 09:54:00) 

Уже третьи сутки бьюсь-ничего не выходит. Надо просто связать две парадоксовские таблицы с возможностью потом добавлять записи в подчиненную таблицу. 1-я таблица содержит названия поликлиник там всего одно поле (номер поликтиники) это вторичный индекс, 2-я таблица содержит два поля - номер поликлиники (вторичный индекс) и фамилии врачей. Вот по полю "номер поликлиники" мне их и надо связать. Таблицы связываю еще на этапе конструирования, Table2.MasterSource=DataSource1 а затем в окне Field Link Designer выбираю поле из первой таблицы и из второй, создаю связь - все нормально. Теперь хочу добавить новую запись в подчиненую таблицу вот так:

form1.table2.Insert;
form1.table2.FieldByName('Poleklinika').AsString:=edit1.text;
form1.table2.FieldByName('FIO').AsString:=edit2.text;
form1.table2.post;
form1.table2.Refresh;

и выдается ошибка "Index is read only". Почему же "только для чтения", что ж теперь ничего добавить нельзя будет?


leonidus   (2004-07-23 10:24:00) [1]

всем большое спасибо.


leonidus   (2004-07-23 10:24:00) [2]

>Draught спасибо еще раз - получилось.


bushmen   (2004-07-23 10:21:00) [3]

Select FIO from "vrachi.DB", "policl.db"
where vrachi.Poleklinika=policl.Poleklinika
and policl.Poleklinika = :Policlinika


Соловьев   (2004-07-23 09:55:00) [4]

2 leonidus
создай новое приложение положи 2 таблицы, подключи их к алиасу DBDEMOS
там есть 2-е таблицы customer.db и orders.db свяжи их по полю CustNo. И попробуй вставлять значения.


leonidus   (2004-07-23 09:50:00) [5]

>Draught теперь понятно, по пробую. Спасибо.


Draught   (2004-07-22 14:50:00) [6]

leonidus, да вроде вся понятно
в главной таблице поле автоинкрементное используется для автоматического нумерования поликлиник, т.е. они всегда будут уникальными...

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

и для связи теперь нам нужно использовать в подчиненной таблице не весь ключ, а лишь одно поле, для этого мы это поле выделяем в отдельный Secondary Index...

вот вроде и все...
еще замечание, в подчиненной таблице можно и не использовать автоинкрементное поле, но тогда нужно, что бы значение ключевого поля было НЕ УНИКАЛЬНЫМ


leonidus   (2004-07-22 13:56:00) [7]

where vrachi.Poleklinika=:Poleklinika
все равно - таже ошибка

>Draught не совсем понятно, но попробую


Draught   (2004-07-22 13:30:00) [8]

leonidus, можно... только тебе тогда нада будет изменять значение в ключевом поле, а это опять же может вызвать твою ошибку... попробуй просто изменить ключевое поле в твоей таблице, скорее всего ты получишь свою ошибку... а тут ты ключевые поля не трогаешь, и значения в них автоматически выставляются...


Johnmen   (2004-07-22 13:23:00) [9]

where vrachi.Poleklinika=:Poleklinika


leonidus   (2004-07-22 13:13:00) [10]

>Draught а зачем автоинкрементные поля, что без них связать нельзя?


leonidus   (2004-07-22 13:04:00) [11]

Составляю запрос в Query2

Select FIO from "vrachi.DB"
where vrachi.Poleklinika=policl.Poleklinika

Выставляю Query2.Active:=true
получаю ошибку "Invalid field name. Poleklinika"
Что кривой запрос?


Draught   (2004-07-22 12:49:00) [12]

вообщем ты что-то где-то неправильно делаешь...
я сделал бы так...
в главной таблице поле ID типа Autoincremet, его же и ключевым...
еще одно поле - название поликлиник Name типа Alpha

теперь о подчиненной таблице

поле ID - Autoincremet и поле ID_Pol типа Integer - оба ключевые...
так же Secondary Index в подчиненной таблице по полю ID_Pol...

а теперь связку сделаешь нормально, в главной таблице выбираешь Primary Index а в подчиненной Secondary Index в результате целостность ключа не нарушается и связь есть...


leonidus   (2004-07-22 11:40:00) [13]

да не могу я ответить на [3] - связь уже не работает: выставляю у подчиненной табл. MasterSource а после того как в окне Field Link Designer содаю связь между полями и жму "Ок" появляеся ошибка "Table2: Field index out of range"

>Johnmen я не силен в SQL а там же надо запросы создавать...


Соловьев   (2004-07-22 09:32:00) [14]

неужели ответить на [3] нельзя?


Johnmen   (2004-07-22 09:23:00) [15]

DataSource у детального Query2 указывает на мастерный Query1. При этом в дет.Query2 в запросе в WHERE д.б.добавлено FieldInQ2 = :FieldInQ1 (м-д связка), где FieldInQ1 - поле из Q1.


leonidus   (2004-07-22 07:40:00) [16]

>Johnmen "Связать в приложении не проблема. Стандартным образом.
" ну так как же связать в этом и проблема?


Johnmen   (2004-07-21 16:31:00) [17]

>leonidus

Связать в приложении не проблема. Стандартным образом.
Исчезнут проблемы с сабжем.
Движок менять не надо.
Вычисляемые поля неясно зачем.


Соловьев   (2004-07-21 16:29:00) [18]

$(delphi)\db\mastapp\


MORA   (2004-07-21 16:26:00) [19]

и еще переименуй эти таблицы, потом удали все поля, переиндексируй, добавь вычисляемые поля (обязательно сделай их невидимыми) и смени движок БД.


Соловьев   (2004-07-21 16:18:00) [20]


> что вы хотели узнать?

ответ, конечно. а что еще?:)

>  может конечно не то слышал.

не то...меньше слушайте. читать надо - помогает.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо