Hủy bỏ khóa trên lớp tính năng


11

Khi tôi cố gắng xóa một lớp tính năng, sau hoặc trong quá trình sử dụng ứng dụng công cụ Arcgis sử dụng cùng một lớp tính năng, tôi đã gặp lỗi liên quan đến khóa, vì vậy tôi không thể sử dụng khóa này cho đến khi tôi khởi động lại máy tính.

Tôi muốn biết một cách để loại bỏ khóa bằng arcpy hoặc arcobjects 10.1, sẽ thật hoàn hảo nếu tôi có thể sử dụng khóa bên trong ứng dụng arcengine cũng khóa cơ sở dữ liệu địa lý, tôi đã thấy các bài đăng khác nhau trong SE về khóa nhưng không ai trong số họ đưa ra giải pháp cho các khóa miễn phí bằng ArcObjects.


1
Tôi đã có một câu hỏi tương tự một lúc trước ( gis.stackexchange.com/q/28977/8104 ). Tôi không thể tìm thấy câu trả lời về ổ khóa, mặc dù có thông tin tốt về việc xóa trong các đối tượng bộ nhớ.
Aaron

Câu trả lời:


12

Nếu bạn đang sử dụng tập lệnh Arcpy, các vấn đề về khóa dữ liệu thậm chí còn trở nên rắc rối hơn với 10.1.

Nếu các khóa đang được tạo bởi mã của bạn, thì bạn sẽ không tự dọn dẹp. Phát hành tất cả các tham chiếu đến các lớp đối tượng, không gian làm việc, con trỏ, v.v ... Các khóa được xóa khi bạn không còn tham chiếu đến các đối tượng bị khóa.

Vâng, đó là cách nó nên hoạt động, nhưng nó hiếm khi làm. Thông thường một mã sẽ thỉnh thoảng hoạt động, nhưng thường bị lỗi không thể giải thích được ở những nơi khác nhau.

Vấn đề dường như là các khóa chỉ còn lại ở đó 'trong một thời gian', nhưng mã chạy nhanh hơn nhiều so với tốc độ mà các khóa được gỡ bỏ. Tuy nhiên, một số công cụ Arc sẵn có dường như buộc phải xóa khóa theo yêu cầu (vì khóa áp dụng cho toàn bộ GDB cùng một lúc, khóa sẽ ngăn bạn làm việc với bất kỳ Lớp tính năng nào có trong đó). Các công cụ này là arcpy.Compact_man quản lý () và arcpy.Exists ().

Đây là một chức năng nhỏ mà tôi sử dụng trong mã của mình đã tăng độ tin cậy đáng kể (đối với tập lệnh tạo và chỉnh sửa nhiều GDB và Lớp tính năng trong chúng):

def clearWSLocks(inputWS):
  '''Attempts to clear locks on a workspace, returns stupid message.'''
  if all([arcpy.Exists(inputWS), arcpy.Compact_management(inputWS), arcpy.Exists(inputWS)]):
    return 'Workspace (%s) clear to continue...' % inputWS
  else:
    return '!!!!!!!! ERROR WITH WORKSPACE %s !!!!!!!!' % inputWS

Nó được sử dụng bằng cách đơn giản chuyển đường dẫn không gian làm việc (GDB) đến hàm và nên được thực hiện sau mỗi thao tác trên không gian làm việc (nghĩa là tạo GDB) hoặc Lớp tính năng trong không gian làm việc (ví dụ: Con trỏ, thêm trường, tính toán, v.v.) . Ví dụ: (được hiển thị ở đây dưới dạng tập lệnh độc lập, với chức năng ở trên cùng; để sử dụng chức năng, sao chép và dán nó giữa phần nhập và chương trình thực tế, như được hiển thị ở đây):

import arcpy

def clearWSLocks(inputWS):
  '''Attempts to clear locks on a workspace, returns stupid message.'''
  if all([arcpy.Exists(inputWS), arcpy.Compact_management(inputWS), arcpy.Exists(inputWS)]):
    return 'Workspace (%s) clear to continue...' % inputWS
  else:
    return '!!!!!!!! ERROR WITH WORKSPACE %s !!!!!!!!' % inputWS

GDBpath = 'C:/Temp/'
GDBname = 'Test.gdb'
tableName = 'SweetFC'
arcpy.CreateFileGDB_management(GDBpath, GDBname)
print(clearWSLocks(GDBpath+GDBname))
arcpy.CreateTable_management(GDBpath+GDBname, tableName)
print(clearWSLocks(GDBpath+GDBname))
# etc....

3
Nhỏ gọn không hoạt động nếu có khóa. Nó thực sự sẽ tăng hiệu năng khi bạn chạy nhiều hoạt động của FGDB, nhưng với chi phí thời gian chạy của chính nó.
Michalis Avraam

chỉ tự hỏi tại sao có hai lần Tồn tại, ý tôi là câu lệnh thứ ba trong if all () trong ClearWSLocks?
makak

Tôi có thể đồng tình, tôi đã không tìm thấy điều này để xóa ổ khóa. :( và tôi đã thử nhiều thứ khác nhau cho đến nay.
Vidar


7

Nếu các khóa đang được tạo bởi mã của bạn, thì bạn sẽ không tự dọn dẹp. Phát hành tất cả các tham chiếu đến các lớp đối tượng, không gian làm việc, con trỏ, v.v ... Các khóa được xóa khi bạn không còn tham chiếu đến các đối tượng bị khóa.


1
Tôi biết chủ đề này khá cũ, nhưng tôi gặp vấn đề với việc có thể xóa FGDB trong arcpy. Chính xác ý bạn là gì khi "Phát hành tất cả các tham chiếu đến các lớp tính năng, không gian làm việc, con trỏ, v.v." Làm thế nào tôi sẽ đi về việc phát hành các tài liệu tham khảo nói?
GeoJohn
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.