Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Работа с таблицами


Автор: Nic 2.6.2004, 10:37
Помогите уважаемые программисты разобраться в следующей проблеме. Как программно сделать визуальное выделение определенной ячейки таблицы №2, при клике мышью по определенной ячейке таблицы №1.
Исходные данные: на форме две таблицы, в первой - номера строк текстового файла, во второй - содержание этих строк. Обьеденить таблицы в одну не представляется возможным, поскольку одна строка из таблицы №2 может входить несколько раз под разными номерами в таблицу №1.
Заранее благодарен за любой ответ.

Автор: Cashey 2.6.2004, 11:45
если речь идет о TTable и привязанным к ним гридам, то наложив на таблицу внешнюю связь (перекрестные ссылки). Если таблица Paradox, то это можно сделать в Database Desktop пункт Referential Integrity

Автор: Nic 2.6.2004, 12:28
Спасибо! Речь шла о TTable, сейчас попробую. smile.gif

Автор: lavish 3.6.2004, 09:39
Не советую делать что-либо вроде Referential Integrity в Database Desktop, потому как при работе с Paradox через BDE время от времени таблица портится, при интенсивной работе (в инете кстати есть куча программок по исправлению таких таблиц). И эти ограничения иногда мешают при исправлении вручную, куда проще завести необходимые индексы и соответствующие ограничения предусмотреть непосредственно в программе, если кроем Вашей проги никто с базой работать не будет то это способ удобнее.

Автор: Cashey 3.6.2004, 10:26
Согласен, это не очень надежно, но это проще. Раз у автора вопроса такой вопрос возник, то лучше сначало понять, что такое связанные таблицы, а потом, на основе этого опыта прописывать их программно или как-то еще обходить.

Автор: x77 3.6.2004, 15:17
я как-то плохо понял вопрос.... но-моему, это можно сделать либо через Master/Detail, либо динамическим фильтром. А прописывание ссылочной целостности в базе на отображении гридов не скажется никак.

Автор: Cashey 3.6.2004, 16:14
ну начинается smile.gif эт как же не скажется? связь для того и устанавливают, что бы при перемещение курсора в одной таблице автоматически он перемещался и во второй. А вот как такого добиться динамическим фильтром я себе плохо представляю smile.gif

Автор: x77 3.6.2004, 16:34
блин, у меня здесь десктопа нету smile.gif только дома.

связь устанавливают для соблюдения ссылочной целостности. по сабжу, чтобы во вторую (дочернюю) таблицу нельзя было вставить запись о строке, принадлежащей файлу,которого не существует в первой (родительской) таблице.

но готов спорить на пиво, что прописываение foreing keys в DBD никак не скажется на отображении таблиц в гридах.

Cashey, ты хочешь сказать, что если взять две TTable, два TDataSource, подключить их к двум TDbGrid, и назначить соотв. физическим таблицам referential integrity, при перемещении курсора по одной таблице он начнёт скакать по второй? этого не будет. я готов спорить на много пива smile.gif

а динамический фильтр - это в Table1.AfterOpen и Table1.AfterScrol прописывание чего-то типа
Код

 Table2.Filter := 'MyKeyField=' + Table1MyKeyField.AsString;
 Table2.Filtered := TRUE;

Автор: Medved 5.6.2004, 21:50
1. Через TTable.MasterSource (Как? - F1);
2. Через SQL (TQuery);

Автор: Nic 7.6.2004, 09:25
Огромное спасибо всем кто принял участие в обсуждении моего вопроса!!! Проблему я решил ссылками, но по ходу решения узнал много нового :-) .

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)