• Thứ Tư, 22/06/2005 14:23 (GMT+7)

    Câu hỏi :
    Xin hướng dẫn lập chương trình quản lý kho bằng Access. Trong phần xuất hàng có 1 textbox nhập mã hàng, tôi muốn so sánh textbox với hàng tồn kho, nếu có mã số đó thì chuyển sang mục khác, nếu không thì phải nhập lại và thông báo không có hàng. Tương tự, khi nhập số lượng xuất phải so sánh với số lượng tồn kho.

    Trả lời :
     Có 2 vấn đề chính mà bạn cần để ý giải quyết:

     1. Nhận biết thời điểm kiểm tra dữ liệu nhập. Nếu dùng điều khiển TextBox, bạn có thể khai báo hàm xử lý sự kiện KeyDown kết hợp với TextBox nhập liệu, trong hàm này bạn kiểm tra xem phím ấn có phải là phím Enter không (keycode=13), nếu phải thì sẽ kiểm tra tính đúng đắn của dữ liệu nhập.

     2. Truy xuất database. Có nhiều cấp độ truy xuất database khác nhau mà bạn có thể dùng:

     - Truy xuất trực tiếp vào cấu trúc vật lý file database. Đây là cách độc lập nhất, nhưng chẳng may đây là cách khó khăn và phụ thuộc vào công nghệ quản lý database, do đó tránh dùng nó.

     - Truy xuất database bằng các lệnh của ngôn ngữ đặc dụng của hệ quản trị CSDL, thí dụ bạn có thể dùng FoxPro để viết đoạn code truy xuất database. Tuy cách này không đòi hỏi phải nắm vững cấu trúc vật lý file database, nhưng nó vẫn còn phụ thuộc vào hệ quản trị CSDL.

     - Truy xuất thông qua giao tiếp ODBC (Open Database Connectivity). ODBC là giao tiếp truy xuất database chuẩn và độc lập với công nghệ quản lý database, nhờ đó code của ứng dụng không cần phải cập nhật lại mỗi khi database bị thay đổi công nghệ.

     - Truy xuất bằng DAO hay ADO, đây là giao tiếp truy xuất database theo mô hình hướng đối tượng và dựa trên ODBC để code của ứng dụng độc lập với công nghệ quản lý database. Nếu bạn viết ứng dụng trên Windows, bạn nên dùng ADO vì đây là giao tiếp truy xuất database cao cấp, an toàn, thân thiện nhất.

     Thí dụ, để giải quyết vấn đề của bạn, bạn có thể tạo 1 Form Access chứa 2 TextBox: Textbox nhập mã mặt hàng tên là txtMSMH và TextBox nhập số lượng xuất có tên là txtSLX. Hãy khai báo hàm xử lý sự kiện KeyDown trên từng TextBox (chọn textbox để hiển thị cửa sổ
    Properties của nó, chọn tab “Event” trên cửa sổ thuộc tính, duyệt tìm mục OnKeyDown rồi khai báo hàm xử lý sự kiện dạng “Code Builder”) rồi viết code như sau (đoạn code dưới đây chỉ để demo ý tưởng giải quyết vấn đề):

     khai báo biến connection tương ứng với database

     Private cn As ADODB.Connection

     khai báo biến recordset chứa kết quả tìm kiếm

     Private rs As ADODB.Recordset
     
     Hàm khởi động form làm việc

     Private Sub Form_Load()

     dùng ADO connection kết hợp với database hiện hành

     Set cn = CurrentProject.AccessConnection

     tạo đối tượng ADO Recordset để dùng

     Set rs = New ADODB.Recordset

     End Sub
     
     hàm xử lý sự kiện ấn phím trên textbox nhập MSMH

     Private Sub txtMSMH_KeyDown(KeyCode As Integer, Shift As Integer)

     kiểm tra có phải ấn phím Enter

     If KeyCode <> 13 Then Exit Sub

     nếu phải bắt đầu xử lý

     With rs

     nếu đang mở Recordset thì đóng lại

     If .State = True Then .Close

     Set .ActiveConnection = cn

     khai báo câu truy vấn tìm mặt hàng có mã nhập

     .Source = “SELECT * FROM DSHTonKho where MSMH = “ & txtMSMH.Text

     .LockType = adLockOptimistic

     .CursorType = adOpenKeyset

     .Open

     End With

     kiểm tra có không

     If rs.EOF = True Then

     nếu không có thì xóa giá trị cũ và yêu cầu nhập lại

     txtMSMH.Text = “”

     MsgBox “Không có hàng có MSMH này. Hãy Nhập lại”
     thiết lập cursor nhập liệu trên TextBox nhập MSMH
     txtMSMH.SetFocus

     Else

     thiết lập cursor nhập liệu trên TextBox nhập số lượng xuất

     txtSLX.SetFocus

     End If

     End Sub

     hàm xử lý sự kiện ấn phím trên textbox nhập số lượng xuất

     Private Sub txtSLX_KeyDown(KeyCode As Integer, Shift As Integer)

     kiểm tra có phải ấn phím Enter

     If KeyCode <> 13 Then Exit Sub

     nếu phải bắt đầu kiểm tra

     giả sử field thứ i trong record chứa số lượng tồn

     If CInt(rs.Fields(i)) < CInt(txtSLX.Text) Then

     MsgBox “Không đủ số lượng xuất cho mặt hàng này. Hãy nhập lại.”

     xóa giá trị cũ và yêu cầu nhập lại

     txtSLX.Text = “”

     thiết lập cursor nhập liệu trên TextBox nhập số lượng xuất

     txtSLX.SetFocus

     End If

     End Sub
    Chuyên mục: Cơ sở dữ liệu