Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-1090926424
Knight
2004-07-27 15:07
2004.08.15
Компактный электронный справочник по инструкциям BASM...


14-1090765251
Baron
2004-07-25 18:20
2004.08.15
Всем любителям НЛО посвящается...


8-1086001790
AlexT
2004-05-31 15:09
2004.08.15
Как рограмно сменить разрешение экрана?


10-1029238605
aserov
2002-08-13 15:36
2004.08.15
Как сервер автоматизации обрабатывать массив структур


6-1087383184
Dennisius
2004-06-16 14:53
2004.08.15
Отправить Письмо (Имея только E-mail)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский