Форум: "Базы";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
ВнизВопрос по связи таблиц с последующим добавлением записей в подчин Найти похожие ветки
← →
leonidus (2004-07-21 09:54) [0]Уже третьи сутки бьюсь-ничего не выходит. Надо просто связать две парадоксовские таблицы с возможностью потом добавлять записи в подчиненную таблицу. 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-21 14:49) [1]Мастера подскажите пожалуйста, очень надо.
← →
Johnmen © (2004-07-21 15:03) [2]А если отключить связь Table2.MasterSource ?
← →
Соловьев © (2004-07-21 15:05) [3]
> и выдается ошибка "Index is read only". Почему же "только
> для чтения", что ж теперь ничего добавить нельзя будет?
дабл клик по детайл таблице - есть поля?
← →
leonidus (2004-07-21 15:49) [4]Самое интересное, что даже при отключенной связи та же самая ошибка появляется....
← →
leonidus (2004-07-21 15:56) [5]Если просто очистить значения Table2.MasterSource и Table2.MasterFields то ошибка все равно появляеся, но пропадает если убить все упоминания о индексе - я прошелся по всем методам в инспекторе объектов, обнулил IndexDef и все что увидел с указанием индексного поля. Блин, теперь не удается связать таблицы.... в чем дело, может я какие-то настройки сбрасываю?
← →
Соловьев © (2004-07-21 16:02) [6]что по поводу [3]?
← →
Johnmen © (2004-07-21 16:03) [7]М.б. радикально ? Отказаться от TTable в пользу TQuery ?
← →
leonidus (2004-07-21 16:17) [8]>Cоловьев не понял [3] что вы хотели узнать?
>Johnmen а что изменится от перехода? Я где-то краем уха сдышал что если обе таблицы работают через TQuery то связать их не удасться, может конечно не то слышал.
← →
Соловьев © (2004-07-21 16:18) [9]
> что вы хотели узнать?
ответ, конечно. а что еще?:)
> может конечно не то слышал.
не то...меньше слушайте. читать надо - помогает.
← →
MORA (2004-07-21 16:26) [10]и еще переименуй эти таблицы, потом удали все поля, переиндексируй, добавь вычисляемые поля (обязательно сделай их невидимыми) и смени движок БД.
← →
Соловьев © (2004-07-21 16:29) [11]$(delphi)\db\mastapp\
← →
Johnmen © (2004-07-21 16:31) [12]>leonidus
Связать в приложении не проблема. Стандартным образом.
Исчезнут проблемы с сабжем.
Движок менять не надо.
Вычисляемые поля неясно зачем.
← →
leonidus (2004-07-22 07:40) [13]>Johnmen "Связать в приложении не проблема. Стандартным образом.
" ну так как же связать в этом и проблема?
← →
Johnmen © (2004-07-22 09:23) [14]DataSource у детального Query2 указывает на мастерный Query1. При этом в дет.Query2 в запросе в WHERE д.б.добавлено FieldInQ2 = :FieldInQ1 (м-д связка), где FieldInQ1 - поле из Q1.
← →
Соловьев © (2004-07-22 09:32) [15]неужели ответить на [3] нельзя?
← →
leonidus (2004-07-22 11:40) [16]да не могу я ответить на [3] - связь уже не работает: выставляю у подчиненной табл. MasterSource а после того как в окне Field Link Designer содаю связь между полями и жму "Ок" появляеся ошибка "Table2: Field index out of range"
>Johnmen я не силен в SQL а там же надо запросы создавать...
← →
Draught © (2004-07-22 12:49) [17]вообщем ты что-то где-то неправильно делаешь...
я сделал бы так...
в главной таблице поле ID типа Autoincremet, его же и ключевым...
еще одно поле - название поликлиник Name типа Alpha
теперь о подчиненной таблице
поле ID - Autoincremet и поле ID_Pol типа Integer - оба ключевые...
так же Secondary Index в подчиненной таблице по полю ID_Pol...
а теперь связку сделаешь нормально, в главной таблице выбираешь Primary Index а в подчиненной Secondary Index в результате целостность ключа не нарушается и связь есть...
← →
leonidus (2004-07-22 13:04) [18]Составляю запрос в Query2
Select FIO from "vrachi.DB"
where vrachi.Poleklinika=policl.Poleklinika
Выставляю Query2.Active:=true
получаю ошибку "Invalid field name. Poleklinika"
Что кривой запрос?
← →
leonidus (2004-07-22 13:13) [19]>Draught а зачем автоинкрементные поля, что без них связать нельзя?
← →
Johnmen © (2004-07-22 13:23) [20]
where vrachi.Poleklinika=:Poleklinika
← →
Draught © (2004-07-22 13:30) [21]leonidus, можно... только тебе тогда нада будет изменять значение в ключевом поле, а это опять же может вызвать твою ошибку... попробуй просто изменить ключевое поле в твоей таблице, скорее всего ты получишь свою ошибку... а тут ты ключевые поля не трогаешь, и значения в них автоматически выставляются...
← →
leonidus (2004-07-22 13:56) [22]where vrachi.Poleklinika=:Poleklinika
все равно - таже ошибка
>Draught не совсем понятно, но попробую
← →
Draught © (2004-07-22 14:50) [23]leonidus, да вроде вся понятно
в главной таблице поле автоинкрементное используется для автоматического нумерования поликлиник, т.е. они всегда будут уникальными...
в подчиненной таблице может несколько записей относится к одной поликлинике и что бы уникальность каждой записи в подчиненной таблице сохранялась, что бы не вылетала ошибка о дублировании ключа следует тоже добавить поле автоинкрементное в ключ, при этом каждая запись гарантировано будет уникальной, теперь ошибок с ключами мы избежали...
и для связи теперь нам нужно использовать в подчиненной таблице не весь ключ, а лишь одно поле, для этого мы это поле выделяем в отдельный Secondary Index...
вот вроде и все...
еще замечание, в подчиненной таблице можно и не использовать автоинкрементное поле, но тогда нужно, что бы значение ключевого поля было НЕ УНИКАЛЬНЫМ
← →
leonidus (2004-07-23 09:50) [24]>Draught теперь понятно, по пробую. Спасибо.
← →
Соловьев © (2004-07-23 09:55) [25]2 leonidus
создай новое приложение положи 2 таблицы, подключи их к алиасу DBDEMOS
там есть 2-е таблицы customer.db и orders.db свяжи их по полю CustNo. И попробуй вставлять значения.
← →
bushmen © (2004-07-23 10:21) [26]Select FIO from "vrachi.DB", "policl.db"
where vrachi.Poleklinika=policl.Poleklinika
and policl.Poleklinika = :Policlinika
← →
leonidus (2004-07-23 10:24) [27]>Draught спасибо еще раз - получилось.
← →
leonidus (2004-07-23 10:24) [28]всем большое спасибо.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.037 c