Hỏi cánh đánh số thứ tự trong query của Access

Liên hệ QC

transongngocquan

Thành viên hoạt động
Tham gia
10/5/07
Bài viết
180
Được thích
99
Trong Query của Access không có hàm đánh số thứ tự row_number, xin cho hỏi làm cách nào đánh số thứ tự trong query của access, có hàm tự tạo nào giống hàm row_number không ?
 
Trong Query của Access không có hàm đánh số thứ tự row_number, xin cho hỏi làm cách nào đánh số thứ tự trong query của access, có hàm tự tạo nào giống hàm row_number không ?
Giả sử bạn có 1 bảng mã hàng gồm có 2 trường, [MA HANG] và [NGAY]. (Mã hàng là khóa chính)
Bây giờ mình tạo 1 Query có số thứ tự dựa vào trường [MA HANG] như sau:
SELECT (Select Count (*) FROM [tblMahang] as Temp WHERE [Temp].[MA HANG] < [tblMahang].[MA HANG])+1 AS TAOSO, tblMahang.[MA HANG], tblMahang.NGAY
FROM tblMahang;
Bạn tham khảo thêm file đính kèm nhé
Thân
 

File đính kèm

  • Auto number in Query.zip
    14.8 KB · Đọc: 886
Cách này chưa được ổn lắm khi thêm ORDER BY tblMahang.NGAY DESC; như sau:


SELECT (Select Count (*) FROM [tblMahang] as Temp WHERE [Temp].[MA HANG] < [tblMahang].[MA HANG])+1 AS TAOSO, tblMahang.[MA HANG], tblMahang.NGAY
FROM tblMahang
ORDER BY tblMahang.NGAY DESC;
 

File đính kèm

  • Auto number in Query.rar
    12.8 KB · Đọc: 307
Cách này chưa được ổn lắm khi thêm ORDER BY tblMahang.NGAY DESC; như sau:


SELECT (Select Count (*) FROM [tblMahang] as Temp WHERE [Temp].[MA HANG] < [tblMahang].[MA HANG])+1 AS TAOSO, tblMahang.[MA HANG], tblMahang.NGAY
FROM tblMahang
ORDER BY tblMahang.NGAY DESC;
Cách đánh số thứ tự như trên như tôi đã nói là mình dựa vào trường [MA HANG] để tạo ra số thứ tự, do vậy khi xuất ra nó sẽ tự động dò theo thứ tự mà đánh số, do đó khi bạn sort cột ngày thì số thứ tự đó nó sẽ sort theo mà không đánh số thứ tự theo cột ngày.
 
Trong Query của Access không có hàm đánh số thứ tự row_number, xin cho hỏi làm cách nào đánh số thứ tự trong query của access, có hàm tự tạo nào giống hàm row_number không ?
Trong Access không có quan niệm về số thứ tự của record. Cần biết thứ tự đó để làm gì. Bạn có thể chỉ ra mục đích của số thứ tự.
 
Trong Acces thì cũng không cần nhưng mà phải xuất ra excel phải có số thứ tự, nên mới tạo số thứ tự trong query của access để xuất dữ liệu qua excel cho nhanh và tiện hơn đó mà.
 
Cách đánh số thứ tự như trên như tôi đã nói là mình dựa vào trường [MA HANG] để tạo ra số thứ tự, do vậy khi xuất ra nó sẽ tự động dò theo thứ tự mà đánh số, do đó khi bạn sort cột ngày thì số thứ tự đó nó sẽ sort theo mà không đánh số thứ tự theo cột ngày.

Tôi đã thử chuyển thành trường ngày rồi [NGAY] cũng không đánh số thứ tự được đâu. Cách của bạn không ổn rồi.
 
Cách đánh số thứ tự như trên như tôi đã nói là mình dựa vào trường [MA HANG] để tạo ra số thứ tự, do vậy khi xuất ra nó sẽ tự động dò theo thứ tự mà đánh số, do đó khi bạn sort cột ngày thì số thứ tự đó nó sẽ sort theo mà không đánh số thứ tự theo cột ngày.

Tôi đã thử chuyển thành trường ngày rồi [NGAY] cũng không đánh số thứ tự được đâu. Cách của bạn không ổn rồi.
Mình đã nói là lấy khóa chính để làm điều kiện đánh số mà, ngày thì nó có thể lặp lại thì làm sao được.
Nếu như bạn muốn thì vẫn có thể được, nhưng phải lấy 1 trường khóa chính kết nối với trường ngày, như vậy bạn có thêm 1 trường mới, lấy trường mới đó làm điều kiện để đánh số thứ tự. nhưng bạn lưu ý là nó chỉ đánh số theo thứ tự tăng dần thôi còn nếu bạn sort giảm dần như trên thì nó sẽ cho kết quả stt giảm dần đấy nhé.
 
Nếu bạn Export Report ra Excel thì tôi có cách.
 
Đúng Ptm nói nếu xuất từ Report --Exc chỉ thêm 1 textbox với giá trị =1 và đặt thuộc tính Running Sum là ngon. Mà theo mình có sao đâu dữ liệu vẫn bảo đảm mà.
 
Như vậy trong Access bị dở ở điểm này rồi, access bó tay luôn vì nó không có hàm row_number.
 
*) Nếu như làm theo cách của anh ptm0412 và anh Sealand thì bạn làm chi tiết như sau:


attachment.php


Bấm vào gờ Data của Properties:

attachment.php


Click chuột phải vào thanh Detail của report, chọn Sorting and grouping.

attachment.php


Chọn Field\Expression là NGAY, chọn Sort Order là Dessending (Tùy bạn chọn)

attachment.php


*) Còn nếu như bạn muốn thực hiện trên Query như tôi đã nói như trên thì bạn hãy tham khảo file đính kèm nhé
Thân
 

File đính kèm

  • 1.JPG
    1.JPG
    56.4 KB · Đọc: 260
  • 2.JPG
    2.JPG
    57.1 KB · Đọc: 234
  • 2.1.JPG
    2.1.JPG
    58.8 KB · Đọc: 226
  • 3.JPG
    3.JPG
    72.8 KB · Đọc: 232
  • Auto number in Query.zip
    21.8 KB · Đọc: 123
Như vậy trong Access bị dở ở điểm này rồi, access bó tay luôn vì nó không có hàm row_number.
Sức mạnh của Access là Report động, query chỉ là bước trung gian để cuối cùng làm ra Report. Với 1 Query ta có thể tạo ra nhiều report theo những tiêu chí khác nhau, bằng những biện pháp Group, Hide, Sort, ... thích hợp.
Vì dù sao, mục đích cuối cùng của mọi quá trình xử lý thông tin là ra báo cáo!

Nói vậy, nhưng vẫn có thể dùng Code để gán số thứ tự vào 1 field có sẵn của query trước khi Export ra Excel. Access không hẳn là bó tay, kể cả hàm Row_Number, bạn cũng có thể tự tạo!
 
Lần chỉnh sửa cuối:
"kể cả hàm Row_Number, bạn cũng có thể tự tạo"
Xin chỉ giúp cho tôi code của hàm tự tạo đi, cám ơn nhiều.
 
Đánh số thứ tự record tự động cho query trong Access

"kể cả hàm Row_Number, bạn cũng có thể tự tạo"
Xin chỉ giúp cho tôi code của hàm tự tạo đi, cám ơn nhiều.
Muốn code có code! Bạn chép đoạn code này vào Module nha:
PHP:
Public mOrder As Long
Function SortID(myField) As Long
   mOrder = mOrder + 1
   SortID = mOrder
End Function
Giả sử bạn có 1 bảng bất kỳ tên là [MyTable]
Cú pháp query nnư sau:
PHP:
SELECT MyTable.*, SortID([HoTen]) AS SortID
FROM MyTable
ORDER BY HoTen;
Lưu ý:
- Nếu order by theo Field nào thì tên field đó cũng chính là biến của hàm SortID.
- Trong trường hợp Order by nhiều hơn 1 field, thì field đầu tiên sẽ là biến của SortID
Ví dụ:
SELECT MyTable.*, SortID([MyTable.HoTen]) AS SortID
FROM MyTable
ORDER BY MyTable.HoTen, MyTable.NgaySinh, MyTable.SoCMND;
Bạn xem file đính kèm để "thực tế" hén! Lúc này bạn đã thấy công việc trở nên đơn giản hơn rồi phải không?
 

File đính kèm

  • ca_dafi.zip
    22.5 KB · Đọc: 403
Lần chỉnh sửa cuối:
Theo code của ca_dafi thì hay thật nhưng mà con một chỗ là cái biến mOrder này sẽ nhớ lại, nếu ta chạy query 2 lần thì nó sẽ đánh số thứ tự tiếp theo.
 
Theo code của ca_dafi thì hay thật nhưng mà con một chỗ là cái biến mOrder này sẽ nhớ lại, nếu ta chạy query 2 lần thì nó sẽ đánh số thứ tự tiếp theo.
Đúng vậy, nhưng nó vẫn đảm bảo việc Sort theo yêu cầu! Như vậy bắt đầu từ số mấy thì không quan trọng nữa, đúng không bạn! (Nghĩa là muốn sort thứ tự record thì không nhất thiết record đầu tiên phải có số thứ tự là 1.).

Nếu chúng ta muốn thì vẫn có cách làm mà! Tạo 1 form với 1 nút lệnh để gọi Query ra. Trước khi gọi query thì Set biến toàn cục mOrder đó về giá trị là 0( mOrder = 0) là xong!

File đính kèm, bạn vào Form, trong đó có 1 form, vào xem thử nha!
 
Lần chỉnh sửa cuối:
Hình như máy em bị vấn đề hay là do code cũng không biết vì chưa test với máy khác.
Anh thử chạy Query và click chuột tới, lui vào các trường, đặc biệt là trường vừa tạo số thứ tự, nó nhảy số mà mình không hiểu như thế nào luôn.
Mong anh khắc phục
Cám ơn anh.
 
Theo tôi dùng thì code của ca_dafi là ổn rồi vì tôi dùng query bên excel nên khi mỗi lần chạy query thì access mới khởi động nên biến toàn cục sẽ được trả về 0
Cám an ca_dafi rất nhiều.
 
Hình như máy em bị vấn đề hay là do code cũng không biết vì chưa test với máy khác.
Anh thử chạy Query và click chuột tới, lui vào các trường, đặc biệt là trường vừa tạo số thứ tự, nó nhảy số mà mình không hiểu như thế nào luôn.
Khi click tới click lui trong trường vừa tạo số thứ tự, số nó bị nhảy (máy mình cũng bị y vậy - nên đừng trách máy của bạn nghen!), tạm thời bạn có thể khắc phục bằng cách vào Menu/Records/Refresh nhé!

Có thể tạo một Form và đưa query vào SubForm và thiết lập không cho chỉnh sửa/ xoá/ records thử xem sao!
 
Web KT
Back
Top Bottom