-
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
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 -
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
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:
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ậyMã:db.openrecordset("VATTU")
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úp -
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 :
Và nhờ bạn giải thích nên mình đã hiểu cách câu lệnh trên hoạt độngMã:db = opendatabase(Me.Application.Currentproject.path & "\DATA_QLVT.accdb")
Thanks!