Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.15;
Скачать: CL | DM;

Вниз

Вопрос по связи таблиц с последующим добавлением записей в подчин   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.048 c
9-1083399484
Smoke_Gomel
2004-05-01 12:18
2004.08.15
Обращение к свойствам спрайта через процедуру другого спрайта.


14-1090970986
миша.
2004-07-28 03:29
2004.08.15
помогити поймать приступника


3-1090315249
Kaginava
2004-07-20 13:20
2004.08.15
работа с MySQL


1-1091547036
Hyboid
2004-08-03 19:30
2004.08.15
Перехват клавиатуры


6-1084746834
w666w
2004-05-17 02:33
2004.08.15
ПОМОГИТЕ!!! как прикрутить к IEParser у события WebBrowser а