Tìm trong:Webe-CHÍP

Bộ gõ (kiểu Vni/Telex/Viqr)Tắt (Alt+T)Mở (Alt+M)

 
Trang chủ ĐÓ HỎI, ĐÂY TRẢ LỜI TT 343

Quản lý dữ liệu với ListView

Đó hỏi: Trong VB, em dùng ListView để hiển thị dữ liệu. Nhờ e-CHÍP chỉ giúp em làm sao khi bấm nút "thêm mới một bản ghi" thì hộp TextBox tự động tăng mã số lên cho em.

<bienthanhson@>

Đây trả lời: Để minh họa tôi trình bày một ví dụ sử dụng ListView, bạn có thể phát triển thêm, tùy nhu cầu.
Bạn tạo một database có tên QuanLy.MDB, trong đó có một table có tên tblNhanVien với cấu trúc gồm 2 field: MaSo (Text, 3); Ten (Text, 32).
Tạo mới một project trong VB6 với kiểu Standard EXE. Chọn Project > Components để thêm component Microsoft Windows Common Controls 6.0 vào project. Chọn Project > References để thêm reference Microsoft ActiveX Data Objects 2.8 Library (hoặc phiên bản mới nhất) vào project.
Trên form mặc định Form1, lần lượt vẽ một ListView có tên lstNhanVien; 2 textbox lần lượt có tên: txtMaSo (thuộc tính Enabled là False), txtTen. Thuộc tính Text của các textbox được xóa trắng. Vẽ thêm 2 nút lệnh có tên cmdKetThuc và cmdThem như hình 1. Đặt thuộc tính Name cho form là frmQuanLy.
Vì lstNhanVien cần liệt kê danh sách các nhân viên gồm 2 cột thông tin Ma so và Ten, nên bạn phải sửa đổi thuộc tính như sau: bấm phải chuột vào lstNhanVien, chọn Properties để mở hộp thoại Property Pages.
Trên tab Column Headers, bấm nút Insert Column để thêm một cột có thuộc tính Text là Ma so, thuộc tính Width là 1000; rồi thêm tiếp cột thứ hai có thuộc tính Text là Ten.
Trên tab General, chọn mục FullRowSelect và GridLines, chọn mục 3-lvwReport trong danh sách View.
Chọn Project > Add Module để thêm một Module, đặt thuộc tính Name cho module là mdlDungChung. Gõ đoạn mã 1 vào module mới và gõ đoạn mã 2 vào form frmQuanLy.
Trên form Quản lý nhân viên, bạn cứ việc gõ đầy đủ tên nhân viên vào mục Ten mà không cần gõ mã số nhân viên, chương trình tự động tính bằng cách: tìm ra mã số lớn nhất (có dạng 001, 002, 003,…) rồi tăng lên 1 đơn vị, rồi bấm vào nút <Them> để thêm nhân viên, lúc đó danh sách lstNhanVien bên trên sẽ hiển thị nhân viên mới tạo. Muốn sửa đổi thông tin nhân viên nào thì bấm kép vào dòng có thông tin nhân viên đó.
Nếu bạn muốn sử dụng database và table với tên khác thì phải sửa lại các tên này trong đoạn mã 2.

Đoạn mã 1

Option Explicit
Public MaSoSize As Byte
Public DBConn As ADODB.Connection
Public Function LoadDatabase(ByVal DatabaseName As String, _
              Optional ByVal UserID As String, _
              Optional ByVal Password As String) As ADODB.Connection
    Dim conData As ADODB.Connection
    Set conData = New ADODB.Connection
    conData.Provider = "Microsoft.Jet.OLEDB.4.0"
    conData.ConnectionString = "Data Source = " & DatabaseName
    conData.CursorLocation = adUseClient
    conData.Open , UserID, Password
    Set LoadDatabase = conData
End Function
Public Function SelectNewMaSo(Cn As ADODB.Connection, _
                                      ByVal TableName As String) As String
    Dim Request As String, RS As ADODB.Recordset
    Dim NewMaSo As Long
    Request = "SELECT MAX(MaSo) FROM " & TableName
    Set RS = Cn.Execute(Request)
    If RS Is Nothing Then
        NewMaSo = 1
    Else
        If RS.RecordCount = 0 Then
            NewMaSo = 1
       Else
            RS.MoveFirst
            If IsNull(RS.Fields(0).Value) Then
                NewMaSo = 1
            Else
                NewMaSo = Val(RS.Fields(0).Value) + 1
            End If
        End If
    End If
    SelectNewMaSo = Format(NewMaSo, String(MaSoSize, "0"))
End Function

Đoạn mã 2

Option Explicit
' Liệt kê tất cả nhân viên trong ListView
Private Sub ListNhanVien()
    Dim rsData As ADODB.Recordset
    Set rsData = DBConn.Execute("SELECT MaSo, Ten FROM tblNhanVien")
    lstNhanVien.ListItems.Clear
    If rsData.RecordCount > 0 Then
        rsData.MoveFirst
        Do Until rsData.EOF Or rsData.BOF
            With lstNhanVien.ListItems.Add(, , rsData("MaSo").Value & "")
                .SubItems(1) = rsData("Ten").Value & ""
            End With
            rsData.MoveNext
        Loop
    End If
End Sub
Private Sub cmdThem_Click()
    Dim Request As String, NewMaSo As String, rsData As Recordset
    If cmdThem.Caption = "Them" Then
        ' Tính mã số cho nhân viên mới
        NewMaSo = SelectNewMaSo(DBConn, "tblNhanVien")
        Me.txtMaSo.Text = NewMaSo
        ' Chuẩn bị thêm mới vào table
        Request = "INSERT INTO tblNhanVien VALUES('" & NewMaSo & "'," & _
            "'" & Replace(Me.txtTen.Text, "'", "''") & "')"
    Else
        ' Chuẩn bị cập nhật vào table
        Request = "UPDATE tblNhanVien SET Ten = '" & _
                                       Replace(Me.txtTen.Text, "'", "''") & "'"
        Request = Request & " WHERE MaSo = '" & Me.lstNhanVien.SelectedItem.Text & "'"
        ' Đổi caption thành Them
        cmdThem.Caption = "Them"
    End If
    ' Xử lý query
    DBConn.Execute Request
    ListNhanVien
    lstNhanVien.Enabled = True
End Sub
Private Sub cmdKetThuc_Click()
    Unload Me
End Sub
Private Sub Form_Load()
    Dim rsData As ADODB.Recordset
    ' Nạp database
    Set DBConn = LoadDatabase(App.Path & "\QuanLy.mdb")
    Set rsData = DBConn.Execute("SELECT MaSo FROM tblNhanVien")
    MaSoSize = rsData.Fields(0).DefinedSize  ‘ Kích thước cột mã số
    ' Đếm số nhân viên trong table
    Set rsData = DBConn.Execute("SELECT Count(*) FROM tblNhanVien")
    ' Nếu có nhân viên trong table thì liệt kê
    If rsData.Fields(0).Value > 0 Then
        ListNhanVien
    End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
    DBConn.Close
End Sub
Private Sub lstNhanVien_BeforeLabelEdit(Cancel As Integer)
    Cancel = 1
End Sub
Private Sub lstNhanVien_DblClick()
    If Not (lstNhanVien.SelectedItem Is Nothing) Then
        Me.txtTen.Text = lstNhanVien.SelectedItem.SubItems(1)
        Me.txtMaSo.Text = lstNhanVien.SelectedItem    ' Cột mã số
        lstNhanVien.Enabled = False
        cmdThem.Caption = "Cap nhat"
    End If
End Sub

Chạy Norton Antivirus trong DOS

Đó hỏi: Em muốn khởi động chương trình diệt virus symantec antivirut để diệt virus trong DOS thì phải làm như thế nào? Xin hướng dẫn chi tiết cho em.
<hoangmyhi@>
Đây trả lời: Cách đơn giản và nhanh nhất là bạn tìm mua đĩa CD boot e-CHÍP ở các cửa hàng dịch vụ Tin học. Khởi động bằng đĩa này rồi làm theo các bước sau: chọn “Khoi dong DOS BootCD” > chọn “Quet Virus” > chọn “Norton Antivirus” > chọn kiểu quét là quét toàn bộ file hay chỉ quét file chương trình > chọn cách diệt là nhắc nhở khi sửa hay xóa file hay tự động gỡ bỏ virus, xóa file > chọn ổ đĩa để quét > sau khi quét ổ đĩa đã chọn xong, bạn có thể cho quét ổ đĩa khác.
Chú ý: Phiên bản NAV chạy trong môi trường DOS chỉ hỗ trợ ổ đĩa có định dạng FAT.

Bạn có thể chép thư mục Dostool/NAV trên đĩa CD xuống ổ cứng, cập nhật các file nhận dạng virus mới nhất cho NAV bằng cách tải file exe cập nhật tại địa chỉ http://securityresponse.symantec.com/avcenter/download/pages/US-N95.html > giải nén file exe vào 1 thư mục tạm có sẵn trên máy bằng dòng lịnh “[tên file exe] /dump c:\[tên thư mục có sẵn]” (td: 20070623-007-i32.exe /dump d:\3) > chép file virscant.dat và 9 file từ virscan1.dat đến virscan9.dat từ thư mục tạm vào thư mục NAV để thay thế các file cũ). Sau đó, bạn chạy trực tiếp NAV trên ổ cứng bằng cách kích hoạt file NAVDX.EXE (gõ lịnh navdx.exe /? để tham khảo thông số của lịnh).
Đây trả lời: Để gỡ bỏ các thành phần không cần sử dụng của bộ Nero 7, bạn vào Control Panel > Add or Remove Programs > bấm nút Change or Remove Programs ở bên trái và tìm đến chương trình Nero 7 trong khung liệt kê để bấm nút Change > chọn Modify (hay mở Start > All Programs > Nero 7 > Nero ProductSetup > chọn Modify your Nero products).
Trong cửa sổ Custom Setup, bạn bấm phím phải chuột vào từng thành phần muốn gỡ bỏ, thí dụ: Nero StartSmart, Nero CoverDesigner... rồi chọn lịnh This feature will not be available trong menu ngữ cảnh (nếu muốn gỡ bỏ các thành phần con thì bạn bấm chuột vào dấu + và chọn tương tự) > bấm Next để tiến hành gỡ bỏ các thành phần đã chọn.
LÊ HOÀN

[Đầu trang]