2013-01-03 18 views
5

Câu hỏi nhanh ở đây, hy vọng có giải pháp hợp lý ngắn gọn.Đóng biểu mẫu bị ràng buộc mà không lưu thay đổi

Tôi có hình thức ràng buộc hoàn toàn cho mục nhập dữ liệu (không thể duyệt qua các bản ghi, chỉ chèn chúng). Tôi sẽ có rất nhiều người dùng xoay xở. Để tránh dữ liệu bẩn, tôi muốn họ xác nhận rằng biểu mẫu là chính xác trước khi gửi hồ sơ.

Vấn đề là ngay sau khi tôi nhập bất kỳ điều gì vào biểu mẫu, quyền truy cập sẽ tạo và lưu bản ghi.

Tôi muốn lưu hồ sơ CHỈ và cam kết nếu người dùng nhấp vào 'Gửi'. Nếu họ bấm đóng hoặc thoát khỏi ứng dụng, tôi không muốn bản ghi đã hoàn thành một phần đó trong cơ sở dữ liệu.

Nếu không sử dụng biểu mẫu không liên kết và gọi hàm chèn, có giải pháp đơn giản không?

+1

Bạn có thể hoàn tác bản ghi miễn là bạn không có biểu mẫu phụ. – Fionnuala

+0

@remou Làm thế nào để điều này có hiệu lực autonumber? Giả sử tôi có hai người dùng đồng thời trên biểu mẫu. Người dùng 1 Mở biểu mẫu và bắt đầu nhập dữ liệu trước tiên. Người dùng 2 sau đó mở biểu mẫu và tự nhập dữ liệu. Người dùng 1 quyết định anh ta có những việc tốt hơn để làm hơn là nhập dữ liệu và nhấp vào nút 'hoàn tác'. Tôi đoán điều này sẽ dẫn đến một khoảng cách về số (như chèn sau đó xóa, thay vì quay lại hoặc thiếu cam kết?) – Scotch

+0

Kiểm tra điều này quá [: bạn có thể kiểm tra trước khi biểu mẫu được cập nhật] (http://bytes.com/topic/access/insights/891249-how-stop-bound-forms-updating-automatically). Trong điều kiện giữ tính nhất quán của autoincrementer, bạn luôn có thể có một xác nhận trước khi chèn một diễn ra ... – bonCodigo

Trả lời

6

Một số tự động có duy nhất, không phải tuần tự. Nếu bạn cần một số tuần tự, không sử dụng autonumber. Không bao giờ được hiển thị tự động cho người dùng. Nó không bao giờ có thể được dựa vào để được bất cứ điều gì nhưng độc đáo, và nếu bạn mess về đủ, thậm chí không có.

Private Sub Form_BeforeUpdate(Cancel As Integer) 
If Me.AText = "Invalid" Then 
    Me.Undo 
    Cancel = True 
End If 
End Sub 

Lưu ý rằng biểu mẫu có thể thay đổi từ biểu mẫu con thành biểu mẫu chính và ngược lại và tất cả đều phức tạp.

+0

Vâng, tôi có một biểu mẫu con với mối quan hệ nhiều người với biểu mẫu gốc.Nếu ai đó hủy/hoàn tác, tôi nghi ngờ họ sẽ nhận được điểm điền vào biểu mẫu con, vì vậy điều này có thể là đủ. Nếu không, tôi chỉ có thể thực hiện truy vấn xóa trên bảng có liên quan trước khi hoàn tác. Cảm ơn. – Scotch

3

phương pháp Remou chắc chắn là nhanh nhất, đây là khác dựa trên nhận xét của tôi;)

Option Explicit 

Private blnGood As Boolean 

Private Sub cmdSubmit_Click() 
    blnGood = True 
    Call DoCmd.RunCommand(acCmdSaveRecord) 
    blnGood = False 
End Sub 

Private Sub Form_BeforeUpdate(Cancel As Integer) 
    If Not blnGood Then 
     Cancel = True 
     Call MsgBox(Prompt:="click submit to save the record", Title:="Before Update") 
    End If 
End Sub 
2

Bạn có thể sử dụng đoạn mã sau để tạo ra một nút rõ ràng trong trường hợp người sử dụng thực hiện một sai sót và muốn xóa toàn bộ hình thức và bắt đầu lại.

Private Sub btnClear_Click() 
    If Me.Dirty = True Then 
    DoCmd.RunCommand acCmdUndo 
    Exit Sub 
    End If 
End Sub` 

đôi khi tôi tìm thấy những sự kiện before_update hành động kỳ lạ vì vậy tôi thường vô hiệu hóa đóng (x) nút trong các thuộc tính và thêm một nút đóng của riêng tôi mà nhắc người sử dụng nếu ông muốn từ bỏ các dữ liệu trên màn.

Private Sub close_Click() 
Dim Answer As Integer 
If Me.Dirty = True Then 
    Dim Response As Integer 
    ' Displays a message box with the yes and no options. 
    Response = MsgBox(Prompt:="Do you wish to discard data?", Buttons:=vbYesNo) 
    ' If statement to check if the yes button was selected. 
    If Response = vbYes Then 
     DoCmd.RunCommand acCmdUndo 
     DoCmd.Close 
     Else 
     Me.Clear.SetFocus 
    End If 
Else 
    ' The no button was selected. 
    DoCmd.Close 
    End If 
End Sub 
Các vấn đề liên quan