D6 проф.
Ранее мы использовали DBISAM и DBISAMTable. Это обрабатывает RecNo, и он хорошо работает с изменениями (удаление, редактирование и т. Д.).
Теперь мы заменили на ElevateDB, который не обрабатывает RecNo, и много раз мы используем запросы, а не таблицы.
Запрос должен быть открыт заново, чтобы увидеть изменения.
Но если мы снова откроем запрос, нам нужно изменить положение к последней записи.
Определить местоположение недостаточно, потому что Grid показывает его в другой строке.
Это очень тревожная вещь, потому что после того, как запись модификации перемещается в другой ряд, вам трудно следовать ей, и пользователи ненавидят это.
Мы нашли этот код:
function TBaseDBGrid.GetActRow: integer;
begin
Result := -1 + Row;
end;
procedure TBasepDBGrid.SetActRow(aRow: integer);
var
bm : TBookMark;
begin
if IsDataSourceValid(DataSource) then with DataSource.DataSet do begin
bm := GetBookmark;
DisableControls;
try
MoveBy(-aRow);
MoveBy(aRow);
//GotoBookmark(bm);
finally
FreebookMark(bm);
EnableControls;
end;
end;
end;
Исходный пример использует moveby. Это хорошо работает с запросами, потому что мы не видим, что запрос снова открывается в фоновом режиме, визуальный элемент управления не меняет положение строки.
Но когда у нас есть EDBTable или Live / Sensitive Query, MoveBy опасно использовать, потому что если кто-то удалит или добавит новую строку, мы можем переместиться в неправильную запись.
Затем я попытался использовать BookMark (см. Примечание). Но этот метод не работает, потому что он показывает запись в другой позиции строки ...
Итак, вопрос: как заставить положение строки и запись в DBGrid?
Или какой DBGrid можно переместить в запись / строку после обновления базового набора данных?
Я ищу удобное для пользователя решение, я понимаю его, потому что я пытался использовать этот переход через DBGrid, и очень плохо в использовании, потому что у меня вылезают глаза, когда я пытаюсь найти оригинальную запись после обновления ...: - (
Спасибо за вашу помощь, ссылку, информацию:
дд