• lọc có điều kiện (IIF, DSUM)
  • lọc có điều kiện (IIF, DSUM)

    hthai > 28-09-15, 03:55 PM

    Nhờ các bạn xem dùm công thức bị sai ở đâu mà nó báo lỗi mình tìm không ra

    =IIf([cmbLoaiChungTu]="*",DSum("SoTien","qrySoNhatKyChung"),DSum("SoTien","qrySoNhatKyChung","[LoaiChungTu]='"[cmbLoaiChungTu]"'"))

    - Nếu trong ô cmbLoaiChungTu đã chọn dấu * thì tính tổng tất cả các gía trị cột SoTien của query qrySoNhatKyChung, không loại trừ số tiền nào.
    - Nếu không chọn dấu * (tức là chọn một chứng từ nào đó) thì tính tổng các giá trị cột SoTien riêng cho loại chứng từ đã chọn trong combo box cmbLoaiChungTu.


    Thanks!!
  • RE: lọc có điều kiện (IIF, DSUM)

    maidinhdan > 28-09-15, 05:45 PM

    (28-09-15, 03:55 PM)hthai Đã viết: Nhờ các bạn xem dùm công thức bị sai ở đâu mà nó báo lỗi mình tìm không ra


    =IIf([cmbLoaiChungTu]="*",DSum("SoTien","qrySoNhatKyChung"),DSum("SoTien","qrySoNhatKyChung","[LoaiChungTu]='"[cmbLoaiChungTu]"'"))

    Sai chỗ|:
    1. ="*"
         Máy sẽ không hiểu khi bạn viết như thế

    2. Các hàm Dsum nhớ bảo vào dấu: "[Ten cot]": cái này bạn xem Demo Tổng hợp hàm Dsum, Dcount, DAvg, Dlookup, DMax, DMin...

    Xem trước 1 hình nè
    [Hình: TonghophamD_1.png]


    Chưa biết ý đồ câu này cũng như Data trên table như thế nào nửa nên không thể trả lời cụ thể và hướng khắc phục cho bạn được.

    Thân mến!
  • RE: lọc có điều kiện (IIF, DSUM)

    tranthanhan1962 > 28-09-15, 06:15 PM

    (28-09-15, 03:55 PM)hthai Đã viết: Nhờ các bạn xem dùm công thức bị sai ở đâu mà nó báo lỗi mình tìm không ra

    =IIf([cmbLoaiChungTu]="*",DSum("SoTien","qrySoNhatKyChung"),DSum("SoTien","qrySoNhatKyChung","[LoaiChungTu]='"[cmbLoaiChungTu]"'"))

    - Nếu trong ô cmbLoaiChungTu đã chọn dấu * thì tính tổng tất cả các gía trị cột SoTien của query qrySoNhatKyChung, không loại trừ số tiền nào.
    - Nếu không chọn dấu * (tức là chọn một chứng từ nào đó) thì tính tổng các giá trị cột SoTien riêng cho loại chứng từ đã chọn trong combo box cmbLoaiChungTu.


    Thanks!!
    Trong biểu thức Dsum thứ hai
    DSum("SoTien","qrySoNhatKyChung","[LoaiChungTu]='"[cmbLoaiChungTu]"'")
    cmbLoaiChungTu là một đối tượng tham số chứ không phải là 1 giá trị
    Vì vậy biểu thức đúng phải là "[LoaiChungTu]=[cmbLoaiChungTu]" chứ không phải "[LoaiChungTu]='"[cmbLoaiChungTu]"'"
    Biểu thức đầy đủ
    =IIf([cmbLoaiChungTu]="*";DSum("SoTien";"qrySoNhatKyChung");DSum("SoTien";"qrySoNhatKyChung";"[LoaiChungTu]=[cmbLoaiChungTu]"))

    Lưu ý như Dân đã nói. Cần viết đúng cú pháp.
    1/ Tên tham số (Tên trường, tên control) phải đứng trong cặp []
    2/ Tên vùng, giá trị phải nằm trong các cặp '',""
    3/ Phải xác định đâu là giá trị, đâu là tham số.
    Do ở đây bạn sử dụng combobox cmbLoaiChungTu làm tham số nên access vẫn chấp nhận [cmbLoaiChungTu]="*" khi bạn gõ ký tự * vào combobox cmbLoaiChungTu (* ở đây có giá trị ký tự * chứ không phải ký tự đại diện mọi giá trị).
    Khi đặt biểu thức
    IIf([cmbLoaiChungTu]="*";DSum("SoTien";"qrySoNhatKyChung");DSum("SoTien";"qrySoNhatKyChung";"[LoaiChungTu]=[cmbLoaiChungTu]")) 
    vào control source của một texbox trên form thì không bị lỗi còn nếu đưa vào trường của query thì access báo lỗi ngay lập tức.
    Cú pháp "SoTien" của bạn trong trường hợp đơn giản access cố gắng hiểu là tên trường, xía xóa chuyện ta viết sai . Nhưng trong các trường hợp phức tạp nó sẽ báo lỗi ngay vì cú pháp đúng của nó là "[SoTien]"
  • RE: lọc có điều kiện (IIF, DSUM)

    hthai > 29-09-15, 09:55 AM

    Thanks 2 bác!