Quản lý mua bán hàng - Phần 4: Thiết kế form

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

  1. phatnq2002

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

    Bài này bao gồm:

    Link dữ liệu từ file dữ liệu đã tao đến file "chạy". Cái "vụ" này là để các bạn hiểu sơ sơ thế nào là tách dữliệu và cá cphần thực thi riêng ra làm 2 file khác nhau.

    Thiết kế hoàn tất một form cập nhật dan hmục hàng hóa, chỉ đến phần trang trí và bố trí control mà thôi. Chưa đụng vào code. Phần code sẽ được post ở bài tiếp theo.

    Good job !
     

    Các file đính kèm:


  2. phatnq2002

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

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form (2)

    Tôi post phần tiếp theo của thiết kế form frmDMHH.

    Đây là phần coding của nó, sử dụng VBA của Access. Do vậy nếu bạn nào đã biết qua đôi chút về lập trình trong Access, hẵn sẽ dễ theo dõi hơn.

    Với các bạn mới làm quen, tôi đề nghị các bạn nên chuẩn bị sẵn một tài liệu tham khảo thích hợp về Access VBA, chủ yếu là cú pháp lệnh dựng sẵn của VB.

    Trong bài đính kèm, tôi có sơ lược phần lý thuyết, các bạn có thể tham khảo.

    Vẫn tiếp tục nhận ý kiến của các bạn.
     

    Các file đính kèm:

  3. behattieu

    behattieu Member Hội viên mới

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

    Em thấy có 1 vấn đề nảy sinh khi thực hiện lệnh undo. Nếu chúng ta chỉ nhập 1 record thì lệnh Undo có hiệu lực còn như nếu ta nhập liên tiếp từ 2 record trở lên thì chỉ có record cuối cùng mới có hiệu lực còn tất cả các record đã nhập phía trên đều tự động lưu vào CSDL.
    Các bác xem có phương án nào để giải quyết không?
    Bác phat có thể nêu rõ hộ em lý do mà ta sử dụng Sub mà không sử dụng Function hoặc ngược lại được không. Cái này em (và chắc nhiều người) cũng chưa hiểu rõ về nó. Theo kinh nghiệm em thấy cái Function nó rộng hơn Sub thì phải vì ngoài việc trả về được các giá trị tính toán thì nó lại cũng có thể cho thực thi đối với các đối tượng. Đôi khi cứ sài nhưng chẳng biết công dụng của nó ra sao cả , hi hi

    Tại trang 3 phần 2 em đề nghị thay vì sử dụng việc việc gán Status cho từng control thì ta nên sài For each control... như thế thì về sau khi có sửa tên các đối tượng ta cũng không phải đi sửa lại từng cái nữa
     
    Chỉnh sửa cuối: 8/11/08
  4. liwenzhi

    liwenzhi Member Hội viên mới

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

    Vẫn hoạt động tốt mà bác. Bác xem lại nhé
     
  5. MEBO

    MEBO It's me Hội viên mới

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form (2)

    Phần này em lúng túng đây, may mà anh có kèm lý thuyết không là em theo đuối luôn. CÁm ơn anh nhiều
     
  6. Access2k

    Access2k Member Hội viên mới

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

    Tài liệu anh Phatnq đưa ra rất chi tiết, anh em cứ thế mà làm, nhưng bác chưa printscreen cái form frmDMHH lên em lại đang mày mò.

    Mấy cái nút Next, Last, Delete... bấm nút wizard control hỗ trợ, vẽ nút lệnh mới, là tạo được ngay.

    Như vậy: nhập mã hàng hoá tại txthh_ma, còn loại hàng hoá là combobox cboloaihh_ma- vừa dùng để chọn và để nhập mới.
     
  7. kat06

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

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

    Em đã làm theo hướng dẫn nhưng các nút đó vẫn không có tác dụng :k5197769:
    Dùng wizard control để hỗ trợ có khi tiện hơn :xinloinhe::chuyengivay:
    HỊC 3 hôm nữa em phải bảo vệ bài tập lớn quản lý công văn rồi:k5197769:
     
  8. phatnq2002

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

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

    Thiết kế theo trên thì Undo chỉ có tác dụng cho record đang nhập hoặc hiệu chỉnh, vì kiểu của form là Single Form mà. Single Form cho phép chúng ta mỗi lần làm việc với một record, hay nói chính xác là mỗi lần ta chỉ "thấy" một record trên form mà thôi.

    Về Sub và Function xin phép đề cập ở một bài khác, vì nói đến nó cũng phải chi tiết và đầy đủ.

    Còn việc gán thuộc tính Locked và Enabeld cho các nút lệnh và control khác, thì bạn có chắc là chỉ có từng ấy control với mỗi form không. Và có bảo đảm thứ tự của chúng trên form không? Dùng For Each ... trong tình huống này còn phức tạp hơn là gán trực tiếp.
     
  9. lehongduc

    lehongduc Member Hội viên mới

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form (2)

    Xin góp ý về việc thiết kế Form dùng để cập nhật danh mục hàng hoá.
    Khi khai báo thuộc tính Record Source cho Form này:
    + Nếu để nhập mới ta nên khai báo bằng câu lệnh SQL như sau:
    SELECT * FROM tblDMHH WHERE False;
    + Khi nào cần xem danh mục xác định ta sẽ dùng code VBA để nạp lại thuộc tính Record Source với điều kiện lọc dữ liệu tương ứng.

    Làm như vậy Form sẽ được mở nhanh hơn và ứng dụng tiêu tốn ít bộ nhớ hơn.

    Lẽ ra nội dung góp ý này nên để ở những phần sau, song vì tôi nhận thấy đây là vấn đề cần lưu tâm khi thiết kế Form và Report nên góp ý luôn, kẻo mai mốt lại quên mất. Xin mod bỏ lỗi cho nhé.
     
  10. phatnq2002

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

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

    Cảm ơn bạn lehongduc.
    To all mem:
    Tip của bạn lehongduc rất hữu ích vì khi khởi nạp form sẽ nạp trắng dữ liệu, do vậy thời gian khởi nạp sẽ nhanh.

    Tuy nhiên, cần lưu ý, do thiết kế chúng ta có 4 nút đầu trước sau cuối, nên nếu khởi nạp trắng thì 4 nút này vô tác dụng nếu lúc nạp vào người sử dụng muốn dùng chúng để di chuyển đến một record nào đó.
     
  11. lehongduc

    lehongduc Member Hội viên mới

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

    Trao đổi thêm:
    Với cách làm theo đề nghị của tôi, các nút lệnh duyệt từng mẫu tin tới lui chỉ có hiệu lực đối với các mẫu tin được nhập vào kể từ lúc mở Form.
    Trong trường hợp cần duyệt các mẫu tin đang có trong table DmHanghoa theo 1 điều kiện nào đó chúng ta cần viết 1 thủ tục để duyệt theo điều kiện xác định (hoặc duyệt toàn bộ nếu cần).

    Để tiện cho các Bạn tham khảo cụ thể, đồng thời tránh làm xáo trộn file ứng dụng chung chúng ta đang xây dựng, sau đây tôi xin thuyết minh chi tiết với 1 dữ liệu mẫu riêng:
    File dữ liệu mẫu lưu tại link sau:
    http://www.mediafire.com/download.php?zm21c0zwwml

    Giả định tôi có table đặt tên là: DmHanghoa đăng ký danh mục hàng hoá
    Trong đó có 2 field:
    + MSHH: đăng ký mã số hàng hoá
    + TenHanghoa: đăng ký tên hàng hoá

    Tôi thiết kế Form nhập Danh mục hàng hoá đặt tên là: frmCapnhatDmHanghoa
    Trong Form này:
    + có 3 TextBox: MSHH, TenHangHoa và 1 TextBox dùng để ghi tổng số mẫu tin hiện có trong table DmHanghoa
    + có các nút lệnh: cmdThemmoi, cmdToi, cmdLui, cmdXoa, cmdHienTatca, cmdLoc
    + Khai báo thuộc tính Record Source của Form như sau: SELECT * FROM DmHanghoa WHERE False

    Thủ tục gán cho sự kiện Click của từng nút lệnh trên như sau:

    Private Sub cmdloc_click()
    'Lọc lại dữ liệu theo điều kiện xác định
    Dim sDieukien
    'Lấy điều kiện được khai báo thông qua hàm Inputbox
    sDieukien = InputBox("Xin nhap vao 1 hoac mot so ky tu dau cua Ma so hang hoa can loc: ", "Loc Danh muc")
    If Not IsNull(sDieukien) Then
    'Gán lại RecordSource cho Form
    Me.RecordSource = "SELECT * FROM DmHanghoa WHERE((DmHanghoa.MSHH) Like '" & sDieukien & "*');"
    Me.Requery
    End If
    End Sub

    Private Sub cmdthemmoi_click()
    'Thêm mới
    On Error GoTo Err_Command5_Click
    'Gán lại RecordSource cho Form như lúc ban đầu
    Me.RecordSource = "SELECT * FROM DmHanghoa WHERE False;"
    Me.Requery 'Dòng này để nạp lại dữ liệu nguồn cho Form
    'Chuyển sang chế độ nhập mới
    DoCmd.GoToRecord , , acNewRec

    Exit_Command5_Click:
    Exit Sub

    Err_Command5_Click:
    MsgBox Err.Description
    Resume Exit_Command5_Click

    End Sub

    Private Sub cmdtoi_click()
    'Duyệt đến mẫu tin kế tiếp sau
    On Error GoTo Err_Command6_Click

    DoCmd.GoToRecord , , acNext

    Exit_Command6_Click:
    Exit Sub

    Err_Command6_Click:
    MsgBox Err.Description
    Resume Exit_Command6_Click

    End Sub

    Private Sub cmdlui_click()
    'Duyệt đến mẫu tin kế tiếp trước
    On Error GoTo Err_Command7_Click

    DoCmd.GoToRecord , , acPrevious

    Exit_Command7_Click:
    Exit Sub

    Err_Command7_Click:
    MsgBox Err.Description
    Resume Exit_Command7_Click

    End Sub

    Private Sub cmdhientatca_click()
    'Cho hiện toàn bộ các mẫu tin trong table DmHanghoa
    'Bằng cách gán lại RecordSource cho Form
    Me.RecordSource = "DmHanghoa"
    Me.Requery

    End Sub

    Private Sub cmdxoa_click()
    'Xoá mẫu tin đang thấy
    On Error GoTo Err_Command11_Click

    DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
    DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70

    Exit_Command11_Click:
    Exit Sub

    Err_Command11_Click:
    MsgBox Err.Description
    Resume Exit_Command11_Click

    End Sub
     
    Chỉnh sửa cuối: 10/11/08
  12. phatnq2002

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

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

    Tôi post tiếp phần tiếp theo: thiết kế form tìm kiếm của danh mục hàng hóa.

    Mục đích là khi người sử dụng nhấnnút Tìm trên form frmDMHH sẽ hiện form tìm. Tring form tìm sẽ cho chọn hoặc là theo mã số, theo tên và theo loại hàng.


    Sau đó cho hiện trong bảng phía dưới. Nhắp kép lên dòng nào thì nội dung dòng đó sẽ hiện lên form frmDMHH.

    Phần in ấn sẽ được post sau.

     

    Các file đính kèm:

  13. behattieu

    behattieu Member Hội viên mới

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

    Bác Phat ơi, mỗi lần bác viết xong bài ngoài file hướng dẫn PDF bác gửi cho bọn em cái sample luôn nhé. Vì đọc xong bài thì bọn em cũng hiểu rồi lấy ví dụ ra xem cho nó nhanh.
    Em thấy sử dụng cái Each.. mạnh chứ. Nhất là về sau mình dùng cái này để xử lý một nhóm đối tượng dựa theo kiểu (text, combo..) hoặc thay đổi caption hàng loạt cho các đối này. Chẳng lẽ bây giờ chương trình có cả tây, ta cùng sài mà lại bắt tây nó đọc bằng giao diện tiếng Việt.
    Lần đầu tiên thấy cái điều kiện where false mà bác Đức đưa ra, cái này hữu ích khi chưa muốn cho nó load dữ liệu.
     
  14. phatnq2002

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

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

    Bạn có biết rằng trong giai đoạn triển khai một phần mềm thì cái nào "nhức đầu" nhất không? Đó chính là nhập dữ liệu thử hoặc nhập dữ liệu chính thức từ nguồn dữ liệu sẵn có của đơn vị triển khai. :jfbq00191070412ahu0

    Do vậy, mong các bạn thông cảm, tự mình nhập vào cho nó sang. "Kẻ góp của, người góp công".

    Tôi không nói For Each không xài nhưng tùy tình huống mà xài. Chuyện tây ta không bàn ở đây vì khi ta xử lý control, hầu như chúng ta xử lý theo Name của chúng. Mà Name của chúng thì chỉ có developer biết, chứ user lấy gì biết !!!

    Cái kỹ thuật dùng WHERE False (hoặc WHERE True) là kỹ thuật thường xài cho dân lập trình VB hoặc .NET (kể cả C#) khi muốn khởi gán một data table. Bác lehongduc đem vào đây là "lộ nghề" anh em hết. :xinloinhe:
     
  15. behattieu

    behattieu Member Hội viên mới

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

    ặc ặc, mới có cái where false mà bác Phatnq đã sợ lộ nghề rồi. Trông bác thế mà ki quá
    :071::gun_guns:
    -----------------------------------------------------------------------------------------
    Thấy bác mượn đề xuất làm Server/Client em thấy nhất trí. Vì như thế sẽ toàn diện hơn.
    Thấy bác phat vẫn lăn tăn là newbie khó tiếp cận. Vậy đề nghị cả nhà cho ý kiến để còn triển khai vì Coding cho Client và Server/Client có đôi chút khác biệt.
    Làm phần mềm kế toán mà chỉ dùng cho một mình thì nghe có vẻ không ổn lắm
     
    Chỉnh sửa cuối: 11/11/08
  16. lehongduc

    lehongduc Member Hội viên mới

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

    Chào các Bạn,
    Tôi thấy cứ tiếp tục thực hiện theo hướng dẫn của "chủ xị" như chúng ta đang làm, đến khi nào đạt được mục tiêu đã đề ra ban đầu ta sẽ bước tiếp bước nữa: phát triển ứng dụng theo nhiều hướng khác nhau.

    Trong quá trình xây dựng ứng dụng chúng ta cũng cần tránh việc "sử dụng dao mổ trâu để đi mổ gà", vừa nhọc nhằn vừa không đạt được mục tiêu sẽ dễ nản lòng.
     
  17. vietdl_dlk

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

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

    Chào các bạn
    Mình là lính mới đang trong thời gian tìm hiểu Access tôi thấy Access rất hay trong các ứng dụng vừa và nhỏ, tình cờ vào đây thấy bác phatnq2002 lập ra chuyên mục này thật là một ý tưởng hay và phù hợp với những người đang tìm hiểu Access như tôi. Với lại mọi người ở đây có trình độ khác nhau nên tôi nghĩ chúng ta hay đi theo như mục tiêu ban đầu chúng ta đã đưa ra khi nào hoàn thiện rồi thì chúng ta phát triển tiếp cũng chưa muộn mà, như vạy mọi người dể theo dõi và hiểu vấn đề kỷ và sâu hơn.:mua:
     
    Chỉnh sửa cuối: 11/11/08
  18. dishack

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

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

    Xin hoan nghênh chủ topic. Bài viết dễ hiểu và rất thực tế. Mong chủ topic phát huy thêm cho anh em học hỏi.
     
  19. muontennguoi

    muontennguoi Member Thành viên BQT Super Moderators

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form




    Chỉ là đôi chút thôi chứ không có gì khác biệt nhiều đâu mà lo.

    Nếu như bạn phân biệt (trong đầu) rõ ràng mô hình cơ sở dữ liệu 3 lớp thì khi đó viết ứng dụng chạy trên 1 máy cũng rõ ràng hơn.
     
  20. kat06

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

    Ðề: Quản lý mua bán hàng - Phần 4: Thiết kế form

    Muốn phần subCT có thanh trượt ngang dọc để có thể chứa được nhiều record thì phải làm như thế nào ạ? :xinloinhe:
     

Chia sẻ trang này

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