2011-07-20 34 views
5

Tôi đang cố gắng lấy số bản ghi của một bảng và nếu số lớn hơn 17, hãy tạo một bảng mới.Số bản ghi trong bảng Truy cập bằng cách sử dụng VBA

Dim rst As DAO.Recordset 
strSQL = "Select * from SKUS" 
Set rst = db.OpenRecordset(strSQL) 

If rst.RecordCount > 17 Then 
    Set tdf = db.CreateTableDef("161-0363") 

    Set fld = tdf.CreateField("SKUS", dbText, 30) 
    tdf.Fields.Append fld 

    Set fld = tdf.CreateField("Count", dbInteger) 
    tdf.Fields.Append fld 

    db.TableDefs.Append tdf 
End If 

Mã này không tạo ra một bảng mới, nhưng khi tôi thay đổi câu lệnh if để này, nó hoạt động:

... 
If rst.RecordCount > 0 Then 
    Set tdf = db.CreateTableDef("161-0363") 
... 

Vì vậy, các RecordCount đang trở lại 1, tôi nghĩ. Tại sao chuyện này đang xảy ra? Tôi biết chắc chắn bảng có 18 hàng trong đó.
Có ai có thể giúp tôi không?

Trả lời

7

Bạn phải buộc bản ghi chép di chuyển qua tất cả các hàng để có được số đếm chính xác. Hãy thử điều này:

... 
Set rst = db.OpenRecordset(strSQL) 

rst.MoveLast 
rst.MoveFirst 
If rst.RecordCount > 17 Then 
... 

Trừ khi bạn đang làm một cái gì đó khác với recordset rằng bạn đang không hiển thị trong đoạn mã của bạn, bạn có thể đơn giản hóa mã của bạn bằng cách chỉ cần làm một tấm séc của số kỷ lục bằng cách sử dụng chức năng đếm miền:

If DCount("*", "SKUS") > 17 Then 
+1

Oh đã nhận nó! Khi tôi thêm MoveLast, nó đã hoạt động. Cảm ơn! – Shubham

+0

Tôi đã sử dụng một bảng Liên kết và một khi tôi đã thêm .MoveLast nó hoạt động tốt. Tôi không có .MoveLast trước và nó hoạt động cho mọi bảng cục bộ chứ không phải bảng được nối kết. Không bao giờ có hơn 300 bảng trong bảng của tôi. Tôi biết bạn nên làm thêm truy vấn vba ít hơn nhưng điều này làm việc cho bây giờ. Cảm ơn bạn. – RazorSky

3

Vấn đề với strsql là khi chuỗi đại diện cho truy vấn tham số, mã trên không hoạt động.

Trong trường hợp này tôi sẽ sử dụng một mét trong các mã như đơn giản dưới đây:

rs.movelast 
X = rs.recordcount 
Rs.movefirst 
Do until rs.eof 
    For i = 1 to X 
     If i<=17 then 
      Do things 
     Else 
      Do things 
     End if 
    Next i 
Loop 
+4

Bạn không bỏ lỡ một 'rs.movenext' trong vòng lặp của mình? – LittleBobbyTables

Các vấn đề liên quan