Sử dụng hàm Dlookup tra Đơn giá từ bảng

Thảo luận trong 'Access và VBA' bắt đầu bởi ngocchung89, 4/7/10.

  1. ngocchung89

    ngocchung89 Member Hội viên mới

    Tại chỗ mà txtDonGia mình không phải đánh mà mình muốn là sau khi chọn Mã hàng, thì nó tra từ bảng DMH(Danh mục hàng) nó sẽ cho ra Đơn giá, chứ nhiều khi gõ Đơn giá nó không chính xác.

    [​IMG]

    Mình làm như thế này trong Control Soure của txtDon giá mà nó báo lỗi:
    =DLookUp([DonGia],[DMH],[DonGia]=[txtMaHang].[Value])

    http://www.mediafire.com/file/wajdhyjlclh/XDCSDL In hoa don.mdb
     

  2. chip2006

    chip2006 New Member Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    Sửa lại như sau:

    =DLookUp("[DonGia]","[DMH]","[DonGia]=" & [txtMaHang].[Value])
     
  3. xuanthanh

    xuanthanh Member Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    1/ Bạn sử dụng sai cú pháp hàm Dllokup
    2/ Nên sử dụng hết tính năng của combobox mahang trong trường hợp này
    - Column Count=4
    - Column Widths =0.9";0";0";1.1"
    - List Width=2"
    3/ Bắt sự kiện AfterUpdate của combo mahang
    DonGia=txtMahang.Column(3)
    4/ Bắt sự kiện AfterUpdate của DonGia
    ThanhTien=DonGia*SoLuong
    5/ Bắt sự kiện AfterUpdate của Soluong
    ThanhTien=DonGia*SoLuong

    Chúc vui
    Thân
     

    Các file đính kèm:

    Chỉnh sửa cuối: 5/7/10
  4. dhieutmqt41b

    dhieutmqt41b New Member Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    bổ sung thêm phần bác xuân thành viết:

    trong cột Mã Hàng bạn viết như sau

    select Mahang, tenhang, DonGia,dvt) from DMH;
    đặt thuộc lostforcus cho ô mã hàng như sau
    me.dongia=mahang.column(2)
    khi bạn chọn mã hàng xong máy sẽ tự điền đơn giá cho bạn
    ko lên sử dụng DLookup, vì tính phức tạp và thao tác sử lý số liệu hơi chậm, nếu bảng danh mục của bạn nhiều mã hàng.
     
  5. xuanthanh

    xuanthanh Member Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    1/ Đã chọn nguyên cả table làm dữ liệu nguồn nên chọn 4 cột như tôi đã làm. Nếu dùng query làm dữ liệu nguồn cho combo thì làm như bạn đã nói
    2/ Bạn xem lại cái gạch đỏ ý. Dùng Lostforcus không đúng đâu

    Thân
     
  6. dhieutmqt41b

    dhieutmqt41b New Member Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    dùng lostforcus, hoặc afferupdate hoặc onchange, đều được hết, mục đích là sau khi con trỏ chuột ra khỏi hô mã hàng thì lập tức giá trị được điền luôn vào ô dvt, và giá bán
    tuy nhiên khi bạn làm bạn lưu ý ở Property của mã hàng, tại mục bound column bạn phải điền là 4 - số lượng field bạn đã chọn, khi đó các column bạn gán nó mới hiểu
     
  7. xuanthanh

    xuanthanh Member Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    Xin lỗi vì xem không kỹ
     
  8. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    Nếu xét ở một khía cạnh nào đó thì bẫy các sự kiện trên đều được.

    Tuy nhiên nếu xét kỹ các sự kiện thì nó có khác nhau đôi chút.

    Nếu bẫy LostFocus thì sẽ có khả năng là người sử dụng không chọn hoặc không nhập gì vào trong control được bẫy sự kiện thì lúc đó sẽ ra sao? Lúc đó giá trị trong control là Null, và như thế cái statement trong thủ tục sẽ có khả năng trả về giá trị không thích hợp.

    Nếu bẫy OnChange thì cứ mỗi khi có sự thay đổi giá trị trong control thì statement trong thủ tục sẽ thực thi! Gõ vào bao nhiêu lần thì chạy thủ tục bấy nhiêu lần.

    Cho nên bẫy AfterUpdate là thích hợp nhất, vì chỉ khi nào giá trị trong control thật sự thay đổi thì mới co chạy statement trong thủ tục.
     
  9. Sư Tử Chúa

    Sư Tử Chúa Quản lý SMOD & MOD Thành viên BQT Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    Em vẫn thường dùng bẫy AfterUpdate :runcamcap:
     
  10. glasseggs

    glasseggs New Member Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    Dùng After là chuẩn nhất .
    Bác Phat ơi cho em hỏi chút trong trường hợp của em. Để chặn tình huống có 2 người cùng sửa 1 bản ghi sẽ xuất hiện thông báo của Access, em cho vào Onchange để xử lý .
    Đầu tiên nó kiểm tra cái mã ID này có trong bảng Log chưa nếu chưa thì sẽ chạy 1 Query append cái mã ID và tên người đó vào 1 table Log ,nếu có rồi thì sẽ undo và khóa form không cho update bản ghi đó.
    Cho vào Onchange để bắt ngay khi người dùng nhập chứ không để họ nhập hết cái Textbox đó rồi mới báo.
    Bác có cách xử lý nào hay hơn không ,vì Onchange đúng như bác nói nó sẽ chạy bấy nhiêu lần tương ứng với số lần gõ. Mà mục đích của em chỉ cần bắt khi ký tự đầu tiên được nhập vào textbox thôi.
    Thanks
     
  11. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    Cho cái kiểm đó vào BeforeInsert của Form.
     
  12. glasseggs

    glasseggs New Member Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    Cái này hình như không được bác ơi, vì hình như sự kiện BeforeInsert của Form chỉ xảy ra khi thêm bản ghi mới phải không. Còn em chỉnh sửa dữ liệu trên bản ghi đã tồn tại rồi mà.
    Chứ nếu bản ghi mới thì làm sao có 2 người cùng sửa được vi nó chưa được lưu.
     
  13. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    Vậy thì vào thuộc tính của Database mà chỉnh. Chọn Record Lock.
    Chọn cái này thì em nào vào sửa sau thì sẽ có thông báo không cho sửa.
     
  14. chip2006

    chip2006 New Member Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    Khai báo biến flag kiểu boolean, gán thuộc tính này = false trong sự kiện Form_SelectionChange.

    Khi bạn kích hoạt sự kiện change:
    If flag = false Then
    kiểm tra record lock, nếu có người đang sửa thì cảnh báo.
    flag = true
    End If.

    Như vậy lần gõ thứ 2 flag đang mang giá trị true nên sẽ ko cần kiểm tra nữa, khi bạn chọn record khác thì kích hoạt sự kiện SelectionChange làm cho biến flag = false trở lại.
     
  15. glasseggs

    glasseggs New Member Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    Thanks 2 bác lắm lắm !
    @ bác Phật : Cách của bác cũng hay nhưng hơi quân chủ chuyên chế một chút, bé nào nhanh bé ấy thắng. Các bé sau cứ gọi là ngồi ngáp vặt với nhau nếu bé đầu tiên edit xong mà không chịu next bản ghi khác.
    @ bác Chip2006 : Ý tưởng của bác tuyệt,khá hay nhưng có điều cái sự kiện Form_SelectionChange không xảy ra khi next bản ghi đâu. Em đọc phần help như sau :
    Occurs whenever the user makes a new selection in a PivotChart view or PivotTable view. . Vậy là trong Form View sự kiện này không xảy ra rùi.
    Vậy em cho vào sự kiện Affter Update của Form được không bác .
     
    Chỉnh sửa cuối: 8/7/10
  16. chip2006

    chip2006 New Member Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    Vậy ah`??? Hem để ý, vậy thì kiếm cái sự kiện nào mà nó kiểm soát được việc Change rerord rùi bốc đoạn code bỏ vào. :xinloinhe:

    Thử On Current xem sao
     
    Chỉnh sửa cuối: 8/7/10
  17. phatnq2002

    phatnq2002 Tích cực giảm cân... Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    Đọc kỹ cái On Dirty của Form đi rồi sẽ biết.
     
  18. muontennguoi

    muontennguoi Member Thành viên BQT Super Moderators

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    Vậy là phải rồi. Sao biết bé ấy sửa xong hay chưa? Phải gọi điện hoặc Yahoo!chat mà nhắc nhở thôi.

    Bạn có thể làm 1 cái ToggleControl để bé ấy click vào khi bắt đầu sửa và click vào để xác nhận đã sửa xong (sau khi update thì gán lại thuộc tính AllowEdits - vì Recordset sẽ tự động lock hay unlock)
     
  19. glasseggs

    glasseggs New Member Hội viên mới

    Ðề: Sử dụng hàm Dlookup tra Đơn giá từ bảng

    Thanks bạn nhưng mình muốn auto cho nó tiện, chứ dùng nút nhấn thì đôi khi người dùng họ quên mất thì sao. 1 phần mềm cho 10 bé dùng chẳng hạn,thể nào chả có 1 bé quên,mà nếu có 1 bé quên thì sẽ có 1 cái thông báo bằng tiếng Tây xuất hiện của Access, bé nào hiểu được.
    :xinloinhe:
    -----------------------------------------------------------------------------------------
    Lại phải thanks bác lần nữa :xinloinhe:
    Trước nay em không để ý đến cái này,vì nghĩ nó tên là Dirty ,nên nghĩ nó chỉ xảy ra khi Form có lỗi gì đó.
    Nay thấy dùng nó là tối ưu nhất cho vấn đề này của em.
    :imlanglun:
     
    Chỉnh sửa cuối: 9/7/10
  20. Warren Trần

    Warren Trần New Member Hội viên mới

    anh chị ơi, cho em hỏi, em làm dịch vụ giao hàng, mỗi shop có giá phí khác nhau của các quận khác nhau. Em cần làm sao, lúc chọn mã shop xong, chọn quận, thì nó tự động điền phí vào cột cước phí ạ. Em cám ơn anh chị ạ http://www.mediafire.com/file/mr9gnmm76mgg5zs/CSDL.accdb
     

Chia sẻ trang này

XenForo Add-ons by Brivium ™ © 2012-2013 Brivium LLC.