• Một số hàm liên quan đến ngày tháng và tính toán
  • RE: Một số hàm liên quan đến ngày tháng và tính toán

    Xuân Thanh > 09-02-20, 09:25 AM

    (09-02-20, 08:29 AM)tracanhtam Đã viết: Cám ơn bạn ongke0711 rất nhiều, tôi đã chạy được code như bạn hướng dẫn. Còn cột tuần là cố định theo năm từ 1 đến 37, vậy nếu muốn đánh số từ 1 đến 37 bằng code trên access thì làm thế nào vậy bạn, xin cám ơn (Table gồm Tuannamhoc(khóa chính),tungay,denngay)

    Đây mới là yêu cầu cụ thể của bài toán. Nếu chủ topic nói rõ ngay từ đầu thì dễ cho người hỗ trợ. Nên rút kinh nghiệm cho những lần sau
    Với bài toán này có nhiều cách giải. Dưới đây là một cách
    Tạo hai table
    1/ Table tblNamHoc gồm 2 trường NamHoc(Khóa chính), NgayKhaiGiang
    2/ Table tblTuanNamHoc gồm 3 trường như của bạn : Tuan(Khóa chính), NgayDauTuan, NgayCuoiTuan
    Chạy code sau để cập nhật toàn bộ 37 Record vào tblTuanNamHoc
    Mã PHP:
    Sub TaoLichTuan()
        Dim i As IntegerNgay As Date
        Dim NamHoc 
    As DAO.Recordset
        Dim Tuan 
    As DAO.Recordset
        Set NamHoc 
    CurrentDb.OpenRecordset("tblNamHoc"dbOpenDynaset)
        Set Tuan CurrentDb.OpenRecordset("tblTuanNamHoc"dbOpenDynaset)
        If Tuan.RecordCount 0 Then CurrentDb.Execute "Delete From tblTuanNamHoc"
        If NamHoc!NgayKhaiGiang "" Then 
             MsgBox 
    "Chua nhap ngay khai giang"
             
    Exit Sub
        
    Else
             
    Ngay NamHoc!NgayKhaiGiang
        End 
    If
        For 1 To 37
            Tuan
    .AddNew
            Tuan
    !TuanNamHoc i
            
    If 1 Then Tuan!NgayDauTuan Ngay Else Tuan!NgayDauTuan Ngay + (1) * 7
            Tuan
    !NgayCuoiTuan Tuan!NgayDauTuan 5
            Tuan
    .Update
        Next        
    End Sub 

    Nói rõ thêm code trên chỉ chạy được khi tblNamHoc chỉ có duy nhất một record. Nếu muốn sử dụng cho nhiều năm học thì phải dùng form và cấu trúc lại Table tblTuannamHoc thêm một trường NamHoc nữa
  • RE: Một số hàm liên quan đến ngày tháng và tính toán

    ongke0711 > 09-02-20, 10:21 AM

    (09-02-20, 09:25 AM)Xuân Thanh Đã viết:
    Mã PHP:
    Sub TaoLichTuan()
        Dim i As IntegerNgay As Date
        Dim NamHoc 
    As DAO.Recordset
        Dim Tuan 
    As DAO.Recordset
        Set NamHoc 
    CurrentDb.OpenRecordset("tblNamHoc"dbOpenDynaset)
        Set Tuan CurrentDb.OpenRecordset("tblTuanNamHoc"dbOpenDynaset)
        If Tuan.RecordCount 0 Then CurrentDb.Execute "Delete From tblTuanNamHoc"
        If NamHoc!NgayKhaiGiang "" Then 
            MsgBox 
    "Chua nhap ngay khai giang"
            Exit Sub
        
    Else
            Ngay NamHoc!NgayKhaiGiang
        End 
    If
        For 1 To 37
            Tuan
    .AddNew
            Tuan
    !TuanNamHoc i
            
    If 1 Then Tuan!NgayDauTuan Ngay Else Tuan!NgayDauTuan Ngay + (1) * 7
            Tuan
    !NgayCuoiTuan Tuan!NgayDauTuan 5
            Tuan
    .Update
        Next        
    End Sub 

    Tôi nghĩ code của bác Xuân Thanh chưa đáp ứng đúng yêu cầu của chủ thớt đâu. Vì số tuần 1 -37 là liền mạch nhưng trong đó sẽ có đoạn [Từ Ngày] [Đến Ngày] sẽ bị nhảy cóc, không liền mạch. Phải loại bỏ những ngày được nghỉ ra rồi tạo tuần.
  • RE: Một số hàm liên quan đến ngày tháng và tính toán

    tracanhtam > 09-02-20, 10:42 AM

    (09-02-20, 10:21 AM)ongke0711 Đã viết:
    (09-02-20, 09:25 AM)Xuân Thanh Đã viết:    
    Mã PHP:
    Sub TaoLichTuan()
        
    Dim i As IntegerNgay As Date
        Dim NamHoc 
    As DAO.Recordset
        Dim Tuan 
    As DAO.Recordset
        Set NamHoc 
    CurrentDb.OpenRecordset("tblNamHoc"dbOpenDynaset)
        Set Tuan CurrentDb.OpenRecordset("tblTuanNamHoc"dbOpenDynaset)
        If Tuan.RecordCount 0 Then CurrentDb.Execute "Delete From tblTuanNamHoc"
        If NamHoc!NgayKhaiGiang "" Then 
            MsgBox 
    "Chua nhap ngay khai giang"
            Exit Sub
        
    Else
            Ngay NamHoc!NgayKhaiGiang
        End 
    If
        For 1 To 37
            Tuan
    .AddNew
            Tuan
    !TuanNamHoc i
            
    If 1 Then Tuan!NgayDauTuan Ngay Else Tuan!NgayDauTuan Ngay + (1) * 7
            Tuan
    !NgayCuoiTuan Tuan!NgayDauTuan 5
            Tuan
    .Update
        Next        
    End Sub 

    Tôi nghĩ code của bác Xuân Thanh chưa đáp ứng đúng yêu cầu của chủ thớt đâu. Vì số tuần 1 -37 là liền mạch nhưng trong đó sẽ có đoạn [Từ Ngày] [Đến Ngày] sẽ bị nhảy cóc, không liền mạch. Phải loại bỏ những ngày được nghỉ ra rồi tạo tuần.
    Bạn ongke0711 nói rất đúng ý của tôi, cách làm của bạn Xuân Thanh rất hay, chỉ 1 cái clich chuột. Nhưng nếu các tuần nó không liên tục, tôi muốn nhập từ tuần a đến tuần b, ví dụ : 1->18,19->21, 22 đến 37. Rất cám ơn mọi người đã giúp đở.
  • RE: Một số hàm liên quan đến ngày tháng và tính toán

    Xuân Thanh > 09-02-20, 10:54 AM

    Như tôi đã nói ở bài trước, việc tạo lịch tuần cho cả năm học là việc đương nhiên phải như thế, không thể bỏ cách tuần được.
    Còn việc sử dụng thời gian của tuần đó vào việc gì thì lại là chuyện khác. Dựa vào cái tblTuanNamHoc này muốn làm cái gì trong đó chả được. Ví dụ muốn trích xuất tư tuần 21 đến 35 thì lấy trong đó ra sử dụng vào mục đích khác như ongke0711 đã nói ở trên
    Nói chung là yêu cầu của chủ thớt không rõ ràng thì không thể giải quyết được cái gì hết. Xem lại câu hỏi của chủ thớt sẽ rõ tại sao tôi nói như vậy

    (09-02-20, 08:29 AM)tracanhtam Đã viết: Cám ơn bạn ongke0711 rất nhiều, tôi đã chạy được code như bạn hướng dẫn. Còn cột tuần là cố định theo năm từ 1 đến 37, vậy nếu muốn thêm số tuần từ 1 đến 37 (37 record cho cột tuần) bằng code trên access thì làm thế nào vậy bạn, xin cám ơn (Table gồm Tuannamhoc(khóa chính),tungay,denngay)
  • RE: Một số hàm liên quan đến ngày tháng và tính toán

    ongke0711 > 09-02-20, 02:23 PM

    Bạn xem file demo này.
    Link: http://www.mediafire.com/file/lb2sjh64xp...accdb/file

    - Bạn phải cập nhật ngay từ đầu các tuần nghỉ học vào table "tblNgayNghiLe" khi qua năm học mới.
    - Các tuần nghỉ phải là chẳn tuần thì code mới chạy đúng. Tức là nghỉ nguyên tuần chứ không nghĩ lẻ mấy ngày giữa tuần.
    Bạn test các trường hợp xem có chạy đúng không.

    @XuanThanh: có thể bạn chủ thớt muốn tạo sẳn table Tuần học theo qui ước riêng để dễ xử lý hơn cho các truy vấn sau đó chứ thực ra dùng thẳng luôn số tuần của hệ thống cũng được nhưng cách tổ chức xử lý dữ liệu phải khác đi mà bạn chủ thớt chưa làm được.  014
  • RE: Một số hàm liên quan đến ngày tháng và tính toán

    Xuân Thanh > 09-02-20, 03:48 PM

    (09-02-20, 02:23 PM)ongke0711 Đã viết: Bạn xem file demo này.
    Link: http://www.mediafire.com/file/lb2sjh64xp...accdb/file

    - Bạn phải cập nhật ngay từ đầu các tuần nghỉ học vào table "tblNgayNghiLe" khi qua năm học mới.
    - Các tuần nghỉ phải là chẳn tuần thì code mới chạy đúng. Tức là nghỉ nguyên tuần chứ không nghĩ lẻ mấy ngày giữa tuần.
    Bạn test các trường hợp xem có chạy đúng không.

    @XuanThanh: có thể bạn chủ thớt muốn tạo sẳn table Tuần học theo qui ước riêng để dễ xử lý hơn cho các truy vấn sau đó chứ thực ra dùng thẳng luôn số tuần của hệ thống cũng được nhưng cách tổ chức xử lý dữ liệu phải khác đi mà bạn chủ thớt chưa làm được.  014

    1/ Nếu nói rõ ngay từ đầu thì hướng giải quyết sẽ dễ hơn, đâu phải mò mẫm?
    2/ Không thể nghỉ nguyên tuần được đâu ongke0711 vì luật giáo dục không cho phép  014 014 014 014
  • RE: Một số hàm liên quan đến ngày tháng và tính toán

    tracanhtam > 09-02-20, 05:23 PM

    (09-02-20, 02:23 PM)ongke0711 Đã viết: Bạn xem file demo này.
    Link: http://www.mediafire.com/file/lb2sjh64xp...accdb/file

    - Bạn phải cập nhật ngay từ đầu các tuần nghỉ học vào table "tblNgayNghiLe" khi qua năm học mới.
    - Các tuần nghỉ phải là chẳn tuần thì code mới chạy đúng. Tức là nghỉ nguyên tuần chứ không nghĩ lẻ mấy ngày giữa tuần.
    Bạn test các trường hợp xem có chạy đúng không.

    @XuanThanh: có thể bạn chủ thớt muốn tạo sẳn table Tuần học theo qui ước riêng để dễ xử lý hơn cho các truy vấn sau đó chứ thực ra dùng thẳng luôn số tuần của hệ thống cũng được nhưng cách tổ chức xử lý dữ liệu phải khác đi mà bạn chủ thớt chưa làm được.  014
    Cám ơn bạn ongke0711 rất nhiều, cách làm của bạn rất hay, tôi đã test thấy đúng hết. Nhưng nếu xảy ra trường hợp có 1 tuần nào đó mà nghỉ không trọn 1 tuần thì mình nhập thủ công cho tuần đó, vậy sang tuần sau nữa nó trở lại như cũ thì mình có giải quyết được không, xin cám ơn.
  • RE: Một số hàm liên quan đến ngày tháng và tính toán

    ongke0711 > 09-02-20, 05:33 PM

    (09-02-20, 05:23 PM)tracanhtam Đã viết: Cám ơn bạn ongke0711 rất nhiều, cách làm của bạn rất hay, tôi đã test thấy đúng hết. Nhưng nếu xảy ra trường hợp có 1 tuần nào đó mà nghỉ không trọn 1 tuần thì mình nhập thủ công cho tuần đó, vậy sang tuần sau nữa nó trở lại như cũ thì mình có giải quyết được không, xin cám ơn.

    Bạn nên đưa ra (dự kiến trước) tất cả các trường hợp có thể phát sinh, dùng file Excel cũng được.
    Liệt kê từng trường hợp một với ví dụ mình hoạ.
  • RE: Một số hàm liên quan đến ngày tháng và tính toán

    Xuân Thanh > 09-02-20, 06:53 PM

    (09-02-20, 05:23 PM)tracanhtam Đã viết: Cám ơn bạn ongke0711 rất nhiều, cách làm của bạn rất hay, tôi đã test thấy đúng hết. Nhưng nếu xảy ra trường hợp có 1 tuần nào đó mà nghỉ không trọn 1 tuần thì mình nhập thủ công cho tuần đó, vậy sang tuần sau nữa nó trở lại như cũ thì mình có giải quyết được không, xin cám ơn.

    Một cách khác để nhập là nhập theo thứ tự tuần chỉ định. Ví dụ nhập từ tuần 3 đến tuần 8. Xác định ngày đâu tiên và ngày kết thúc cần nhập, VBA sẽ tự tính toán số ngày trong tuần để nhập, không sót một ngày nào
    Ví dụ : Dữ liệu đầu vào gồm
    Từ tuần 3, ngày đầu tiên 04/02/2020(Thứ ba) đến tuần 7, ngày cuối cùng 05/03/2020(Thứ 5). Kết Quả là
    Tuan         TuNgay          DenNgay
    3              04/02/2020     08/02/2020
    4              10/02/2020     15/02/2020
    5              17/02/2020     22/02/2020
    6              24/02/2020     29/02/2020
    7              02/03/2020     05/03/2020
    Số lượng tuần phải tương đương số ngày trong khoảng ngày đầu tiên và ngày kết thúc nếu không sẽ sót(Xem trong khoảng thời gian chỉ định có bao nhiêu tuần để đưa dữ liệu đầu vào cho đúng). Làm như thế thì không phải nghỉ nguyên tuần, chỉ cần chọn khoảng thời gian làm việc tương ứng theo tuần là được. Với cách làm này không thể tạo nguyên năm được

    Xem file đính kèm
  • RE: Một số hàm liên quan đến ngày tháng và tính toán

    tracanhtam > 09-02-20, 11:54 PM

    (09-02-20, 05:33 PM)ongke0711 Đã viết:
    (09-02-20, 05:23 PM)tracanhtam Đã viết: Cám ơn bạn ongke0711 rất nhiều, cách làm của bạn rất hay, tôi đã test thấy đúng hết. Nhưng nếu xảy ra trường hợp có 1 tuần nào đó mà nghỉ không trọn 1 tuần thì mình nhập thủ công cho tuần đó, vậy sang tuần sau nữa nó trở lại như cũ thì mình có giải quyết được không, xin cám ơn.

    Bạn nên đưa ra (dự kiến trước) tất cả các trường hợp có thể phát sinh, dùng file Excel cũng được.
    Liệt kê từng trường hợp một với ví dụ mình hoạ.
    1/ Bạn xem file này có những tình huống không trọn một tuần
       https://drive.google.com/open?id=1qAODKg...fIkTtHaHHO
    2/ File bạn gởi bị lổi khi table tblNgayNghiLe rỗng
    3/ Sau khi làm lịch tuần rồi thì có cách nào gộp 2 table tblNgayNghiLe và table tblTuanHoc thành một được không.
    Xin cám ơn bạn rất nhiều