Редактируемые подробные записи в Delphi DBGrid

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

Затем у меня есть dbgrid, привязанный к «главному» запросу ADO, который находит всех сотрудников, отвечающих выбранным критериям диапазона дат, отдела, строки поиска по имени, суммируя часы продуктивного потерянного времени.

У меня есть еще одна dbgrid, привязанная к «подробной» таблице ADO, содержащей записи об отсутствии.

Желаемый эффект заключается в том, что детальная таблица dbgrid должна содержать только те записи из таблицы «Отсутствия», которые соответствуют строке, выбранной в основной записи (и «основная» таблица «Сотрудники», и «подробная» таблица «Отсутствие» содержат общее поле «Код сотрудника»).

Хотя я могу добиться этого с помощью запросов ADO, созданных «на лету», изменяя запрос каждый раз, когда пользователь переходит к другой основной записи персонала, я надеялся использовать детальную DBGrid в качестве основного метода удаления, обновления и добавления дополнительных записей об отсутствии. , в комплекте с поиском в сетке; поэтому пользователь может выбирать типы записей, не запоминая код для этого типа.

Я также хотел бы, чтобы изменения в этой детализированной сетке отражались в сводках в главной dbgrid.

Я добился этого, используя подробный ADOTable, связанный как MasterDetail с запросом персонала, но мне нужно установить для параметра filter значение True и управлять событием onfilterevent в коде; но по мере увеличения размера базы данных это становится все медленнее и медленнее.

Могу ли я что-нибудь сделать, чтобы улучшить эту производительность, или мне придется иметь детальную dbgrid только для чтения, а все записи об отсутствии вводить через другую форму или панель?


person robert    schedule 14.04.2011    source источник
comment
Вы связали основные и подробные наборы данных? поскольку детальный DbGrid должен отражать набор данных detial   -  person Najem    schedule 14.04.2011
comment
Да, но мне нужно использовать событие onfilterevent также в таблице сведений ADOTable, так как мне нужно фильтровать также диапазон дат. Большая проблема заключается в том, что использование этого метода очень медленное, так как таблицы становятся больше. Кроме того, использование AfterPost после записи подробной записи в подробную таблицу, чтобы я мог получить новую сумму часов, означает, что я должен использовать закладки, чтобы вернуться к выбранной основной записи, и это не рекомендуется при использовании запросов в качестве возвращаемый набор данных может отличаться, если несколько пользователей обновляют базу данных.   -  person robert    schedule 15.04.2011


Ответы (1)


Дополнительная информация о преобразовании таблицы в элемент другого набора данных

ADOTable2.MasterSource := DataSource1;
ADOTable2.MasterFields := 'EmployeeID';


Я также хотел бы, чтобы изменения в этой таблице сведений отражались в сводках в главной сетке баз данных.
После редактирования таблицы сведений и публикации любых изменений вы можете использовать AfterPost для пересчета сводок.

person Najem    schedule 14.04.2011