• hàm Dlookup VBA
  • hàm Dlookup VBA

    minhminh25767 > 26-09-23, 11:45 AM

    Nhờ các Bác giải giùm em bài toán này với.

    em có 1 tablecoppy_excel: chứa tổng danh sách và điểm đi kèm (cụ thể là em coppy từ excel)

    <hoten>    <monhoc>   <diem>
       A                  TÓAN         8
       A                   ANH           6
       A                   SỬ             7
       B                  TÓAN         9
       B                   ANH           5
       B                   SỬ             7
       C                  TÓAN         6
       C                   ANH           6
       C                   SỬ             7
    ........                   ...           ...

    VÀ 1 FROM thêm mới có nguồn tablediem

    <ngày nhập>   <họ tên>  <điểm môn Toán>  <điểm môn Anh>  <điểm môn sử>
    vd: 26/9/2023       A                   8                          6                            7
         26/9/2023        B                  9                            5                           7
          26/9/2023        C                  6                           6                           7

    em muốn tạo 1 nút bấm Ở TRÊN FROM, khi thêm mới sẽ bấm nút đó: nó sẻ lấy họ tên của bạn A/B/C ở bản tablecoppy_excel gắn vào bản tablediem với các số điểm tương ứng vào các ô như ví dụ trên. 

    Mình thử tìm hiểu rồi có hàm Dlookup 2 điều kiện gì đó mà áp dụng vẫn chưa được. 
    Mong các Bác xem giúp.
    Trân trọng cảm ơn.
  • RE: hàm Dlookup VBA

    minhminh25767 > 26-09-23, 12:20 PM

    em đã làm được: câu lệnh cho nút bấm là
    Mã:
    Me.toan.Value = DLookup("diem", "tablecoppy_excel2", "[monhoc] = '" & "toan" & "' AND [ten] = '" & "A" & "'")


    Tương tự lặp lại cho các môn còn lại. 

    không biết có dài dòng quá không?
  • RE: hàm Dlookup VBA

    ongke0711 > 26-09-23, 02:10 PM

    (26-09-23, 12:20 PM)minhminh25767 Đã viết: em đã làm được: câu lệnh cho nút bấm là
    Mã:
    Me.toan.Value = DLookup("diem", "tablecoppy_excel2", "[monhoc] = '" & "toan" & "' AND [ten] = '" & "A" & "'")


    Tương tự lặp lại cho các môn còn lại. 

    không biết có dài dòng quá không?

    Không phải quá dài dòng mà là nó sai thiết kế bảng dữ liệu chuẩn hóa.
    - Giả định sau này (bạn phải đặt giả định) có phát sinh một mới ==> vô sửa, thêm cả đống code cho môn mới ở các Form, Report khác nhau.
    - Nhập liệu nên theo nguyên tắc phát triển hàng dọc, tức là cái bảng mà bạn copy từ Excel nó mới là chuẩn hóa hơn cái table mà bạn thiết kế lại trong Access (tên Môn được xếp hàng ngang). Để hiển thị theo hàng ngang thì chỉ cần dùng Crosstab Query là được rồi.
    - Khi bạn thiết kế dữ liệu môn, tên học sinh theo hàng dọc, khi cần import (copy) từ Excel thì nó cùng định dạng chỉ cần Insert toàn bộ bảng Excel vô table Access, thêm [ngày nhập] là xong -> Form tự hiển thị dữ liệu theo nguồn table.
    - Phải dùng Mã học sinh chứ không dùng Tên. Sau này cần hiển thị, báo cáo thì lookup sang table thông tin học sinh để lấy các thông tin liên quan.
    - Các control (textbox, nút lệnh, comboBox...) trên Form nên có tiếp đầu ngữ để phân biệt nó là Control chứ không phải Field. Đã có nhiều trường hợp thiết kế Form như trên mà phát sinh lỗi do Access nó không biết tham chiếu đến Textbox trên Form hay tham chiếu đến Field trong Table. Như Form của bạn là [toan].
  • RE: hàm Dlookup VBA

    minhminh25767 > 26-09-23, 02:52 PM

    (26-09-23, 02:10 PM)ongke0711 Đã viết:
    (26-09-23, 12:20 PM)minhminh25767 Đã viết: em đã làm được: câu lệnh cho nút bấm là
    Mã:
    Me.toan.Value = DLookup("diem", "tablecoppy_excel2", "[monhoc] = '" & "toan" & "' AND [ten] = '" & "A" & "'")


    Tương tự lặp lại cho các môn còn lại. 

    không biết có dài dòng quá không?

    Không phải quá dài dòng mà là nó sai thiết kế bảng dữ liệu chuẩn hóa.
    - Giả định sau này (bạn phải đặt giả định) có phát sinh một mới ==> vô sửa, thêm cả đống code cho môn mới ở các Form, Report khác nhau.
    - Nhập liệu nên theo nguyên tắc phát triển hàng dọc, tức là cái bảng mà bạn copy từ Excel nó mới là chuẩn hóa hơn cái table mà bạn thiết kế lại trong Access (tên Môn được xếp hàng ngang). Để hiển thị theo hàng ngang thì chỉ cần dùng Crosstab Query là được rồi.
    - Khi bạn thiết kế dữ liệu môn, tên học sinh theo hàng dọc, khi cần import (copy) từ Excel thì nó cùng định dạng chỉ cần Insert toàn bộ bảng Excel vô table Access, thêm [ngày nhập] là xong -> Form tự hiển thị dữ liệu theo nguồn table.
    - Phải dùng Mã học sinh chứ không dùng Tên. Sau này cần hiển thị, báo cáo thì lookup sang table thông tin học sinh để lấy các thông tin liên quan.
    - Các control (textbox, nút lệnh, comboBox...) trên Form nên có tiếp đầu ngữ để phân biệt nó là Control chứ không phải Field. Đã có nhiều trường hợp thiết kế Form như trên mà phát sinh lỗi do Access nó không biết tham chiếu đến Textbox trên Form hay tham chiếu đến Field trong Table. Như Form của bạn là [toan].

    như ý Bác, e đã tạo crosstab Query rồi + đưa họ tên thành mã rồi=> đưa nó vè hàng ngang được rồi. 
    giờ cái nút bấm ở trên from thêm mới phải dùng code nào để gán nó vào record mới. hay hiểu theo cách khác là đưa nó vào 1 table khác với định dạng hàng ngang. cảm ơn.