• Access chạy sai sau khi split Database
  • Access chạy sai sau khi split Database

    canhcfc > 08-11-14, 05:09 PM

    Chào các bạn,
    Mình có file Access ví dụ mình gửi kèm gồm có 1 textbox chứa số recordcount trong bảng vật tư và 1 button để đưa số record vào. Khi chưa dùng chức năng Split database để tách dữ liệu và form ra thành Back-end và frond-end thì chạy đúng nhưng sau khi tách thì lại chạy sai(Số recordcount=1).
    Mong các bạn giúp đỡ vì mình đang cần gấp
    Mã:
    Private sub demRecord()
        dim db as dao.database
        dim rs as dao.recordset
        
        Set db = currentdb
        set rs = db.openrecordset("VATTU")

        Text0.value = rs.recordcount
    End sub

    trong Table VATTU của mình có 24 record khi chưa split thì ok, split xong thì chỉ còn 1 030

    p/s nhân tiện cho mình hỏi các table đã split rồi thì làm thế nào đưa nó vào như bình thường được, mình thấy có chỗ "Convert to local table" nhưng chẳng thấy tác dụng. Thank 015
  • RE: Access chạy sai sau khi split Database

    MTNQ > 09-11-14, 12:28 PM

    Không cần DAO to búa lớn vậy đâu 014

    bạn chỉ cần như sau là được:
    Mã:
    Text0.value = DCount("*", "VATTU")
  • RE: Access chạy sai sau khi split Database

    MTNQ > 09-11-14, 12:51 PM

    Nếu vẫn thích DAO thì code như sau:

    Mã:
    Private Sub demRecord()
        Dim rs As dao.Recordset
        Set rs = CurrentDb.OpenRecordset("SELECT Count(*) as RCnt FROM "VATTU"", dbOpenSnapshot)
        Text0.Value = rs!RCnt
    End Sub

    Còn đưa các table đã split vào trở lại thì đơn giản là import nó trở lại thui (Trên menu chọn External Data > Access > ... )
  • RE: Access chạy sai sau khi split Database

    canhcfc > 09-11-14, 01:26 PM

    (09-11-14, 12:51 PM)MatTroiNguQuen Đã viết: Nếu vẫn thích DAO thì code như sau:

    Mã:
    Private Sub demRecord()
        Dim rs As dao.Recordset
        Set rs = CurrentDb.OpenRecordset("SELECT Count(*) as RCnt FROM "VATTU"", dbOpenSnapshot)
        Text0.Value = rs!RCnt
    End Sub

    Còn đưa các table đã split vào trở lại thì đơn giản là import nó trở lại thui (Trên menu chọn External Data > Access > ... )

    Cảm ơn bạn đã giúp nhưng ý mình là vẫn dùng cấu trúc lênh trên nhưng câu lệnh chạy đúng như khi chưa split
    Lý do vì mình viết chương trình quản lý vật tư cũng đã nhờ bạn giúp, trong đó có câu lệnh:
    Mã:
    db.openrecordset("VATTU")
    Khi đó nếu split ra thì chương trình sẽ chạy sai, mình muốn khi split thì chương trình vẫn chạy như vậy
    Theo mình nghĩ thì do mình set db=currentdb mà khí đó cái currentdb không phải là file back-end nên nó chạy sai. Phiền bạn giúp027
  • RE: Access chạy sai sau khi split Database

    MTNQ > 09-11-14, 02:14 PM

    Không phải nó chạy sai mà là thuộc tính RecordCount không trả về tổng số mẫu tin có trong Recordset mà nó trả về số mẫu tin có trong Recordset đã được truy cập. Vì vậy để đếm tất cả các mẫu tin có trong Recordset ta phải duyệt qua các mẫu tin với lệnh rs.MoveLast rồi mới rs.RecordCount.

    Mã:
    Private sub demRecord()
        dim db as dao.database
        dim rs as dao.recordset
        
        Set db = currentdb
        set rs = db.openrecordset("VATTU")
        rs.MoveLast
        Text0.value = rs.recordcount
    End sub

    Bạn tham khảo thêm ở đây:
    http://msdn.microsoft.com/en-us/library/...e.15).aspx
  • RE: Access chạy sai sau khi split Database

    MTNQ > 09-11-14, 02:36 PM

    Còn vấn đề bạn thắc mắc tại sao khi chưa Split thì trả về đúng?
    vì khi đó câu lệnh set rs = db.openrecordset("VATTU") bạn không định kiểu cho recordset nên Access tự định kiểu dbOpenTable và trong trường hợp này thì không cần MoveLast

    Sau khi Split thì sử dụng Linked Tables nên không thể định kiểu dbOpenTable, Access tự chuyển sang kiểu dbOpenDynaset, khi đó bắt buộc phải MoveLast trước khi sử dụng thuộc tính recordcount thì Access mới trả về đúng tổng số mẩu tin có trong Recordset

    Tuy nhiên bạn nên đọc kỹ các dòng này (trong link mình giới thiệu trong bài trên):

    Trích dẫn:Note
    Using the MoveLast method to populate a newly opened Recordset negatively impacts performance. Unless it is necessary to have an accurate RecordCount as soon as you open a Recordset, it's better to wait until you populate the Recordset with other portions of code before checking the RecordCount property.
  • RE: Access chạy sai sau khi split Database

    canhcfc > 10-11-14, 01:00 PM

    Cảm ơn bạn @MatTroinguQuen, bạn hiểu về VBA nhiều quá.
    Do mình không biết về recordcount nên mình đã giải quyết bằng cách sau:
    * Không gán db = currentdb mà thay bằng :
    Mã:
    db = opendatabase(Me.Application.Currentproject.path & "\DATA_QLVT.accdb")
    Và nhờ bạn giải thích nên mình đã hiểu cách câu lệnh trên hoạt động
    Thanks!015