Я делаю приложение в базе данных Delphi 6 + MySQL, используя стандартные компоненты, учитывающие данные, и dbExpress.Приложение позволяет пользователям просматривать записи в сетке и редактировать данные (вставлять и / или удалять записи) на стороне клиента.Эти изменения данных затем записываются в базу данных только после нажатия кнопки «Отправить».Все это прекрасно работает и имеет следующую настройку:
Controls : 1. DBGrid1 связан с DataSource1 для визуального отображения данных.2. DataSource1 связан с ClientDataSet1, чтобы предложить данные для отображения DBGrid.3. ClientDataSet1 связан с DataSetProvider1 для предоставления данных на стороне клиента для редактирования.4. DataSetProvider1 связан с SQLDataSet1, который выбирает записи из одной таблицы БД.5. SQLDataSet1 связан с SQLConnection для обеспечения подключения к базе данных MySQL.
Действия : 1. Пользователь вставляет запись: я использую ClientDataSet1.InsertRecord;2. Пользователь удаляет запись: я использую ClientDataSet.Delete;3. Пользователь отправляет данные: я использую ClientDataSet1.ApplyUpdates (-1);
Все это прекрасно работает с точки зрения обработки данных и публикации данных (с учетом небольшого взлома DataSetProvider1BeforeUpdateRecord для удаления записей).
СЕЙЧАС ДЛЯ МОЕЙ ПРОБЛЕМЫ: Когда пользователь впервые загружает форму, DBGrid1 отображает все исходные записи, удаляет все удаленные записи.Но когда пользователь вставляет новую запись в ClientDataSet1, пустая запись отображается в DBGrid1.Фактические данные не теряются и не устанавливаются в NULLS. Как и в случае ClientDataSet1.ApplyUpdates, эта запись правильно записывается в БД.
Я знаю, что TClientDataSet имеет свойство data для исходных данных и свойство Delta для отредактированных данных.Могут ли эти два свойства с данными отображаться в одной DBGrid одновременно и, тем не менее, позволять пользователю редактировать данные?
Я посмотрел более 30 ресурсов и демонстрационных приложений и все избежали этой проблемы.Можно ли это сделать?