D6 prof.Delphi - khôi phục hàng thực tế trong DBGrid
Trước đây chúng tôi đã sử dụng DBISAM và DBISAMTable. Điều đó xử lý RecNo, và nó làm việc tốt với các sửa đổi (Xóa, chỉnh sửa, vv).
Bây giờ chúng tôi đã thay thế bằng ElevateDB, không xử lý RecNo và nhiều lần chúng tôi sử dụng Truy vấn, không phải Bảng.
Truy vấn phải mở lại để xem các sửa đổi.
Nhưng nếu chúng tôi Mở lại Truy vấn, chúng tôi cần định vị lại bản ghi cuối cùng. Xác định vị trí không đủ, vì Grid hiển thị nó trong một hàng khác. Đây là điều rất đáng lo ngại, bởi vì sau khi bản ghi sửa đổi đang chuyển sang hàng khác, bạn khó theo dõi nó, và người dùng ghét điều này.
Chúng tôi tìm thấy mã này:
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;
Ví dụ ban đầu là sử dụng moveby. Điều này làm việc tốt với truy vấn, bởi vì chúng tôi không thể thấy rằng truy vấn mở lại trong nền, điều khiển trực quan không thay đổi vị trí hàng. Nhưng khi chúng tôi có EDBTable, hoặc truy vấn trực tiếp/nhạy cảm, MoveBy là nguy hiểm để sử dụng, bởi vì nếu ai đó xóa hoặc nối thêm một hàng mới, chúng tôi có thể di chuyển vào hồ sơ sai.
Sau đó, tôi đã cố gắng sử dụng BookMark (xem nhận xét). Nhưng kỹ thuật này không hoạt động, bởi vì nó hiển thị bản ghi ở một vị trí Hàng khác ...
Vì vậy, câu hỏi: làm thế nào để buộc cả vị trí hàng và ghi trong DBGrid?
Hoặc loại DBGrid nào có thể định vị lại bản ghi/hàng sau khi Số liệu cơ bản được làm mới?
Tôi tìm kiếm giải pháp thân thiện với người dùng, tôi hiểu chúng, vì tôi đã cố gắng sử dụng DBGrid nhảy qua này, và rất xấu để sử dụng, vì mắt tôi đang nhận ra khi cố tìm bản ghi gốc sau khi cập nhật ... :-(
Cám ơn bạn mỗi sự giúp đỡ, liên kết, thông tin: dd
Xin chào! Như tôi thấy không. GotoBookMark là giống nhau mà Xác định vị trí ở đây, bởi vì chúng tôi là sau khi mở. Nhưng hàng lưới thực tế không giống nhau, vì vậy Disable không ngăn Grid hiển thị bản ghi ở vị trí khác. MoveBy là tốt, nhưng tôi cần Xác định vị trí ở đây. Nhưng nếu tôi sử dụng xác định vị trí, hàng Grid thay đổi ... Ví dụ: xay hiển thị bản ghi 127 trong hàng 4. Khi tôi mở lại bằng di chuyển, nó cũng ở hàng 4. Khi tôi sử dụng Định vị/Dấu trang, nó là 3, 2, 5 - ngẫu nhiên, nơi tôi có thể xem bản ghi thực tế ... :-( – durumdara
Người dùng 2 Chèn/Xóa một hàng và các bản ghi đã lưu của Người dùng 1 sẽ không chính xác. Đó là những gì TOndrej đang cố gắng trợ giúp bạn tránh –