• Hàm chuyển giá trị trong cột thành chuỗi cách nhau dấu phẩy
  • 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...

    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
    Sử dụng:
    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

    [Hình: hoadonxoabo.jpg]
    Ví dụ ta có table sau:
    tableHDIndex (Click to View)
    Yêu cầu ở đây là bạn liệt kê các số Hóa đơn bị xoabo.
    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

    Noname > 06-12-10, 11:38 AM

    (06-12-10, 11:17 AM)haquocquan Đã viết: No cho xin link khác nhé. Link trên ko down được

    Thử với link này xem
    Download

    Hoặc link này 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, 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.