Форум: "Базы";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
ВнизПолучение текущей записи в DBGrid e Найти похожие ветки
← →
able © (2004-12-12 09:27) [0]Здравствуйте, Мастера!
Как узнать на какую строку кликнул пользователь в DBGrid"e и получить, допустим, значение второй колонки этой строки?
Источник данных - ADOQuery
← →
Zacho © (2004-12-12 09:34) [1]Эта запись и будет текущей в НД, подключенном к гриду.
Т.ч., например: MyDBGrid.DataSource.DataSet.FieldByName("..").Value ...
Или: МуDataSet.FieldByName("..").Value ..
← →
able © (2004-12-12 09:39) [2]Zacho © (12.12.04 09:34) [1]
А как получить-то имя поля?
← →
able © (2004-12-12 10:04) [3]Как имя поля получить я понял..
Но как получить номер строки?
← →
Zacho © (2004-12-12 10:07) [4]able © (12.12.04 10:04) [3]
Но как получить номер строки?
Зачем ???
Выбранная в гриде запись и так будет текущей в НД.
← →
able © (2004-12-12 10:12) [5]Zacho © (12.12.04 10:07) [4]
Я понял как находить выбранное поле.
А у меня ключевое поле, по которому связаны 2 таблицы.
И по клику на строку открывается окошко с другой таблицей.
← →
Zacho © (2004-12-12 10:29) [6]able © (12.12.04 10:12) [5]
Ещё раз подробнее объясни, что тебе надо. А то я так и не понял, в чём конкретно твоя проблема.
← →
able © (2004-12-12 10:41) [7]Zacho © (12.12.04 10:29) [6]
Ок. В общем, мне надо связать 2 таблицы. Таблица с предприятиями и у каждого предприятия свой прайс. При клике на DBGrid (с предприятиями) вылезает новое окошко, где тоже DBGrid, где прайсы для выделенного предприятия.
← →
Dell3r © (2004-12-12 11:03) [8]Поддержка вложенных таблиц
Компонент TDBGrid теперь может отображать вложенные таблицы. Для иллюстрации этой возможности воспольуемся таблицами customer.db, orders.db и items.db, поставляемыми вместе с Delphi. Поместим на форму три компонента TTable, три компонента TDataSourse, один компонент TClientDataSet и один компонент TProvider. Установим следующие свойства этих компонентов:
Компонент Свойство Значение
DBGrid1 DataSource DataSource3
DBNavigator DataSource DataSource3
Table1 DatabaseName "DBDEMOS"
TableName "customer.db"
Active True
DataSource1 DataSet Table1
Table2 DatabaseName "DBDEMOS"
TableName "orders.db"
IndexFieldNames "CustNo"
MasterFields "CustNo"
MasterSource DataSource1
Active True
DataSource2 DataSet Table2
Table3 DatabaseName "DBDEMOS"
TableName "items.db"
IndexFieldNames "OrderNo"
MasterFields "OrderNo"
MasterSource DataSource2
Active True
Provider1 DataSet Table1
ClientDataSet1 ProviderName "Provider1"
Active True
DataSource3 DataSet ClientDataSet1
Сами таблицы формата Paradox, естественно, не поддерживают поля, содержащие вложенные таблицы, но такие поля поддерживает компонент TClientDataSet со страницы MIDAS палитры компонентов. Связав его с компонентом Table1 посредством компонента Provider1, мы получим набор данных, содержащий поле Table2 типа TDataSetField, а внутри вложенной таблицы - поле Table3 того же типа:
Такое представление данных даже в случае использования настольных СУБД весьма удобно просто потому, что оно решает общеизвестную проблему нехватки места на форме при наличии нескольких связанных таблиц. Единственное, о чем при этом следует позаботиться, это вызов метода ApplyUpdates компонента TClientDataSet (например, в обработчике события, связанного с выбором какого-либо пункта меню или с нажатием на кнопку):
ClientDataSet1.ApplyUpdates(-1);
Если не использовать этот метод, данные будут сохраняться только в кэше, которым фактически и является компонент TClientDataSet, а не в самих таблицах.
← →
able © (2004-12-12 11:06) [9]Dell3r © (12.12.04 11:03) [8]
Выдержит ли DBGrid 2000предприятий, где у каждого предприятия прайс до 60000 позиций?
← →
Zacho © (2004-12-12 11:33) [10]able © (12.12.04 10:41) [7]
Сразу скажу, с ADO и Access не работаю. Но никакой принципальной разницы между ADO и другими компонентами доступа и Access и другими СУБД в данном случае нет.
Итак, у тебя есть таблицы, связанные Master-Detail (предприятия - Master, прайсы - Detail). В мастере должен быть первичный ключ (или UNIQUE CONSTRAINT, или что там в Access), а в детайл-таблице поле - ссылка на ПК в мастере. Тебе просто нужно выбрать из детайл-таблицы все записи, у которых значение этого поля-ссылки равняется значению ПК текущей записи мастера. Это можно сделать или с помощью WHERE в запросе или с помощью св-ва Filter.
Например, в таблице предприятий есть поле ID - первичный ключ, а в таблице прайсов поле ID_PREDPRIYATIE - ссылка на поле ID в таблице предприятий. Пусть набор данных с предприятиями называется MasterDataSet, c прайсам - DetailDataSet, таблица прайсов - PRICE. Тогда:
1. Используем фильтр.
При открытии окна с прайсами делаем что-то типа:
DetailDataSet.Filter:="ID_PREDPRIYATIE="+MasterDataSet.FieldByName("ID").AsString;
2. Используем запрос с WHERE.
В DetailDataSet пишем запрос вида : SELECT * FROM PRICE WHERE ID_PREDPRIYATIE=:ID
Далее есть два способа:
2a) В DetailDataSet.DataSource устанавливаем DataSource, связанный с MasterDataSet.
2б) Перед открытием запроса в DetailDataSet присваиваем параметру ID значене поля ID из MasterDataSet.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c