Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Вниз

Отображение данных таблицы через DBGrid   Найти похожие ветки 

 
RRA   (2005-01-04 13:55) [0]

Добрый день. Возникла следующая проблема.
Есть 2 таблицы. Между ними в Database Desktop установил ссылочную целостность через 2 поля (оба поля - Long Integer). Кроме того в главной таблице это поле является ключевым. Теперь при отображении главной таблицы через DBGrid на форме значения этого ключевого поля, через которое задавалась целостность, просто не отображается. Все остальные поля таблицы выводятся, редактируются, условие целостности работает тоже корректно. Может целостность здесь и не причем, но до нее все отображалось корректно. Все свойства для полей таблицы, для столбцов DBGrid"a пересмотрел - нигде неувязок нет... В чем может быть проблема.
Спасибо!


 
msguns ©   (2005-01-04 14:18) [1]

Используется TTable ?


 
RRA   (2005-01-04 14:23) [2]

он самый.


 
msguns ©   (2005-01-04 15:00) [3]

Если один датасет с мастер-таблицей и больше нет других НД, то филды должны отображаться все независимо от того, что там указано в DBD (вообще не рекомендую пользоваться этим отстойником, для создания таблиц лучше всего средства SQL или, на худой конец методы всеми "любимой" TTable).
Наличие полей проверяется двойным кликом на компоненте (в данном случае TTable) Если и там нет ключевого поля, то надо его добавить кл. Ins->Add Field
А вообще надо поподробнее ответить на след.вопросы:
1. На форме отображаются сразу две таблицы-мастер и дочерняя ?
2. В дочерней (опять TTable) в св-ве MasterSource стоит ссылка на TTable мастера ?
3. Какая необходимость для связки использовать 2 поля ? Если же они используются (имеется в виду поля мастера, например "Дата" и "Номер"), то в дочерней таблице эти поля должны дублироваться и, кроме них, должно быть по крайней мере еще одно поле-ключ (Primary Key) для обеспечения "мультирекордности" дочерних записей. А вообще такая схема порочна. Лучше использовать суррогаты-автоинкременты. Да и вообще парадокс готовит "сюрпризы" при работе на сети.


 
RRA   (2005-01-04 15:47) [4]

Попробую описать подробней. Необходимо навоять небольшую систему для хранения и быстрого доступа к данным по неким проектам.
В главной таблице информация по самим проектам (номер(Key), дата, название), в дочерней - информация про авторов (имя, некий индивидуальный для автора код(Key), примечание + номер(из главной таблицы) - через номера и связываю таблицы). Почему возник такой вопрос. У проекта может быть до 5-8 авторов. При использовании DBase, без проблем (по крайней мере видимых)все реализуется, но повторяемосто информации колоссальная. Решил использовать Paradox (может и зря :)), разбив на 2 таблицы + применив целостность (поленился на DBase отслеживать вручную). Все вроде было нормально, пока не вылез такой глюк.  
Теперь по вопросам:
При клике по TTable - поля есть все. Проблемное поле в DBGrid"e отображается, но не отображаются его значения, как будто оно пустое в таблице.
1)На форме отображается сразу и мастер и дочерняя таблицы. Для каждой используется соответственно свой DataSource, TTable и DBGrid.
2)В дочерней TTable в свойстве MasterSource ссылка на TTable мастера не стояла - поставил. Эффект тот же, т.е. никакого:)
3)Маленькое уточнение - для связи использую одно! поле (номер проекта), которое и дублируется в дочерней таблице, но там номер уже может повторяться. Я потом помимо связи еще использую это поле для реализации поиска через вложенные SQL-запросы.
Вроде постарался максимально описать. Если есть более гибкие решения подскажите. Буду признателен:)..


 
msguns ©   (2005-01-04 16:07) [5]

Ясно вроде.
1. Почему не отображается поле ключа: В редакторе филдов мастера наведитесь на это поле и посмотрите в окне инспектора объектов его события. В частности событие OnGetText. Если там что-то есть, уберите ссылку.
Если и после этого не будет отображаться, посмотрите другие св-ва этого же поля: выравнивание, тип поля и т.д.
Если все в норме, дважды щелкните на гриде и в редакторе колонок сделайте аналогичную ревизию.

2. Номер проекта - ключ.
Не советую использовать в качестве ключей реальные объекты. Т.к. при необходимости изменения их значений будут большие траблы по замене их в дочерних таблицах. Рекомендую юзать в качестве прайм-ключей таблиц суррогатные ключи, которые обычно делатся автоинкрементыми (для парадокса при создании новой записи лучше всего использовать спец.процедуру определения нового ключа, заключающуюся в том, что в цикле надо выполнять два запроса: 1-й определяет макс.значение колонки ключа и добавляет к нему 1, 2-й пытается вставить запись с таким ключом. Если проходит, то цикл обрывается и значение ключа возвращается приложению, которое вместо вставки использует модификацию "чистой" записи, заполняя все поля, кроме ключа.

3. Топология таблиц. Очень часто для некоторой "мультистрочной" информации (ради которой, собственно, и создаются детал-таблицы) можно вполне использовать обыкновенный стринг (в парадоксе он мин. 1024 симв.), которое визуализируется как мемо (т.е.каждый "терм" идет отд.строкой). Поиск по таким полям с использованием LIKE выполняется быстрее, чем в мемо-полях и не нужны доп.таблицы. Но это в том случае, если дочерний "терм" не является сложным объектом, т.е. содержащим несколько полей, каждое из которых может еще быть самостоятельным объектом. В этом случае только "дочерность".

4. Забыть про TTable и перейти к TQuery. Редактировать не в гридах и вообще не через DB-Aware кнтролы, а через модальные формы: одна форма на каждую таблицу. Если уж нельзя обойтись без редактирования в гридах (редактирование дочерних связанных записей может быть неудобно в системе "за раз одну запись"), то юзать примочки к TQuery, делающие датасеты редактируемыми (Что-то вроде TUpdateObject для BDE, если не ошибаюсь).


 
RRA   (2005-01-04 16:39) [6]

К сожалению без доп. таблиц не обойтись.
Что касается TTable, то у меня присутствует возможность редактировать и добавлять записи через отдельные модальные формы для каждой таблицы наряду с редактированием в гридах. Так что как бы можно вообще завалить все это хозяйство и работать спокойно, но хотелось бы все-таки разобраться..
По первому пункту вопросов - везде все в норме, ничего левого и лишнего нет ни в свойствах таблицы ни в свойствах филда грида.Видимо действительно какие-то грабли с ключем - связал филд DBGrid"a с другим полем этой же главной таблицы - все отображается на ура..

Буду разбираться. Спасибо за помощь.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.041 c
1-1106428527
profesoralex
2005-01-23 00:15
2005.02.06
Kak mozhno na odnoy paneli uvidet papki VMESTE s failami


1-1106317905
Zevs_a
2005-01-21 17:31
2005.02.06
Иерархические структуры


1-1106329643
Troll
2005-01-21 20:47
2005.02.06
Рабта с компонентами


1-1106263091
Gladiator
2005-01-21 02:18
2005.02.06
Форма не реагирует на нажатие Del


1-1106656658
Leon1
2005-01-25 15:37
2005.02.06
Паненель с иконками окошек?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский