Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.035 c
6-1098193212
Sicilla
2004-10-19 17:40
2005.01.16
HostName


1-1104141631
Aleksandr.
2004-12-27 13:00
2005.01.16
Как у главного меню поменять цвет?


9-1095934427
MANGOL
2004-09-23 14:13
2005.01.16
сжатие графики


1-1103985482
emfw
2004-12-25 17:38
2005.01.16
Неизвестный файл


14-1104145490
AlexG
2004-12-27 14:04
2005.01.16
В COM исключительные ситуации





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