Nhờ anh chị giúp đỡ lệnh SQL cho file access

Liên hệ QC

dongoclinh.vcli

Thành viên mới
Tham gia
19/2/19
Bài viết
9
Được thích
0
Chào các anh, chị,

Hiện em đang quản lý KH mua hàng theo file access dưới đây219666

Ma don hang: ngày KH mua hàng lần đầu , sẽ trùng với Ngay dang ky.
KH có thể mua nhiều lần và sẽ được note lại ở Ngay lap don.
Hiện em muốn tạo trường So thu tu để theo dõi thứ tự từng mã đơn hàng, nếu KH mua nhiều đơn hàng cùng ngày thì sẽ đánh số random (ví dụ như KH có mã CB1762)

Hiện em đang muốn tạo 1 querry UPDATE thực hiện trên access (do em đang quản lý dữ liệu trên access, và có link với vài bảng khác) để thực hiện update cột So thu tu hàng tháng, do hiện giờ số lượng KH quá lớn và ngày trước em sử dụng manual trên excel để đánh số.

Vậy nhờ anh, chị giúp đỡ ạ!

Trân trọng cảm ơn anh chị!
 

File đính kèm

  • cap nhat KH.xlsx
    9.8 KB · Đọc: 2
Lần chỉnh sửa cuối:
- Hỏi về xử lý trong Access mà không đưa file mẫu trên Access vậy?
- Về cột số thứ tự, không ai chạy Update query hàng tháng mà phải cập nhật ngay khi phát sinh nhập liệu.
- Việc đánh số thứ tự này cũng đơn giản (dùng code VBA) , bạn có thể reset lại số thứ tự khi qua năm, qua tháng v.v.. Giống như hiện tại trong ví dụ của bạn là reset lại số thứ tự khi qua mã khách hàng khác. Tôi thường dùng cách này để tạo mã phiếu nhập xuất tự động với các tiêu chí kết hợp như:
"PX-20190622-CB1672-01" --> khi qua ngày sẽ reset lại số thứ tự là 2 số cuối.

Trường hợp của bạn thì chỉ cần lấy 2 số cuối thì cách làm cũng giống như vậy.
Cách làm:
- Lọc ra tất cả nhưng dòng phiếu bán hàng của mã khách hàng đang nhập liệu.
- Lấy Max của số thứ tự trong các dòng vừa lọc ra đó + 1 để cập nhật thành stt kế tiếp
Vd:
Hàm tạo số thứ tự:

Mã:
Function TaoSTT() As Long
    Dim rs As DAO.Recordset
    Dim sSQL As String
    Dim Stt As Long

    sSQL = "SELECT Max([SoThuTu]) As SttMax FROM tblDonHang WHERE ([MaKH])='" & Me.cboMaKH & "'"
    Set rs = DBEngine(0)(0).OpenRecordset(sSQL, dbOpenSnapshot)

    If IsNull(rs!SttMax) Then
        Stt = 1
    Else
        Stt = rs!SttMax + 1
    End If
    TaoSoSTT = Stt

    rs.Close
    Set rs = Nothing
End Function

Nhìn hình cái Table bạn đang thiết kế là thấy không chuẩn rồi.
- 3 cột đầu: MaKH, TenKH, DOB là nên đưa vô table Khách hàng (tblKhachHang)
- Các cột sau đưa vào 1 table khác ví dụ: tblPhieuNhapXuat + tblNhapXuatChiTiet. Nếu dữ liệu nhiều thì tách tiếp ra thành 4 table:
tblPhieuNhap ---> tblPhieuNhapCT
tblPhieuXuat ---> tblPhieuXuatCT
=> các table này chỉ cần lưu MaKH là được rồi, không cần phải lưu trùng lắp lại các thông tin như TenKH, DOB cho tốn dung lượng file.

* Lưu ý quan trọng:
- Tuyệt đối không được đặt tên trường (Field) là tiếng Việt có dấu, có khoảng trắng. Tên tất cả các đối tượng: Table, Query, Form, Report cũng vậy.
- Không nên đặt tên có khoảng trắng để sau này tham chiếu trong code, trong query phải đưa vô dấu [...], mất thời gian.
 
Lần chỉnh sửa cuối:
..."PX-20190622-CB1672-01" --> khi qua ngày sẽ reset lại số thứ tự là 2 số cuối.
... => các table này chỉ cần lưu MaKH là được rồi, không cần phải lưu trùng lắp lại các thông tin như TenKH, DOB cho tốn dung lượng file.
Trường hợp 1 là không đúng chuẩn bậc 2 của CSDL LH. Một trường chứa trị của trường khác. Nếu một trị phức tạp (composite) thì nên dùng phương pháp hiểu ngầm hoặc trường ghép - calculated fields.
Trường hợp 2 không chỉ tốn dung lượng file mà là hoàn toàn trật đường lối CSDL LH. Chẳng những vậy, việc lặp lại nhiều lần sẽ đưa đến việc dữ liệu không đồng nhất. Ví dụ anh A có địa chỉ là "123 abc", về sau đổi địa chỉ thành "234 def" thì phải tìm tất cả những bảng có cái này để chỉnh à?

... ngày trước em sử dụng manual trên excel để đánh số.
Không rành văn phạm thì tránh dùng tiếng Tây u tùm lum.
"manual" có hai định nghĩa theo văn phạm ngữ cảnh. Theo văn phạm của câu trên thì nó là danh tự (noun). Và nghĩa của danh tự manual là quyển sách chỉ dẫn.
Chỉ ở trong tiếng Việt thì câu "sử dụng phương pháp thủ công" mới viết tắt được thành "sử dụng thủ công".
 
Web KT
Back
Top Bottom