Я использую TClientDataSet
в качестве локального набора данных без концепции провайдера. После работы с ним вызывается метод, который должен сгенерировать соответствующие операторы SQL, используя StatusFilter
для разрешения изменений (генерируйте SQL в основном).
Сначала это выглядело легко после чтения документации (установите StatusFilter to [dsInsert]
, обработайте все вставки SQL, установите StatusFilter to [dsModified]
обработайте все обновления, то же самое с удалениями), но после нескольких тестов теперь выглядит далеко не тривиально, например:
Если я добавлю запись, то отредактирую ее: настройка StatusFilter to [dsInserted]
отобразит ее, но с исходными данными.
Если я добавляю запись, затем редактирую, а затем удаляю ее: запись появляется также с StatusFilter set to [dsInserted] and [dsModified]
.
и другие подобные ситуации ..
1) Я знаю, что если сначала я обработаю все вставки, то все обновления, то все удаляемые базы данных будут обновлены в правильном состоянии, но при таком подходе это выглядит далеко не так (генерация бесполезных операторов SQL).
2) Я пытался получить доступ к информации PRecInfo(ClientDataSet.ActiveBuffer + ClientDataSet.RecordSize).Attribute
(dsRecNew, dsRecOrg и т. Д.), Но все еще не удалось разрешить логику.
3) Я могу запрограммировать логику для ее разрешения, например, перед обработкой и вставкой, установить StatusFilter to [dsDeleted]
и найти по первичному ключу, если запись, чтобы увидеть, будет ли она после этого удалена ... то же самое с правками, перед вставкой , проверяя, обновлялась ли запись после того, как вставить sql в обновленную версию и так далее ... но это должно быть проще ..
someone Кто-то пытался решить это элегантным и простым способом? ¿Я что-то упустил? Спасибо