Truy vấn dữ liệu access (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Xin giúp đỡ "hiển thị dữ liệu tồn theo vị trí lên listview VB6"
Đề: Cho file dữ liệu có các bảng tblHang, tblVitri, tblNhapXuat (xin tham khảo file DATA.mdb trong file gửi kèm).
Yêu cầu:
- Lấy dữ liệu "MaViTri" từ "tblViTri" để tự động tạo các cột tương ứng của listview bằng code.
- Tính tồn dựa vào "tblNhapXuat" rồi điền dữ liệu tồn của từng vị trí tương ứng với từng loại hàng trong "tblHang" lên listview.
(Ghi chú: Nếu không làm được trên listview hoặc quá bất tiện thì có thể dùng Datagrid hay loại lưới dữ liệu khác)
 

File đính kèm

Xin giúp đỡ "hiển thị dữ liệu tồn theo vị trí lên listview VB6"
Đề: Cho file dữ liệu có các bảng tblHang, tblVitri, tblNhapXuat (xin tham khảo file DATA.mdb trong file gửi kèm).
Yêu cầu:
- Lấy dữ liệu "MaViTri" từ "tblViTri" để tự động tạo các cột tương ứng của listview bằng code.
- Tính tồn dựa vào "tblNhapXuat" rồi điền dữ liệu tồn của từng vị trí tương ứng với từng loại hàng trong "tblHang" lên listview.
(Ghi chú: Nếu không làm được trên listview hoặc quá bất tiện thì có thể dùng Datagrid hay loại lưới dữ liệu khác)

Tôi làm cho bạn như file đính kèm. Lần sau phải tự tạo form nhé.

1.jpg
 

File đính kèm

File đính kèm

Lần chỉnh sửa cuối:
Cảm ơn bạn, mình sẽ lưu ý tạo form khi hỏi.
Xin phép mượn lại form của bạn. Mình bổ sung một chút ở đề bài (trong file excel), và nếu vẫn muốn dùng listview thì có thể làm được không bạn?
Ban đầu không nói luôn để đỡ mất thời gian.
Tôi thấy bạn ghi
(Phiếu nhập có mã bắt đầu bằng "NK", Phiếu xuất có mã bắt đầu bằng "XK", không tính các phiếu "CK").
Vậy không tính chỉ phiếu xuất CK hay là tính? Tôi thấy kết quả bạn tính ra là tính luôn CK?
 
Ban đầu không nói luôn để đỡ mất thời gian.
Tôi thấy bạn ghi

Vậy không tính chỉ phiếu xuất CK hay là tính? Tôi thấy kết quả bạn tính ra là tính luôn CK?
Mình giải thích thêm một chút: Cột "Ton" chính là số lượng tồn kho tổng của các vị trí, phiếu nhập có mã bắt đầu bằng "NK" (phiếu xuất có mã bắt đầu bằng "XK") các phiếu này có nghĩa là mình nhập hàng (xuất hàng) từ bên ngoài vào kho. Các phiếu chuyển kho có mã bắt đầu bằng "CK" chỉ là chuyển từ vị trí này tới vị trí kia trong kho nên nó chỉ làm thay đổi số lượng tồn ở các vị trí mà không làm thay đổi số lượng tồn tổng (khi tính tồn ở từng vị trí thì tất nhiên là tính hết cả các phiếu "NK", "XK", "CK" vào vị trí đó).
Viết nghĩa đen thì nó thế này:
SELECT tblHang.MaHang, tblHang.TenHang, Sum(IIf(Left(tblNhapXuat.MaPhieu,2)='NK',tblNhapXuat.SoLuongNhap,0))-Sum(IIf(Left(tblNhapXuat.MaPhieu,2)='XK',tblNhapXuat.SoLuongXuat,0)) AS Ton, Sum(IIf(tblNhapXuat.MaViTri='VT1',tblNhapXuat.SoLuongNhap,0))-Sum(IIf(tblNhapXuat.MaVitri='VT1',tblNhapXuat.SoLuongXuat,0)) AS VT1, Sum(IIf(tblNhapXuat.MaViTri='VT2',tblNhapXuat.SoLuongNhap,0))-Sum(IIf(tblNhapXuat.MaViTri='VT2',tblNhapXuat.SoLuongXuat,0)) AS VT2, Sum(IIf(tblNhapXuat.MaViTri='VT3',tblNhapXuat.SoLuongNhap,0))-Sum(IIf(tblNhapXuat.MaViTri='VT3',tblNhapXuat.SoLuongXuat,0)) AS VT3
FROM tblNhapXuat RIGHT JOIN tblHang ON tblNhapXuat.MaHang = tblHang.MaHang
GROUP BY tblHang.MaHang, tblHang.TenHang;
 
Mình giải thích thêm một chút: Cột "Ton" chính là số lượng tồn kho tổng của các vị trí, phiếu nhập có mã bắt đầu bằng "NK" (phiếu xuất có mã bắt đầu bằng "XK") các phiếu này có nghĩa là mình nhập hàng (xuất hàng) từ bên ngoài vào kho. Các phiếu chuyển kho có mã bắt đầu bằng "CK" chỉ là chuyển từ vị trí này tới vị trí kia trong kho nên nó chỉ làm thay đổi số lượng tồn ở các vị trí mà không làm thay đổi số lượng tồn tổng (khi tính tồn ở từng vị trí thì tất nhiên là tính hết cả các phiếu "NK", "XK", "CK" vào vị trí đó).
Viết nghĩa đen thì nó thế này:
SELECT tblHang.MaHang, tblHang.TenHang, Sum(IIf(Left(tblNhapXuat.MaPhieu,2)='NK',tblNhapXuat.SoLuongNhap,0))-Sum(IIf(Left(tblNhapXuat.MaPhieu,2)='XK',tblNhapXuat.SoLuongXuat,0)) AS Ton, Sum(IIf(tblNhapXuat.MaViTri='VT1',tblNhapXuat.SoLuongNhap,0))-Sum(IIf(tblNhapXuat.MaVitri='VT1',tblNhapXuat.SoLuongXuat,0)) AS VT1, Sum(IIf(tblNhapXuat.MaViTri='VT2',tblNhapXuat.SoLuongNhap,0))-Sum(IIf(tblNhapXuat.MaViTri='VT2',tblNhapXuat.SoLuongXuat,0)) AS VT2, Sum(IIf(tblNhapXuat.MaViTri='VT3',tblNhapXuat.SoLuongNhap,0))-Sum(IIf(tblNhapXuat.MaViTri='VT3',tblNhapXuat.SoLuongXuat,0)) AS VT3
FROM tblNhapXuat RIGHT JOIN tblHang ON tblNhapXuat.MaHang = tblHang.MaHang
GROUP BY tblHang.MaHang, tblHang.TenHang;
Code sẽ như sau:
Mã:
Private Sub Form_Load()
    Moketnoi
    Dim lrs As New ADODB.Recordset
    Dim objFields As ADODB.Fields
    Dim i As Integer
    Dim var1 As String
    var1 = ""
    var1 = var1 & "TRANSFORM Sum(Tong.Ton) AS SumOfTon " & vbCrLf
    var1 = var1 & "SELECT Tong.MaHang, " & vbCrLf
    var1 = var1 & "       Tong.TenHang, " & vbCrLf
    var1 = var1 & "       Sum(Tong.Ton) AS [Tong Ton] " & vbCrLf
    var1 = var1 & "FROM   (SELECT tblHang.MaHang, " & vbCrLf
    var1 = var1 & "               tblHang.TenHang, " & vbCrLf
    var1 = var1 & "               IIf(IsNull([MaViTri]), ""OPS"", [MaViTri])            AS MaVT, " & vbCrLf
    var1 = var1 & "               Sum(( IIf(IsNull([SoLuongNhap]), 0, [SoLuongNhap]) ) - ( " & vbCrLf
    var1 = var1 & "                   IIf(IsNull([SoLuongXuat]), 0, [SoLuongXuat]) )) AS Ton " & vbCrLf
    var1 = var1 & "        FROM   tblHang " & vbCrLf
    var1 = var1 & "               LEFT JOIN tblNhapXuat " & vbCrLf
    var1 = var1 & "                      ON tblHang.MaHang = tblNhapXuat.MaHang " & vbCrLf
    var1 = var1 & "        GROUP  BY tblHang.MaHang, " & vbCrLf
    var1 = var1 & "                  tblHang.TenHang, " & vbCrLf
    var1 = var1 & "                  IIf(IsNull([MaViTri]), ""OPS"", [MaViTri])) AS Tong " & vbCrLf
    var1 = var1 & "GROUP  BY Tong.MaHang, " & vbCrLf
    var1 = var1 & "          Tong.TenHang " & vbCrLf
    var1 = var1 & "PIVOT Tong.MaVT"
    lrs.Open var1, cnn, adOpenStatic, adLockReadOnly
    Set objFields = lrs.Fields
    For intLoop = 0 To (objFields.Count - 1)
         lvInventory.ColumnHeaders.Add , , objFields.Item(intLoop).Name
    Next
    While lrs.EOF = False
        Dim ListObj As ListItem
        Set ListObj = lvInventory.ListItems.Add(, , IIf(IsNull(lrs.Fields(0)), "", lrs.Fields(0)))
        For i = 1 To objFields.Count - 1
            ListObj.SubItems(i) = IIf(IsNull(lrs.Fields(i)), "", lrs.Fields(i))
        Next
        lrs.MoveNext
    Wend
    Set lrs = Nothing
    
End Sub
 
1. Báo lỗi như hình ảnh sau bạn ạ:
Error.jpg
Khi chọ debug thì tô mầu vàng ở dòng:
"Set ListObj = lvInventory.ListItems.Add(, , IIf(IsNull(lrs.Fields(0)), "", lrs.Fields(0)))"
2. Bạn hướng dẫn mình một chút về cách sử dụng TRANSFORM/PIVOT được chứ?
 
Lần chỉnh sửa cuối:
1. Báo lỗi như hình ảnh sau bạn ạ:
View attachment 127018
Khi chọ debug thì tô mầu vàng ở dòng:
"Set ListObj = lvInventory.ListItems.Add(, , IIf(IsNull(lrs.Fields(0)), "", lrs.Fields(0)))"
2. Bạn hướng dẫn mình một chút về cách sử dụng TRANSFORM/PIVOT được chứ?

1./ Bạn xem lại file đính kèm
2./ Đó là CrossTab Query, bạn tìm hiểu thêm với từ khóa đó nhé.
 

File đính kèm

Nếu mình muốn chuyển sang sử dụng cơ sở dữ liệu là SQL thì CrossTab Query này viết lại thế nào hả bạn?
 
Web KT

Bài viết mới nhất

Back
Top Bottom