• Thứ Hai, 17/08/2009 10:20 (GMT+7)

    Hướng dẫn viết form nhập liệu

    Câu hỏi :
    Tôi có 1 Form bán hàng viết bằng VB 6.0 (dùng SQL Server 2000) chứa các TextBox nhập liệu như HoTenKH, DiaChi, SoPhieu, Ngay thang nam... Trong đó TextBox SoPhieu là 1 số nguyên và tôi muốn quản lý giá trị của nó như sau:
     - giá trị bắt đầu là 1, tự động tăng lên 1 sau mỗi lần có phát sinh 1 phiếu bán hàng,
     - vào ngày đầu mỗi tháng, giá trị SoPhieu được reset về lại 1.
     Xin hướng dẫn.
     

    Trả lời :
    Để quản lý tự động nội dung field SoPhieu như yêu cầu của bạn, có thể tiến hành một số công việc sau:

     1. Tạo 1 bảng dữ liệu nhỏ (giả sử có tên là tblSophieu) trong database tương ứng, bảng này có 1 record duy nhất, record này có 2 field: 1 field chứa giá trị số phiếu sắp dùng (có tên là ChisoPhieu) và 1 field miêu tả trạng thái cần reset về 1 hay không (có tên là resetstat). Giá trị ban đầu của record này là (1, 0). Bạn có thể chạy tiện ích quản lý database SQL Server, mở database chứa dữ liệu của bạn rồi tạo bảng tblSophieu theo đặc tả như trên.

     2. Mỗi lần Form nhập phiếu bán hàng chạy, đoạn code khởi động (thí dụ nằm trong thủ tục Form_Load) sẽ kiểm tra ngày hiện hành, nếu =1 và field trạng thái cần reset = 1 thì bạn ghi lại record với nội dung là (1, 0) để thiết lập lại giá trị ban đầu cho phiếu bán hàng. Còn nếu ngày hiện hành khác 1 thì bạn ghi lại record với nội dung là (số phiếu hiện hành, 1) để sau này khi đến ngày 1 của tháng kế tiếp, chương trình sẽ tự động thiết lập lại chỉ số phiếu = 1. Cụ thể đoạn code cho bước này có thể viết như sau:

     'Khai báo các biến cần dùng
     Dim Connection1 As ADODB.Connection
     Dim RecordSet1 As ADODB.Recordset
     Dim ChisoPhieu As Integer
     Private Sub Form_Load()
     Dim MyConString As String
     MyConString = "Provider=SQLNCLI;Server=HIEPCOMP\SQLEXPRESS; Database=mydatabase; Uid=sa;Pwd=luonghoa;Integrated Security=SSPI;"
     'Tạo connection tới database
     Set Connection1 = New ADODB.Connection
     Connection1.Open MyConString
     'Tạo recordset chứa record của bảng tblSoPhieu
     Set RecordSet1 = New ADODB.Recordset
     RecordSet1.Open "tblSophieu", Connection1, adOpenKeyset, adLockOptimistic, adCmdTable
     If Day(Now) = 1 Then
     'ngày đầu của tháng
     If RecordSet1.Fields("resetstat").Value = 1 Then
     RecordSet1.Fields("ChiSoPhieu").Value = 1
     RecordSet1.Fields("resetstat").Value = 0
     End If
     Else
     RecordSet1.Fields("resetstat").Value = 1
     End If
     'cập nhật nội dung lên record của bảng
     RecordSet1.Update
     'lưu chỉ số phiếu cần dùng vào biến và hiển thị vào TextBox Sophieu
     ChisoPhieu = RecordSet1.Fields("ChisoPhieu").Value
     txtSoPhieu.Text = ChisoPhieu
     'đóng recordset lại
     RecordSet1.Close
     End Sub
     3. Mỗi khi phát sinh 1 phiếu bán hàng mới, bạn đọc nội dung số phiếu từ bảng tblSophieu và hiển thị nó lên TextBox SoPhieu đồng thời tăng giá trị của nó lên 1 rồi lưu lên bảng tblSophieu để dùng cho lần phát sinh phiếu bán hàng kế tiếp.
     Cụ thể đoạn code cho bước này có thể viết như sau:
     'thủ tục xử lý button LuuPhieu của Form tạo phiếu
     Private Sub btnLuuPhieu_Click()
     'đoạn code lưu dữ liệu về phiếu bán hàng lên record database
     ...
     'rồi cập nhật tự động chỉ số phiếu
     ChisoPhieu = ChisoPhieu + 1
     txtSoPhieu.Text = ChisoPhieu
     'Tạo recordset chứa record của bảng tblSoPhieu
     RecordSet1.Open "tblSophieu", Connection1, adOpenKeyset, adLockOptimistic, adCmdTable
     'lưu chỉ số phiếu mới lên record
     RecordSet1.Fields("ChisoPhieu").Value = ChisoPhieu
     RecordSet1.Update
     'đóng recordset lại
     RecordSet1.Close
     End Sub

     Lưu ý đoạn code trên có sử dụng các đối tượng trong thư viện "Microsoft ADO" để truy xuất database dễ dàng. Để dùng được các đối tượng ADO trong 1 Project ứng dụng, bạn phải "add" chúng vào Project của mình bằng cách chọn menu Project.References để hiển thị cửa sổ References, duyệt tìm và chọn mục "Microsoft ActiveX Data Objects 2.x Library" rồi nhấn Ok.
     
    Chuyên mục: Lập trình