D6 교수.Delphi - DBGrid에서 실제 행 복원
이전에는 DBISAM 및 DBISAMTable을 사용했습니다. 그것은 RecNo를 처리하고 수정 (삭제, 편집 등)과 함께 잘 작동합니다.
이제 우리는 RecNo를 처리하지 않는 ElevateDB로 교체했으며, 우리는 테이블이 아닌 쿼리를 사용합니다.
수정 사항을 보려면 쿼리를 다시 열어야합니다.
하지만 쿼리를 다시 열면 마지막 레코드로 재배치해야합니다. 격자가 다른 행에 표시되기 때문에 찾기가 충분하지 않습니다. 수정 기록이 다른 행으로 옮겨지면 그 행방을 따라 가기가 어렵고 사용자가이를 싫어하기 때문에 이것은 매우 혼란스러운 일입니다.
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 또는 라이브/민감한 쿼리가있는 경우 MoveBy는 누군가를 삭제하거나 새 행을 추가하면 잘못된 레코드로 재배치 될 수 있으므로 사용하는 것은 위험합니다.
그런 다음 북마크를 사용하려고했습니다 (참고 자료 참조). 그러나이 기술은 다른 행 위치의 레코드를 보여주기 때문에 작동하지 않습니다 ...
그래서 질문 : DBGrid에서 행 위치와 레코드를 강제로 설정하는 방법은 무엇입니까?
또는 기본 DataSet을 새로 고친 후 레코드/행에 어떤 종류의 DBGrid를 재배치 할 수 있습니까?
DBGrid에서이 점프를 사용하려고했기 때문에 사용자 친화적 인 솔루션을 찾았습니다. 업데이트 후 원래 기록을 찾을 때 내 눈이 멀어지기 때문에 사용하기에 매우 좋지 않았습니다 ... :-(당신의 모든 도움, 링크 정보를
감사 : DD
안녕하세요! 나는 그렇지 않습니다. GotoBookMark는 Open 이후에 있기 때문에 여기에서 Locate와 동일합니다. 그러나 실제 그리드 행은 동일하지 않으므로 그리드가 다른 위치에 레코드를 표시하지 않도록 설정하지 마십시오. MoveBy가 좋지만 여기에서 찾기가 필요합니다. 하지만 locate를 사용하면 그리드 행이 바뀌 었습니다 ... 예 : 그라인드에서 레코드 127이 네 번째 행에 표시됩니다. moveby로 다시 열면 네 번째 행에도 있습니다. Locate/Bookmark를 사용하면 3, 2, 5 - 무작위로 실제 레코드를 볼 수있는 곳 : ...-- ( – durumdara
사용자 2 행을 삽입/삭제하면 사용자 1의 저장된 레코드 번호가 잘못됩니다. 이것이 TOndrej가 도우려고하는 것입니다 당신은 피 –