‘Cập nhật danh mục cho Bảng Hành Trình
5.3 Lập trình tìm kiếm đa khoá
Đoạn code cho phép tìm kiếm đa khoá. Kết hợp nhiều điều kiện với nhau để đưa ra được kết quả tốt nhất. Đáp ứng được yêu cầu tìm kiếm dù thông tin tìm kiếm bị hạn chế. (Ví dụ, tìm kiếm theo nhãn hiệu, hoặc kết hợp nhãn hiệu với tải trọng..)
Với giao diện như sau
Code
Dim bien_TT As Integer Private Sub Check1_Click() Dim strSQL_1 As String
strSQL_1 = "select distinct NhanHieu from Xe" myrs_tho.Open strSQL_1, Conn Do Until myrs_tho.EOF cboNH.AddItem myrs_tho!NhanHieu myrs_tho.MoveNext Loop cboNH.Enabled = True bien_TT = 1 If Check1.Value = 0 Then cboNH.Text = ""
If bien_TT = 1 Then
bien_TT = Lay_GT_CheckBox End If
End If
myrs_tho.Close
Set myrs_tho = Nothing End Sub
Private Sub Check2_Click() Dim strSQL_1 As String
strSQL_1 = "select distinct NuocSX from Xe" myrs_tho.Open strSQL_1, Conn Do Until myrs_tho.EOF cboNSX.AddItem myrs_tho!NuocSX myrs_tho.MoveNext Loop cboNSX.Enabled = True bien_TT = 2 If Check2.Value = 0 Then cboNSX.Text = "" cboNSX.Enabled = False If bien_TT = 2 Then bien_TT = Lay_GT_CheckBox End If End If myrs_tho.Close
Set myrs_tho = Nothing End Sub
Private Sub Check3_Click() Dim strSQL_1 As String cboTT.Enabled = True bien_TT = 3
strSQL_1 = "select distinct TaiTrong from Xe" myrs_tho.Open strSQL_1, Conn Do Until myrs_tho.EOF cboTT.AddItem myrs_tho!TaiTrong myrs_tho.MoveNext Loop cboTT.Enabled = True bien_TT = 3 If Check3.Value = 0 Then cboTT.Text = "" cboTT.Enabled = False End If If bien_TT = 3 Then
bien_TT = Lay_GT_CheckBox End If
myrs_tho.Close
Set myrs_tho = Nothing End Sub
Private Sub Check4_Click() cboTT.Enabled = True bien_TT = 4
strsql = " select SoDK from Xe" myrs_tho.Open strsql, Conn Do Until myrs_tho.EOF cboSDK.AddItem myrs_tho!SoDK myrs_tho.MoveNext Loop If Check4.Value = 0 Then cboSDK.Text = "" cboSDK.Enabled = False If bien_TT = 4 Then bien_TT = Lay_GT_CheckBox End If End If myrs_tho.Close
Set myrs_tho = Nothing End Sub
Private Sub Check5_Click() dbcboTT.Enabled = True bien_TT = 5 If Check5.Value = 0 Then dbcboTT.Text = "" dbcboTT.Enabled = False If bien_TT = 5 Then bien_TT = Lay_GT_CheckBox End If End If End Sub
Private Sub cmdthoat_Click() Unload Me
FrmMenu.Show End Sub
Private Sub cmdTim_Click() frmMaXe.Visible = False Dim str_seek As String
If optMaXe.Value = True Then
str_seek = "select MaXe as 'Mã xe', NhanHieu as 'Nhãn hiệu', " & _
"NuocSX as 'Nước sản xuất' ,SoDK as 'Số đăng ký' ,TaiTrong as 'Tải trọng'," & _ "MaTTXe as 'Mã tình trạng xe' from Xe where MaXe='" & dbcboMaXe.Text & "'" ElseIf optTTXe.Value = True Then
str_seek = "select MaXe as 'Mã xe', NhanHieu as 'Nhãn hiệu', " & _
"NuocSX as 'Nước sản xuất' ,SoDK as 'Số đăng ký' ,TaiTrong as 'Tải trọng'," & _ "MaTTXe as 'Mã tình trạng xe' from Xe "
If bien_TT = 1 Then
str_seek = str_seek & " where NhanHieu='" & cboNH.Text & "'" ElseIf bien_TT = 2 Then
str_seek = str_seek & " where NuocSX='" & cboNSX.Text & "'" ElseIf bien_TT = 3 Then
str_seek = str_seek & " where TaiTrong=" & Val(cboTT.Text) ElseIf bien_TT = 4 Then
str_seek = str_seek & " where SoDK='" & cboSDK.Text & "'" ElseIf bien_TT = 5 Then
str_seek = str_seek & " where MaTTXe='" & dbcboTT.BoundText & "'" Else
MsgBox "Bạn chưa chọn tiêu thức tìm kiếm" Exit Sub
End If
If Check1.Value = 1 Then If cboNH.Text <> "" Then If bien_TT <> 1 Then
str_seek = str_seek & " " & " and NhanHieu='" & cboNH.Text & "'" End If
Else
MsgBox " Bạn chưa nhập nhãn hiệu xe để tìm" dbcboHD.SetFocus
Exit Sub End If End If
'Lệnh If thứ 2: kiểm tra giá trị tên If Check2.Value = 1 Then
If bien_TT <> 2 Then
str_seek = str_seek & " and NuocSX='" & cboNSX.Text & "'" End If
Else
MsgBox " Bạn chưa nhập tên nước sản xuất để tìm" dbcboTen.SetFocus
Exit Sub End If End If
'Lệnh If thứ 3: kiểm tra giá trị năm sinh If Check3.Value = 1 Then
If cboTT.Text <> "" Then If bien_TT <> 3 Then
'Lệnh if 1_1: kiểm tra flag để xác định SQL là Where hay And str_seek = str_seek & " and TaiTrong=" & Val(cboTT.Text) End If
Else
MsgBox " Bạn chưa nhập số đăng ký để tìm" dbcboNS.SetFocus
Exit Sub End If End If
'Lệnh If thứ 4: kiểm tra giá trị loại hình nhân viên If Check4.Value = 1 Then
If cboSDK.Text <> "" Then If bien_TT <> 4 Then
'Lệnh if 1_1: kiểm tra flag để xác định SQL là Where hay And str_seek = str_seek & " and SoDK='" & dbcboSDK.BoundText & "'" End If
Else
MsgBox " Bạn chưa nhập tải trọng để tìm" dbcboLH.SetFocus
Exit Sub End If End If
'Lệnh If thứ 5: kiểm tra giá trị trạng thái lái xe If Check5.Value = 1 Then
If dbcboTT.Text <> "" Then If bien_TT <> 5 Then
'Lệnh if 1_1: kiểm tra flag để xác định SQL là Where hay And
Else
MsgBox " Bạn chưa nhập giá trị trạng thái xe để tìm" dbcboTT.SetFocus
Exit Sub End If End If Else
MsgBox " Bạn chưa chọn tiêu thức tìm kiếm" Exit Sub
End If
'bat dau lenh tim
'MsgBox " sql la: " & str_seek Dim strSQL_moi As String
strSQL_moi = " Provider=Microsoft.Jet.OLEDB.4.0;" & _
" Data Source= " & App.Path & "\Database\QLXeTai.mdb;" & _ " Persist Security Info=False"
Adodc1.ConnectionString = strSQL_moi Adodc1.CommandType = adCmdUnknown Adodc1.RecordSource = str_seek Adodc1.Refresh If Adodc1.Recordset.RecordCount > 0 Then 'frmKQ.Visible = True DataGrid1.Visible = True frmTTXe.Visible = False frmMaXe.Visible = False
'frmKQ.Caption = "Tìm thấy " & Adodc1.Recordset.RecordCount & " bản ghi" DataGrid1.Caption = " Tìm thấy " & Adodc1.Recordset.RecordCount & " bản ghi" Else
frmTTXe.Visible = False
lblKQ.Caption = "Không tìm thấy bản ghi thoả mãn" lblKQ.Visible = True
End If
optMaXe.Value = False optTTXe.Value = False End Sub
Private Sub cmdTimTiep_Click() frmTTXe.Visible = False
frmMaXe.Visible = False
lblKQ.Caption = " Chọn tiêu thức và giá trị tìm kiếm" lblKQ.Visible = True
DataGrid1.Visible = False End Sub
frmMaXe.Visible = True frmTTXe.Visible = False lblKQ.Visible = False End Sub
Private Sub optTTLX_Click() frmTTXe.Visible = True frmMaXe.Visible = False frmTTXe.Enabled = True lblKQ.Visible = False End Sub
Private Function Lay_GT_CheckBox() As Byte Dim KQ As Byte If Check1.Value = 1 Then KQ = 1 End If If Check2.Value = 1 Then KQ = 2 End If If Check3.Value = 1 Then KQ = 3 End If If Check4.Value = 4 Then KQ = 4 End If If Check5.Value = 1 Then KQ = 5 End If Lay_GT_CheckBox = KQ End Function
Private Sub Form_Load() lblKQ.Visible = True
Data1.DatabaseName = App.Path & "\Database\QLXeTai.mdb" Data2.DatabaseName = App.Path & "\Database\QLXeTai.mdb" End Sub
Private Sub optMaXe_Click() frmMaXe.Visible = True frmTTXe.Visible = False lblKQ.Visible = False End Sub
Private Sub optTTXe_Click() frmTTXe.Visible = True frmMaXe.Visible = False lblKQ.Visible = False
End Sub