• Lỗi cannot Update.
  • Lỗi cannot Update.

    huuduy.duy > 27-06-18, 02:21 PM

    Chào các anh chị
    Nhờ các anh chị giúp em khắc phục lỗi Cannot update. Databse or object  is read only, khi em Click save 
    Ps: Trên Form frmThongKeCongDoan, có phần nhập giờ bắt đàu và kết thúc, cho em hỏi, có cách nào để nhập giờ được nhanh hơn không?
    Link
    [Hình: Capture.th.png]
  • RE: Lỗi cannot Update.

    ongke0711 > 27-06-18, 03:24 PM

    - Query source của SubForm có các trường tính toán nên nó không thể cập nhật dữ liệu được và nó cũng khoá luôn cái table bạn cần "AddNew". Bạn nên thiết kế lại subF hoặc gọi form cập nhật theo cách khác didi.
    - Trong code của bạn  tôi thấy bạn đặt tên biến trùng tên các table -> nó vẫn chạy nhưng sẽ gây khó khi sửa code: không biến nó là biến hay tên table và gây khó khăn cho code VBA nó cũng phải tự suy và đặt tên table vô dấu ngoặc vuông [..] để tránh xử lý sai. -> nên bỏ cách đặt tên như vậy.

    Mã PHP:
    Set tblThongKeCongDoan CurrentDb.OpenRecordset("SELECT * FROM [tblThongKeCongDoan]"
  • RE: Lỗi cannot Update.

    huuduy.duy > 27-06-18, 04:06 PM

    (27-06-18, 03:24 PM)ongke0711 Đã viết: - Query source của SubForm có các trường tính toán nên nó không thể cập nhật dữ liệu được và nó cũng khoá luôn cái table bạn cần "AddNew". Bạn nên thiết kế lại subF hoặc gọi form cập nhật theo cách khác didi.
    - Trong code của bạn  tôi thấy bạn đặt tên biến trùng tên các table -> nó vẫn chạy nhưng sẽ gây khó khi sửa code: không biến nó là biến hay tên table và gây khó khăn cho code VBA nó cũng phải tự suy và đặt tên table vô dấu ngoặc vuông [..] để tránh xử lý sai. -> nên bỏ cách đặt tên như vậy.

    Mã PHP:
    Set tblThongKeCongDoan CurrentDb.OpenRecordset("SELECT * FROM [tblThongKeCongDoan]"

    Còn phần 
    Mã PHP:
    Trên Form frmThongKeCongDoancó phần nhập giờ bắt đàu và kết thúccho em hỏicó cách nào để nhập giờ được nhanh hơn không
    mình xử lý sao anh?

    Mã PHP:
    Bạn nên thiết kế lại subF hoặc gọi form cập nhật theo cách khác didi
    anh có thể giúp em?
  • RE: Lỗi cannot Update.

    ongke0711 > 28-06-18, 10:03 PM

    - Anh mới xem lại form của em thì thấy trong subform - Form Properties - Data -> em set Record Locks: All records -> phải đổi lại thành "No lock" thì mới update được. Còn query của subF em cứ giữ nguyên. Post trên anh trả lời sai.


    - Còn về việc nhập cái textbox giờ bắt đầu/ kết thúc: anh nghĩ em nên thiết kế 2 field này dạng TEXT và có thiết lập Input Mask cho nó để người dùng dễ nhập liệu. Input mask: 00:00;0;_
    Lý do: Nếu Field này em dùng định dạng DateTime nhưng Format dạng “ShortTime”, khi hiển thị nó hiển thị đúng yêu cầu của em là “hh:nn” nhưng thực tế mặc định của nó sẽ tự động gán ngày “30/12/1899” vào trước cái giờ: phút em nhập. Em có thể dùng hàm Format([Bat-Dau],”yyyy-mm-dd”) sẽ thấy ngay. Khi đó nếu có tính toán liên quan đến thời gian của field này sẽ cho kết quả không chính xác.
    Sau này nếu có tính toán thì có thể dùng công thức sau để kết hợp [Ngày] và [Giờ] như sau:
    dteNgayGioBatDau=Me.txtNgayThucHien+TimeValue(Me.txtBatDau)

     
  • RE: Lỗi cannot Update.

    huuduy.duy > 29-06-18, 11:48 AM

    (28-06-18, 10:03 PM)ongke0711 Đã viết: - Anh mới xem lại form của em thì thấy trong subform - Form Properties - Data -> em set Record Locks: All records -> phải đổi lại thành "No lock" thì mới update được. Còn query của subF em cứ giữ nguyên. Post trên anh trả lời sai.
    - Còn về việc nhập cái textbox giờ bắt đầu/ kết thúc: anh nghĩ em nên thiết kế 2 field này dạng TEXT và có thiết lập Input Mask cho nó để người dùng dễ nhập liệu. Input mask: 00:00;0;_
    Lý do: Nếu Field này em dùng định dạng DateTime nhưng Format dạng “ShortTime”, khi hiển thị nó hiển thị đúng yêu cầu của em là “hh:nn” nhưng thực tế mặc định của nó sẽ tự động gán ngày “30/12/1899” vào trước cái giờ: phút em nhập. Em có thể dùng hàm Format([Bat-Dau],”yyyy-mm-dd”) sẽ thấy ngay. Khi đó nếu có tính toán liên quan đến thời gian của field này sẽ cho kết quả không chính xác.
    Sau này nếu có tính toán thì có thể dùng công thức sau để kết hợp [Ngày] và [Giờ] như sau:
    dteNgayGioBatDau=Me.txtNgayThucHien+TimeValue(Me.txtBatDau)
    Cảm ơn anh, em đã khắc phục được lỗi trên rồi.
    Cũng ở form ThongKeCongDoan, khi em Click Save lần 1, thì báo cập nhật thành công, mặc dù chưa nhập dữ liệu gì hết, nhưng khi click lần thứ 2 trở đi (cũng chưa nhập dữ liệu vào các textbox) thì mới báo lỗi chưa điền đầy đủ thông tin.
    Nhờ anh kiểm tra giúp em. 
    Trân trọng cảm ơn
  • RE: Lỗi cannot Update.

    ongke0711 > 30-06-18, 06:38 PM

    (29-06-18, 11:48 AM)huuduy.duy Đã viết: Cũng ở form ThongKeCongDoan, khi em Click Save lần 1, thì báo cập nhật thành công, mặc dù chưa nhập dữ liệu gì hết, nhưng khi click lần thứ 2 trở đi (cũng chưa nhập dữ liệu vào các textbox) thì mới báo lỗi chưa điền đầy đủ thông tin.

    Cái lỗi này là do lỗi code trong cái hàm CheckNullEmpty() anh post lên lúc trước. 
    Giải thích về trường hợp khi bấm [Save] lần 1 khi chưa nhập liệu nó vẫn báo "Lưu thành công" là do: Trong form của em, em có thiết lập 1 textbox là [Ngày thực hiện] có Default value = Date() tức là luôn có trị khi mở form và cái hàm CheckNullEmpty() chạy sai ở đây. Nó bị sai ở vòng lặp khi gặp textbox [Ngày thực hien] có trị sẽ gán CheckNullEmpty = False -> sẽ tiến hành Lưu dữ liệu. Bấm [Save] lần 2 thì code chạy đúng, hiện thông báo yêu cầu nhập liệu các textbox null là do: code sau khi lưu dữ liệu sẽ xoá trống tất cả các textbox trên main form dẫn đến hàm CheckNullEmpty() sẽ chạy và trả về giá trị đúng (=True).
    Bạn sửa code hàm CheckNullEmpty lại như bên dứoi:

    Mã PHP:
    Function CheckNullEmpty(frm As Form) As Boolean
       Dim ctl 
    As Control
       str 
    = Empty

       For Each ctl In frm.Controls
           If ctl
    .ControlType acTextBox Or ctl.ControlType acComboBox Or ctl.ControlType acCheckBox Then
               If Right
    (ctl.Tag8) = "required" Then
                   If IsNullOrEmpty
    (ctlThen
                       
    'Debug.Print IsNullOrEmpty(ctl) & " - " & ctl.Name'
                       colCtlName.Add ctl.Name  'De setFocus vao control dau tien trong danh sách collection'
                       ctl.BackColor RGB(255255153)
                       str str "- " ctl.Controls(0) vbNewLine
                   End 
    If
               End If
           End If
       Next

       If Len
    (str) = 0 Then
           CheckNullEmpty 
    False
       Else
           CheckNullEmpty 
    True
       End 
    If

    End Function 
  • RE: Lỗi cannot Update.

    huuduy.duy > 03-07-18, 11:35 AM

    frmThongKeNangSuat, em thêm sự kiện double click cho subform (sfrmThongKeCongDoan) để mở 1 form mới (Form chỉnh sửa), thì báo lỗi sau. Em đã đăng ký thư viện OLE luôn rồi, 
    Nhưng nếu em thay sfrmThongKeCongDoan bằng 1 subform khác thì bình thường, 

    Cho em hỏi, lỗi trên mình khắc phục như thế nào 
    Trân trọng cảm ơn
    [img][Hình: r41827T.png][/img]
  • RE: Lỗi cannot Update.

    ongke0711 > 03-07-18, 12:13 PM

    Kiểm tra lại tất cả các Controls, có control nào đó trong Form có đặt tên (Name) tiếng Việt có dấu hoặc khoảng trắng. Không cần đăng ký thêm thư viện gì nữa.