Tệp Trình bao bọc API Geodatabase API: Làm thế nào để xác định xem Bảng / Lớp tính năng có bị khóa không?


10

Tôi đã và đang sử dụng trình bao bọc API gdb API và nó phù hợp với nhu cầu của tôi khá độc đáo (so với sử dụng ArcObjects). Một trong những điều tôi chưa tìm ra là liệu có một cách thích hợp để xác định xem một bảng hoặc lớp tính năng (fc) có bị khóa hay không trước khi thử ghi vào nó.

Những gì tôi đã làm là gói một bản cập nhật / chèn vào một lần thử / bắt và nếu tôi nhận được 'không thể có được ngoại lệ khóa ...', tôi biết đối tượng bị khóa bởi một thứ khác.

Tôi có thiếu một cách tốt hơn để biết nếu một bảng hoặc fc nhất định có thể được viết vào không?


Tôi cũng sẽ quan tâm đến câu trả lời cho câu hỏi này, không chỉ cho API Cơ sở dữ liệu địa lý tệp, mà còn lý tưởng cho ArcObjects.
stakx

Vì chúng là hai API hoàn toàn khác nhau, tôi khuyên bạn nên hỏi một câu hỏi riêng. Tôi không chắc liệu tiền thưởng có thể được chuyển qua mặc dù.
blah238

Tôi đồng ý với @ blah238. Câu trả lời cho ArcObjects là sử dụng ISchemaLockInfo & ISchemaLock để cung cấp thông tin về khóa lược đồ; Tôi nghĩ rằng không có câu trả lời cho API
Filegeodatbase

2
Khóa không được hiển thị thông qua API cơ sở dữ liệu địa lý tệp. Bạn sẽ phải cố gắng viết hoặc lấy khóa ghi và xử lý ngoại lệ.
travis

2
Bạn đã thử Esri :: FileGDB :: Table :: IsEditable chưa?
Kirk Kuykendall

Câu trả lời:


1

Tôi không nghĩ rằng có một cái móc trong API cơ sở dữ liệu địa lý cho việc này rõ ràng. Nhưng bạn có thể sử dụng một cách giải quyết bằng cách kiểm tra hệ thống tệp xem có xuất hiện tệp "..sr.lock" như đã đề cập ở trên không.

Cơ sở dữ liệu địa lý tệp được đọc giống như các thư mục trên hệ thống tệp và sẽ có một trong các tệp này cho mỗi máy người dùng có kết nối hoạt động (hoặc unterminated ...) với cơ sở dữ liệu địa lý tệp (một trên bảng _gdb) và / hoặc bất kỳ tính năng nào các lớp mà chúng hiện đang được kết nối.

Nó nhanh hơn việc chờ lỗi quay trở lại từ lỗi truy cập. Câu trả lời của MattB ở trên với bảng điều khiển khóa là một ý tưởng tuyệt vời cho nhiều người dùng.


0

Tôi sử dụng ArcObjects và đã sử dụng phương pháp thử / bắt mà bạn đã đề cập.

Trong trường hợp của tôi, nhiều người dùng cần đọc và ghi dữ liệu trong cùng một lớp tính năng trong cơ sở dữ liệu địa lý. Tôi có một "màn hình tải" xuất hiện và cho người dùng biết rằng dữ liệu đang được sử dụng và sau đó một vòng lặp cứ thử vài giây trong nền cho đến khi có thể tạo khóa cho họ.

Một cách khác tôi đã sử dụng ổ khóa được mô tả dưới đây. Tôi biết việc tôi sử dụng phương pháp này để xem các tệp khóa khác với những gì bạn muốn làm nhưng khái niệm này giống nhau và bạn có thể sử dụng một cái gì đó tương tự nếu bạn cần xác định loại khóa hoặc khóa thuộc về ai . Đây là thông tin nếu bạn quan tâm.

Vì bạn có thể xem các tệp khóa cụ thể, chúng thuộc về ai, chúng thuộc loại khóa nào, v.v. nếu bạn xem bên trong cơ sở dữ liệu địa lý trong Windows Explorer là để tạo một ứng dụng "trạng thái" độc lập theo dõi các tệp khóa cụ thể lớp tính năng tất cả chúng ta sử dụng.

Sử dụng phương pháp này tôi có thể thấy trong thời gian thực từ bảng điều khiển dễ đọc, người đã khóa lớp tính năng đó (dựa trên tên máy tính) và loại khóa họ có. Ví dụ: nếu nó thấy khóa "sr" (lược đồ) tôi biết họ có lớp tính năng được thêm vào Mục lục của họ, khóa "nd" có nghĩa là họ đang đọc từ lớp đối tượng, khóa "wr" có nghĩa là họ đang viết dữ liệu và khóa "ed" có nghĩa là họ có phiên chỉnh sửa mở trên lớp tính năng.

Điều này rất hữu ích khi thực hiện bảo trì để có thể nhìn xuống và đảm bảo rằng nó sẽ không có ảnh hưởng tiêu cực đến bất cứ ai. Mục "Không xác định" cũng thông báo cho tôi khi có ai đó bất ngờ đang sử dụng lớp tính năng và tôi có thể điều tra thêm.

Đây là một ảnh chụp màn hình của bảng điều khiển tôi sử dụng. Bảng điều khiển trạng thái FeatureClass

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.