TClientDataSet и обработка записей с помощью StatusFilter - PullRequest
7 голосов
/ 25 ноября 2011

Я использую 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 Кто-то пытался решить это элегантным и простым способом? ¿Я что-то упустил? Спасибо

...