2012-01-13 28 views
5

Đây là một trong những vấn đề lạ tôi đã thấy trong MS Access. Tôi có mã sau đây ở dạng liên tục:quyền truy cập vào oldValue để kiểm soát ở dạng liên tục tạo ra lỗi 3251 trong beforeUpdate khi một hộp kiểm trên biểu mẫu được cập nhật

Private Sub thisForm_BeforeUpdate(Cancel As Integer) 
If Not Cancel Then 
    Debug.Print "pre-logging data changes..." 

    ' here we need to doublecheck to see if any values changed. 
    ' we simply iterate through the whole list, re-setting oldValue 
    ' and newValue. 
    For Each control In thisForm.Section(acDetail).controls 
     If control.ControlType = acTextBox Or _ 
      control.ControlType = acComboBox Or _ 
      control.ControlType = acListBox Or _ 
      control.ControlType = acOptionGroup Or _ 
      control.ControlType = acCheckBox Then 
      Debug.Print control.Name 
      oldValues(control.Name) = control.oldValue 
      newValues(control.Name) = control.value 
     End If 
    Next 
End If 
End Sub 

oldValues ​​and newValues ​​là các đối tượng từ điển (mặc dù có thể không liên quan đến vấn đề này).

Biểu mẫu của tôi có 3 điều khiển hộp văn bản và kiểm soát hộp kiểm. Một trong các điều khiển hộp văn bản bị tắt và được điền thông qua kết quả của một phép nối bên trong đơn giản (để lấy tên có thể đọc được của con người được liên kết với khóa ngoại). Nguồn dữ liệu đến từ nguồn bản ghi của biểu mẫu (không có DLookup hoặc bất kỳ thứ gì được sử dụng).

Nếu tôi chỉnh sửa một trong hai điều khiển hộp văn bản kia, mã này chạy hoàn toàn tốt. BAO GIỜ, nếu tôi chuyển đổi hộp kiểm trên biểu mẫu, tôi nhận được một lỗi thời gian chạy 3251. Trong cửa sổ đồng hồ, tôi nhận được lỗi một lần nữa khi tôi cố gắng xem các thuộc tính của "kiểm soát". Nó cho thấy giá trị của oldValue cho điều khiển bị vô hiệu hóa là "Reserved Error".

Nếu điều này xảy ra một cách nhất quán, tôi nghĩ đó là do việc kiểm soát bị vô hiệu hóa; nhưng kể từ khi nó hoạt động mà không có một vấn đề khi các hộp văn bản khác nhận được chỉnh sửa, và chỉ phá vỡ khi hộp kiểm được bật; Tôi đang bối rối. Tôi gần như có xu hướng tin rằng tôi tìm thấy một lỗi trong truy cập, nhưng tôi có thể sử dụng một số đầu vào thêm.

Bất kỳ ai khác cũng gặp phải vấn đề như thế này?

EDIT: Sau khi tìm hiểu thêm, tôi thấy rằng trong thực tế chỉ một trong 3 trường có thể chỉnh sửa sẽ không kích hoạt lỗi này. Nó chứa dữ liệu chuỗi. Hai điều khiển còn lại chứa giá trị ngày tháng và giá trị có/không. Bây giờ tôi thậm chí còn bối rối hơn.

+0

Kiểm tra xem trường có gây ra sự cố hay không là liên kết hoặc có sự kiện 'OnUpdate' được liên kết với nó. – Newd

Trả lời

0

tôi có hai ý tưởng cho vấn đề đó.

Thứ nhất: Nếu RecordSource của biểu mẫu của bạn là một bảng ODBC được liên kết với SQL-Server thì bạn nên đặt giá trị chuẩn cho cột CheckBox. Nếu không, nó sẽ cố gắng thiết lập NULL thành False và ném một lỗi nói rằng ai đó đã chỉnh sửa bản ghi hiện tại.

Ý tưởng thứ hai: Đôi khi Access chỉ có một chút "trục trặc" khi biên dịch mã. Bạn có thể tạo bản sao lưu cơ sở dữ liệu của bạn và sau đó thử dịch ngược nó bằng cách sử dụng "C:\Program Files\Microsoft Office 2007\Office12\MSACCESS.EXE" "C:\yourFolder\yourDatabase.accdb" /decompile trong Cửa sổ Chạy ... (tất nhiên bạn phải chèn Đường dẫn như trên máy của bạn). Điều đó thường giúp giải quyết các vấn đề lạ.

Các vấn đề liên quan