База Access (MS JET 4.0) Клиент VB6, доступ к данным через ADODB.
Суть проблемы с следующем:
Данные выбранные в рекордсет отображаются в связанном гриде, грид методами сортировки не обладает, поэтому сортировка ощуществляется методами рекордсета. Сортировка может быть по разным колонкам грида и фактически, после клика на соответсвующем заголовке столбца, просто перевешивается на другое поле рекордсета. Все работает хорошо и замечательно, пока не начать редактирование записей в той колонке, на которой висит сортировка. После редактирования и перемещения курсора к другой записи рекордсет начинает перестраивать записи так, что-бы только что отредактированная запись соответствовала порядку сортировки. В результате запись перемещается в другое место, может и очень далеко перескочить, а в той строке, куда был клик появляется совершенно другая запись, а не та, на которую пользователь собирался перейти. Такие кульбиты, особенно, когда в таблице много записей достаточно сильно напрягают и приводят к ошибкам, ибо, пользователь выбрал запись кликнул и начал редактирование, но получается, что уже не то .
Я придумал решение этой проблемы, может оно и кривое, но по идее должно было работать, если бы не одно но!
Суть решения следуещее: Добавить в рекордсет дополнительное поле (я у себя назвал его 'N') и после того, как грид отсортировал свои данные и записи стали располагаться в нужном порядке, просто пробежаться по всем записям рекордсета и в это поле ('N') проставить последовательные значения (1, 2, 3,...,n), по количеству строк рекордсета, или наоборот (n, n-1, n-2,..., 1) в зависимости от направления сортировки и далее перевесить сортировку на это поле.
Так я мыслил пока не обломался на том, что дополнительному полю, котрое я добавляю в рекордсет, просто указав его в запросе
SELECT ..., 0 AS N FROM...
никакое новое значение присвоить нельзя. Т.е. поле является не обновляемым, что и понятно, и не редактируемым. Как я не пытался его сделать редактируемым, так ничего и не получилось. Можно конечно добавить такое поле по все таблицы базы данных, а заодно и в хранимые запросы и вьюхи, но таковых очень много, да и не хотелось бы изменять структуру базы для этого. Т.е. такой вариант не идет. И как по другому решить проблему тоже не знаю, поэтому обращаюсь за помощью и идеями. Может кто-то подобное уже даже делал . Или же нужно решить вопрос с полем, не привязанном к данным, в котором можно было бы менять значения, либо решить первоначальную проблему сортировки другим методом. Надеюсь, что общество поможет