Chào mừng đến với Diễn đàn Dân Kế Toán - Kế toán tổng hợp thực tế.
Kết quả 1 đến 6 của 6
  1. #1
    Ngày tham gia
    Nov 2015
    Bài viết
    0

    Lỗi Record new trong share csdl nhiều người dùng


  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    170
    Ðề: Lỗi Record new trong share csdl nhiều người dùng




    Trích dẫn Gửi bởi chihienphuco
    Mình tạo cdsl cho nhiều người dùng, nhưng khi nhiều máy cùng click vào record new để nhập liệu thì trong table nó bị trùng nhau và chỉ một người nhập được.

    Có cách nào khắc phục tình trạng trên? mong giúp đở gấp!
    Table có chọn share database không? Có record lock không?
    Table có primary key thì việc trùng có thể xảy ra. Access thông báo lỗi là đúng rồi.

  3. #3
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Ðề: Lỗi Record new trong share csdl nhiều người dùng

    Nút thêm mới viết như thế này:

    Private Sub Command30_Click()
    DoCmd.GoToRecord , , acNewRec
    Dim CSDL As Database, TBL As Recordset
    Set CSDL = CurrentDb
    Set TBL = CSDL.OpenRecordset("T12 TCMAIN", dbOpenSnapshot)
    If TBL.RecordCount <> 0 Then
    TBL.MoveLast
    MAQLTC = Format(Val(TBL!MAQLTC) + 1, "000000")
    Else
    MAQLTC = "000001"
    End If
    MANV = "A"
    MADV = "B"
    ...
    DoCmd.RunCommand acCmdSaveRecord
    TBL.Close
    CSDL.Close
    MANV.SetFocus
    MANV.Dropdown
    End Sub

    Ở nút phiếu mới mình dùng lệnh gán các field có khóa, sau đó dùng lệnh:

    DoCmd.RunCommand acCmdSaveRecord

    Để save Record thêm mới mà không bị lỗi chờ save nữa.

    Topic xong.

  4. #4
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Lỗi Record new trong share csdl nhiều người dùng

    Bạn share form của bạn lên đi, mọi người chỉnh trực tiếp giúp bạn cho nhanh. Với thủ tục như trên thì mình nghĩ form của bạn thiết kế chưa được tối ưu lắm (về thao tác nhập liệu)

  5. #5
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Lỗi Record new trong share csdl nhiều người dùng




    Trích dẫn Gửi bởi chihienphuco
    Nút thêm mới viết như thế này:

    Private Sub Command30_Click()
    DoCmd.GoToRecord , , acNewRec
    Dim CSDL As Database, TBL As Recordset
    Set CSDL = CurrentDb
    Set TBL = CSDL.OpenRecordset("T12 TCMAIN", dbOpenSnapshot)
    If TBL.RecordCount <> 0 Then
    TBL.MoveLast
    MAQLTC = Format(Val(TBL!MAQLTC) + 1, "000000")
    Else
    MAQLTC = "000001"
    End If
    MANV = "A"
    MADV = "B"
    ...
    DoCmd.RunCommand acCmdSaveRecord
    TBL.Close
    CSDL.Close
    MANV.SetFocus
    MANV.Dropdown
    End Sub

    Ở nút phiếu mới mình dùng lệnh gán các field có khóa, sau đó dùng lệnh:

    DoCmd.RunCommand acCmdSaveRecord

    Để save Record thêm mới mà không bị lỗi chờ save nữa.

    Topic xong.
    Bạn viết thế này thì làm sao mà chạy ở chế độ multi user được?
    Giả sử có 2 người cùng thêm mới thì lúc đó sẽ cùng đến record Last và sẽ lấy về cái MAQLTC giống nhau, vì khi người thứ nhất lấy chưa lưu thì người thứ hai làm gì mà nhận được cái MAQLTC mới hơn được.
    Trùng là cái chắc.

    Có một mẹo nhỏ là bạn có một table ngoài chứa cái MAQLTC mới nhất. Khi người 1 thêm mới, họ sẽ vào đây lấy cái MAQLTC này để tạo ra cái MAQLTC mới, sau đó update lại cho table đó. Người sau cũng vậy, chắc chắn sẽ không bao giờ bị trùng, tuy nhiên cách này sẽ có một bất lợi là nếu không lưu và TCMAIN thì xem như MAQLTC đó sẽ bị "lủng".

    Có nhiều cách, bạn có thể suy nghĩ thêm từ gợi ý của tôi.

  6. #6
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Lỗi Record new trong share csdl nhiều người dùng




    Trích dẫn Gửi bởi phatnq2002
    Bạn viết thế này thì làm sao mà chạy ở chế độ multi user được?
    Giả sử có 2 người cùng thêm mới thì lúc đó sẽ cùng đến record Last và sẽ lấy về cái MAQLTC giống nhau, vì khi người thứ nhất lấy chưa lưu thì người thứ hai làm gì mà nhận được cái MAQLTC mới hơn được.
    Trùng là cái chắc.

    Có một mẹo nhỏ là bạn có một table ngoài chứa cái MAQLTC mới nhất. Khi người 1 thêm mới, họ sẽ vào đây lấy cái MAQLTC này để tạo ra cái MAQLTC mới, sau đó update lại cho table đó. Người sau cũng vậy, chắc chắn sẽ không bao giờ bị trùng, tuy nhiên cách này sẽ có một bất lợi là nếu không lưu và TCMAIN thì xem như MAQLTC đó sẽ bị "lủng".

    Có nhiều cách, bạn có thể suy nghĩ thêm từ gợi ý của tôi.
    Đoạn mã trên đã chay ổn, do nó tạo mới hóa đơn xong là save luôn vào table nhờ đoạn lệnh này:
    DoCmd.RunCommand acCmdSaveRecord

    Nên 2 người hoặc nhiều hơn nhập vẫn có MAQLTC khác nhau mà không lỗi như hôm qua.

    Cám ơn anh phát!

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •