-
Hàm chuyển giá trị trong cột thành chuỗi cách nhau dấu phẩy
Noname > 05-12-10, 03:13 PM
bài viết của Noname
Site: http://thuthuataccess.com
vui lòng giữ tên tác giả và site nếu dùng lại bài viết này làm tư liệu cho mình và chia sẻ. Cám ơn
-------------------------------------------------------------------
Ứng dụng của hàm này vào việc liệt kê danh sách khách hàng, số hóa đơn mất - xóa bỏ, liệt kê các giá trị thỏa điều kiện nào đó trong 1 câu query thành 1 chuỗi.Dùng chuỗi này vào các báo cáo...
Sử dụng:Mã:Function columnToString(sql As String) As String
'author:Noname
'site:http://thuthuataccess.co.cc
Dim rs As Recordset
Dim S As String
Set rs = CurrentDb.OpenRecordset(sql)
rs.MoveFirst
While Not (rs.EOF)
S = S & "," & rs(0)
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
columnToString = Mid(S, 2)
End Function
VíMã:Private Sub Command0_Click()
Dim sql As String
sql = "select soHD FROM HDIndex WHERE [Trangthai] = 'xoabo'"
Me.txtChuoi = columnToString(sql)
Me.Repaint
End Sub
Ví dụ ta có table sau:
Yêu cầu ở đây là bạn liệt kê các số Hóa đơn bị xoabo.tableHDIndex (Click to View)
ta thấy có các giá trị sau:
000003
000004
000005
000013
000016
Vấn đề là ta liệt kê nó thành 1 chuỗi và ngăn nhau bằng dấu phẩy, để nó trở thành : 000003,000004,000005,000013,000016.
Hàm trên đáp ứng được điều đó bằng cách gọi:
Mã:Private Sub Command0_Click()
Dim sql As String
sql = "select soHD FROM HDIndex WHERE [Trangthai] = 'xoabo'"
Me.txtChuoi = columnToString(sql)
Me.Repaint
End Sub -
RE: Hàm chuyển giá trị trong cột thành chuỗi cách nhau dấu phẩy
haquocquan > 06-12-10, 11:17 AM
No cho xin link khác nhé. Link trên ko down được.
No nghiên cứu cho xin luôn hàm liệt kê các hóa đơn ko có trong danh sách nhé.
Cụ thể:
mình có HD từ: 0001 -----> 9999, nhưng trong đó bị thiếu một số hóa đơn: chẳng hạn: 0022, 0055
Làm thế nào lấy được 2 số này đưa vào danh sách.
Mình đã thử một số cách nhưng chạy chậm quá. -
RE: Hàm chuyển giá trị trong cột thành chuỗi cách nhau dấu phẩy
haquocquan > 07-12-10, 09:28 AM
(06-12-10, 11:17 AM)haquocquan Đã viết: No cho xin link khác nhé. Link trên ko down được.
No nghiên cứu cho xin luôn hàm liệt kê các hóa đơn ko có trong danh sách nhé.
Cụ thể:
mình có HD từ: 0001 -----> 9999, nhưng trong đó bị thiếu một số hóa đơn: chẳng hạn: 0022, 0055
Làm thế nào lấy được 2 số này đưa vào danh sách.
Mình đã thử một số cách nhưng chạy chậm quá.
No xem giúp ý trên nhé
-
RE: Hàm chuyển giá trị trong cột thành chuỗi cách nhau dấu phẩy
Noname > 07-12-10, 09:44 AM
(07-12-10, 09:28 AM)haquocquan Đã viết:
(06-12-10, 11:17 AM)haquocquan Đã viết: No cho xin link khác nhé. Link trên ko down được.
No nghiên cứu cho xin luôn hàm liệt kê các hóa đơn ko có trong danh sách nhé.
Cụ thể:
mình có HD từ: 0001 -----> 9999, nhưng trong đó bị thiếu một số hóa đơn: chẳng hạn: 0022, 0055
Làm thế nào lấy được 2 số này đưa vào danh sách.
Mình đã thử một số cách nhưng chạy chậm quá.
No xem giúp ý trên nhé
Vấn đề này thì chỉ có nước duyệt hết bảng hóa đơn thôi! Nên chậm là phải.
Thực tế danh sách hóa đơn không thể thiếu 1 số nào, cho dù cháy nổ mất hay bị hủy, hay xóa bỏ đều phải lưu lại trạng thái. Tức là trạng thái của số hóa đơn đó là xóa bỏ chứ không phải là delete ra khỏi hệ thống máy tính. Và tuyệt đối không để mất 1 số nào trong đó cả. Nếu không làm sao báo cáo với cơ quan thuế! -
RE: Hàm chuyển giá trị trong cột thành chuỗi cách nhau dấu phẩy
haquocquan > 07-12-10, 10:24 AM
Thực ra, vấn đề của mình không phải là hóa đơn, mà là danh sách khách hàng.
Chương trình kế toán của đơn vị mình lập bằng FOX FOR DOS (cổ lỗ sĩ rồi).
Đôi khi, kế toán xóa khách hàng trong danh sách khách hàng.
Mình import dữ liệu vào access để xử lý (không thể lưu vết được). Cần thống kê những khách hàng nào đã bị xóa (mã số khách hàng tự động được lấy từ thấp đến cao trong fox), mã nào không có trong một dãy đó, thì có nghĩa là bị xóa.
Có khoảng 40 ngàn khách hàng. Chạy chậm quá.
Đành phải nghĩ cách khác vậy
-
RE: Hàm chuyển giá trị trong cột thành chuỗi cách nhau dấu phẩy
Noname > 07-12-10, 11:11 AM
Cách đơn giản nhất là tạo 1 table tương tự, chỉ có 1 cột là mã số khách hàng. Bằng Excel cho nhanh. từ 00001=> số lớn nhất (không quá 65 ngàn dòng)
Sau đó left join bảng này với bảng danh sách khách hàng hiện hành.
lọc ra những cái nào phía bên trái =null là ok!
Tối đa cho việc lọc này là 5 phút. (đương nhiên là thủ công) -
RE: Hàm chuyển giá trị trong cột thành chuỗi cách nhau dấu phẩy
haquocquan > 07-12-10, 12:55 PM
Mình có cách rồi:
Tạo 2 table (một table để lưu dữ liệu khách hàng bị xóa, một table tạm)
Trong table1, mình lưu mã số max của từng tháng, table tạm để tạo các mã số từ max tháng trước, đến max tháng này, sau đó chỉ cần lọc trong table tạm thôi. Chắc là sẽ nhanh hơn. -
RE: Hàm chuyển giá trị trong cột thành chuỗi cách nhau dấu phẩy
Noname > 07-12-10, 01:46 PM
(07-12-10, 12:55 PM)haquocquan Đã viết: Mình có cách rồi:
Tạo 2 table (một table để lưu dữ liệu khách hàng bị xóa, một table tạm)
Trong table1, mình lưu mã số max của từng tháng, table tạm để tạo các mã số từ max tháng trước, đến max tháng này, sau đó chỉ cần lọc trong table tạm thôi. Chắc là sẽ nhanh hơn.
Mình gửi Quân demo nè:
danhsachkh: bảng có danh sách kh bị xóa bớt
masokhFull : Bảng list mã số khách hàng đầy đủ
Query1: query lọc ra những mã khách hàng nào bị thiếu trong bảng danh sách khách hàng bị xóa bớt
Download -
RE: Hàm chuyển giá trị trong cột thành chuỗi cách nhau dấu phẩy
haquocquan > 07-12-10, 01:58 PM
Thanks No.
Nhưng vấn đề của mình ko đơn giản như vậy.
Cụ thể hơn nhé:
Mình có file DBF (của kế toán), gồm khoảng 40 ngàn record (hiện tại)
Trong file DBF này có một số khách hàng bị xóa mà mình không biết (tất nhiên MSKH là thứ tự từ thấp đến cao, tự động tạo khi có KH mới)
Mình import vào access. Mình muốn lọc ra những MSKH không có trong file DBF này (từ 0001---> max(mskh), MSKH nào ko có).
Nói chung là như vậy.