![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по связи таблиц с последующим добавлением записей в подчин [D6, Paradox]
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]
> что вы хотели узнать?
ответ, конечно. а что еще?:)
> может конечно не то слышал.
не то...меньше слушайте. читать надо - помогает.