frmgeneralquery.frm

来自「通用书店管理系统」· FRM 代码 · 共 560 行 · 第 1/2 页

FRM
560
字号
    'FlexGrid控件初始化
    With fg
        .Editable = flexEDKbdMouse
        
        .FixedAlignment(-1) = flexAlignCenterCenter
        .ColAlignment(0) = flexAlignLeftCenter
        .ColAlignment(1) = flexAlignLeftCenter
        .ColAlignment(2) = flexAlignRightCenter
        .ColAlignment(3) = flexAlignRightCenter
        .ColAlignment(4) = flexAlignRightCenter
        
        .ColComboList(2) = "(无效)|等于|类似|大于|小于|不等于|闭区间|开区间"
    
        '初始化变量
        If TypeName(arrDisplayFields) <> "Empty" Then
            .Rows = UBound(arrDisplayFields) + 2
            Dim i%
            For i = 1 To .Rows - 1
                .Cell(flexcpText, i, 0) = "C" & i
                .Cell(flexcpText, i, 1) = Trim(arrDisplayFields(i - 1))
                .Cell(flexcpText, i, 2) = "(无效)"
            Next i
        End If
        
    End With
    
End Sub

Private Sub CancelButton_Click()
    blnCallAdvanced = False
    blnOK = False
    Unload Me
End Sub

Private Sub chkCustom_Click()
    If Me.chkCustom.Value = vbChecked Then
        Me.txtCondition.Enabled = True
        Me.txtCondition.BackColor = gclrEnable
    Else
        Me.txtCondition.Enabled = False
        Me.txtCondition.BackColor = gclrUnEnable
    End If
End Sub

Private Sub cmdAdvanced_Click()
    '调用高级查询
    blnCallAdvanced = True
    blnOK = False
    Unload Me
    
End Sub

Private Sub cmdApplication_Click()
    Call setCompleteCondition
    Call CheckValidate
End Sub

Private Sub fg_AfterEdit(ByVal row As Long, ByVal Col As Long)
    Call setCompleteCondition
End Sub

Private Sub Form_Load()
    '初始化变量
'    arrDisplayFields = Empty
'    arrInnerFields = Empty
'    GeneralCondition = Empty
'    blnCallAdvanced = False
'    blnOK = False
    
    Call iniControl         '初始化控件
    
End Sub

Private Sub OKButton_Click()
    Call setCompleteCondition
    If CheckValidate Then
        blnCallAdvanced = False
        blnOK = True
        Unload Me
    End If
End Sub

Private Sub optAndOr_Click(Index As Integer)
    Select Case Index
    Case 0  '与关系
        Me.txtAndOr.Enabled = False
        Me.txtAndOr.BackColor = gclrUnEnable
    Case 1  '或关系
        Me.txtAndOr.Enabled = False
        Me.txtAndOr.BackColor = gclrUnEnable
    Case 2  '关系定制
        Me.txtAndOr.Enabled = True
        Me.txtAndOr.BackColor = gclrEnable
        Me.txtAndOr.SetFocus
        
    End Select
    
    Call setCompleteCondition
End Sub

Private Sub setCompleteCondition()
    Dim i%, str$
    Dim chrMark$
    Dim strFileds$
    Dim strBefValue$
    Dim strBckValue$
    
    '与关系
    If Me.optAndOr(0).Value Then
        For i = 1 To fg.Rows - 1
            
            '输入内容特殊处理
            strBefValue = Trim(fg.Cell(flexcpText, i, 3))
            strBefValue = Replace(strBefValue, "'", "''")
            
            strBckValue = Trim(fg.Cell(flexcpText, i, 4))
            strBckValue = Replace(strBckValue, "'", "''")
            
            Select Case arrInnerFieldsType(i - 1)
           
            Case ADODB.DataTypeEnum.adBSTR, ADODB.DataTypeEnum.adChar, ADODB.DataTypeEnum.adDate, ADODB.DataTypeEnum.adDBDate, ADODB.DataTypeEnum.adDBTime, _
                 ADODB.DataTypeEnum.adDBTimeStamp, ADODB.DataTypeEnum.adVarChar, ADODB.DataTypeEnum.adLongVarWChar, ADODB.DataTypeEnum.adVarChar, ADODB.DataTypeEnum.adVarWChar, ADODB.DataTypeEnum.adWChar
                
                chrMark = "'"
            Case Else
                chrMark = ""
            End Select
            
            Select Case Trim(fg.Cell(flexcpText, i, 2))
            Case "等于"
                str = str & IIf(Trim(str) = "", "", " AND ") & "(" & fg.Cell(flexcpText, i, 1) & " = " & chrMark & Trim(strBefValue) & chrMark & ")"
                strFileds = strFileds & IIf(Trim(strFileds) = "", "", " AND ") & "(" & arrInnerFields(i - 1) & " = " & chrMark & Trim(strBefValue) & chrMark & ")"
            Case "类似"
                str = str & IIf(Trim(str) = "", "", " AND ") & "(" & fg.Cell(flexcpText, i, 1) & " Like '%" & Trim(strBefValue) & "%'" & ")"
                strFileds = strFileds & IIf(Trim(strFileds) = "", "", " AND ") & "(" & arrInnerFields(i - 1) & " Like '%" & Trim(strBefValue) & "%'" & ")"
            Case "大于"
                str = str & IIf(Trim(str) = "", "", " AND ") & "(" & fg.Cell(flexcpText, i, 1) & " > " & chrMark & Trim(strBefValue) & chrMark & ")"
                strFileds = strFileds & IIf(Trim(strFileds) = "", "", " AND ") & "(" & arrInnerFields(i - 1) & " > " & chrMark & Trim(strBefValue) & chrMark & ")"
                
            Case "小于"
                str = str & IIf(Trim(str) = "", "", " AND ") & "(" & fg.Cell(flexcpText, i, 1) & " < " & chrMark & Trim(strBefValue) & chrMark & ")"
                strFileds = strFileds & IIf(Trim(strFileds) = "", "", " AND ") & "(" & arrInnerFields(i - 1) & " < " & chrMark & Trim(strBefValue) & chrMark & ")"
            Case "不等于"
                str = str & IIf(Trim(str) = "", "", " AND ") & "(" & fg.Cell(flexcpText, i, 1) & " <> " & chrMark & Trim(strBefValue) & chrMark & ")"
                strFileds = strFileds & IIf(Trim(strFileds) = "", "", " AND ") & "(" & arrInnerFields(i - 1) & " <> " & chrMark & Trim(strBefValue) & chrMark & ")"
            Case "闭区间"
                str = str & IIf(Trim(str) = "", "", " AND ") & "(" & fg.Cell(flexcpText, i, 1) & " >= " & chrMark & Trim(strBefValue) & chrMark & " And " & fg.Cell(flexcpText, i, 1) & " <= " & chrMark & Trim(strBckValue) & chrMark & ")"
                strFileds = strFileds & IIf(Trim(strFileds) = "", "", " AND ") & "(" & arrInnerFields(i - 1) & " >= " & chrMark & Trim(strBefValue) & chrMark & " And " & arrInnerFields(i - 1) & " <= " & chrMark & Trim(strBckValue) & chrMark & ")"
            Case "开区间"
                str = str & IIf(Trim(str) = "", "", " AND ") & "(" & fg.Cell(flexcpText, i, 1) & " > " & chrMark & Trim(strBefValue) & chrMark & " And " & fg.Cell(flexcpText, i, 1) & " < " & chrMark & Trim(strBckValue) & chrMark & ")"
                strFileds = strFileds & IIf(Trim(strFileds) = "", "", " AND ") & "(" & arrInnerFields(i - 1) & " > " & chrMark & Trim(strBefValue) & chrMark & " And " & arrInnerFields(i - 1) & " < " & chrMark & Trim(strBckValue) & chrMark & ")"
            Case "(无效)"
            End Select
        Next i
    End If
    
    '或关系
    If Me.optAndOr(1).Value Then
        For i = 1 To fg.Rows - 1
            
            '输入内容特殊处理
            strBefValue = Trim(fg.Cell(flexcpText, i, 3))
            strBefValue = Replace(strBefValue, "'", "''")
            
            strBckValue = Trim(fg.Cell(flexcpText, i, 4))
            strBckValue = Replace(strBckValue, "'", "''")
            
            Select Case arrInnerFieldsType(i - 1)
           
            
            Case ADODB.DataTypeEnum.adBSTR, ADODB.DataTypeEnum.adChar, ADODB.DataTypeEnum.adDate, ADODB.DataTypeEnum.adDBDate, ADODB.DataTypeEnum.adDBTime, _
                 ADODB.DataTypeEnum.adDBTimeStamp, ADODB.DataTypeEnum.adVarChar, ADODB.DataTypeEnum.adLongVarWChar, ADODB.DataTypeEnum.adVarChar, ADODB.DataTypeEnum.adVarWChar, ADODB.DataTypeEnum.adWChar
                
                chrMark = "'"
            Case Else
                chrMark = ""
            End Select
            
            Select Case Trim(fg.Cell(flexcpText, i, 2))
            Case "等于"
                str = str & IIf(Trim(str) = "", "", " OR ") & "(" & fg.Cell(flexcpText, i, 1) & " = " & chrMark & Trim(strBefValue) & chrMark & ")"
                strFileds = strFileds & IIf(Trim(strFileds) = "", "", " OR ") & "(" & arrInnerFields(i - 1) & " = " & chrMark & Trim(strBefValue) & chrMark & ")"
            Case "类似"
                str = str & IIf(Trim(str) = "", "", " OR ") & "(" & fg.Cell(flexcpText, i, 1) & " Like '%" & Trim(strBefValue) & "%'" & ")"
                strFileds = strFileds & IIf(Trim(strFileds) = "", "", " OR ") & "(" & arrInnerFields(i - 1) & " Like '%" & Trim(strBefValue) & "%'" & ")"
            Case "大于"
                str = str & IIf(Trim(str) = "", "", " OR ") & "(" & fg.Cell(flexcpText, i, 1) & " > " & chrMark & Trim(strBefValue) & chrMark & ")"
                strFileds = strFileds & IIf(Trim(strFileds) = "", "", " OR ") & "(" & arrInnerFields(i - 1) & " > " & chrMark & Trim(strBefValue) & chrMark & ")"
                
            Case "小于"
                str = str & IIf(Trim(str) = "", "", " OR ") & "(" & fg.Cell(flexcpText, i, 1) & " < " & chrMark & Trim(strBefValue) & chrMark & ")"
                strFileds = strFileds & IIf(Trim(strFileds) = "", "", " OR ") & "(" & arrInnerFields(i - 1) & " < " & chrMark & Trim(strBefValue) & chrMark & ")"
            Case "不等于"
                str = str & IIf(Trim(str) = "", "", " OR ") & "(" & fg.Cell(flexcpText, i, 1) & " <> " & chrMark & Trim(strBefValue) & chrMark & ")"
                strFileds = strFileds & IIf(Trim(strFileds) = "", "", " OR ") & "(" & arrInnerFields(i - 1) & " <> " & chrMark & Trim(strBefValue) & chrMark & ")"
            Case "闭区间"
                str = str & IIf(Trim(str) = "", "", " OR ") & "(" & fg.Cell(flexcpText, i, 1) & " >= " & chrMark & Trim(strBefValue) & chrMark & " And " & fg.Cell(flexcpText, i, 1) & " <= " & chrMark & Trim(strBckValue) & chrMark & ")"
                strFileds = strFileds & IIf(Trim(strFileds) = "", "", " OR ") & "(" & arrInnerFields(i - 1) & " >= " & chrMark & Trim(strBefValue) & chrMark & " And " & arrInnerFields(i - 1) & " <= " & chrMark & Trim(strBckValue) & chrMark & ")"
            Case "开区间"
                str = str & IIf(Trim(str) = "", "", " OR ") & "(" & fg.Cell(flexcpText, i, 1) & " > " & chrMark & Trim(strBefValue) & chrMark & " And " & fg.Cell(flexcpText, i, 1) & " < " & chrMark & Trim(strBckValue) & chrMark & ")"
                strFileds = strFileds & IIf(Trim(strFileds) = "", "", " OR ") & "(" & arrInnerFields(i - 1) & " > " & chrMark & Trim(strBefValue) & chrMark & " And " & arrInnerFields(i - 1) & " < " & chrMark & Trim(strBckValue) & chrMark & ")"
            Case "(无效)"
            End Select
        Next i
    End If
    
    '关系定制
    If Me.optAndOr(2).Value Then
        str = UCase(Trim(Me.txtAndOr.Text))
        strFileds = UCase(Trim(Me.txtAndOr.Text))
        For i = 1 To fg.Rows - 1
            
            '输入内容特殊处理
            strBefValue = Trim(fg.Cell(flexcpText, i, 3))
            strBefValue = Replace(strBefValue, "'", "''")
            
            strBckValue = Trim(fg.Cell(flexcpText, i, 4))
            strBckValue = Replace(strBckValue, "'", "''")
            
            Select Case arrInnerFieldsType(i - 1)
           
            Case ADODB.DataTypeEnum.adBSTR, ADODB.DataTypeEnum.adChar, ADODB.DataTypeEnum.adDate, ADODB.DataTypeEnum.adDBDate, ADODB.DataTypeEnum.adDBTime, _
                 ADODB.DataTypeEnum.adDBTimeStamp, ADODB.DataTypeEnum.adVarChar, ADODB.DataTypeEnum.adLongVarWChar, ADODB.DataTypeEnum.adVarChar, ADODB.DataTypeEnum.adVarWChar, ADODB.DataTypeEnum.adWChar
                
                chrMark = "'"
            Case Else
                chrMark = ""
            End Select
            
            Select Case Trim(fg.Cell(flexcpText, i, 2))
            Case "等于"
                str = Replace(str, Trim(fg.Cell(flexcpText, i, 0)), "(" & fg.Cell(flexcpText, i, 1) & " = " & chrMark & Trim(strBefValue) & chrMark & ")")
                strFileds = Replace(strFileds, Trim(fg.Cell(flexcpText, i, 0)), "(" & arrInnerFields(i - 1) & " = " & chrMark & Trim(strBefValue) & chrMark & ")")
            Case "类似"
                 str = Replace(str, Trim(fg.Cell(flexcpText, i, 0)), "(" & fg.Cell(flexcpText, i, 1) & " Like '%" & Trim(strBefValue & "%'") & ")")
                 strFileds = Replace(strFileds, Trim(fg.Cell(flexcpText, i, 0)), "(" & arrInnerFields(i - 1) & " Like '%" & Trim(strBefValue & "%'") & ")")
            Case "大于"
                str = Replace(str, Trim(fg.Cell(flexcpText, i, 0)), "(" & fg.Cell(flexcpText, i, 1) & " > " & chrMark & Trim(strBefValue) & chrMark & ")")
                strFileds = Replace(strFileds, Trim(fg.Cell(flexcpText, i, 0)), "(" & arrInnerFields(i - 1) & " > " & chrMark & Trim(strBefValue) & chrMark & ")")
            Case "小于"
                str = Replace(str, Trim(fg.Cell(flexcpText, i, 0)), "(" & fg.Cell(flexcpText, i, 1) & " < " & chrMark & Trim(strBefValue) & chrMark & ")")
                strFileds = Replace(strFileds, Trim(fg.Cell(flexcpText, i, 0)), "(" & arrInnerFields(i - 1) & " < " & chrMark & Trim(strBefValue) & chrMark & ")")
            Case "不等于"
                str = Replace(str, Trim(fg.Cell(flexcpText, i, 0)), "(" & fg.Cell(flexcpText, i, 1) & " <> " & chrMark & Trim(strBefValue) & chrMark & ")")
                strFileds = Replace(strFileds, Trim(fg.Cell(flexcpText, i, 0)), "(" & arrInnerFields(i - 1) & " <> " & chrMark & Trim(strBefValue) & chrMark & ")")
            Case "闭区间"
                str = Replace(str, Trim(fg.Cell(flexcpText, i, 0)), "(" & fg.Cell(flexcpText, i, 1) & " >= " & chrMark & Trim(strBefValue) & chrMark & " And " & fg.Cell(flexcpText, i, 1) & " <= " & chrMark & Trim(strBckValue) & chrMark & ")")
                strFileds = Replace(strFileds, Trim(fg.Cell(flexcpText, i, 0)), "(" & arrInnerFields(i - 1) & " >= " & chrMark & Trim(strBefValue) & chrMark & " And " & arrInnerFields(i - 1) & " <= " & chrMark & Trim(strBckValue) & chrMark & ")")
            Case "开区间"
                str = Replace(str, Trim(fg.Cell(flexcpText, i, 0)), "(" & fg.Cell(flexcpText, i, 1) & " > " & chrMark & Trim(strBefValue) & chrMark & " And " & fg.Cell(flexcpText, i, 1) & " < " & chrMark & Trim(strBckValue) & chrMark & ")")
                strFileds = Replace(strFileds, Trim(fg.Cell(flexcpText, i, 0)), "(" & arrInnerFields(i - 1) & " > " & chrMark & Trim(strBefValue) & chrMark & " And " & arrInnerFields(i - 1) & " < " & chrMark & Trim(strBckValue) & chrMark & ")")
            Case "(无效)"
            End Select
        Next i
    End If
    
    Me.txtCondition = str
    GeneralCondition = strFileds
End Sub

Private Sub txtAndOr_Validate(Cancel As Boolean)
    If Trim(Me.txtAndOr.Text) <> "" Then setCompleteCondition
End Sub
Private Function CheckValidate() As Boolean
'校验有效型
    On Error GoTo Err
    CheckValidate = False
    
    Dim strSQL$
    strSQL = " SELECT TOP 1 * From " & strFromObjects & IIf(Trim(GeneralCondition) = "", "", " Where " & GeneralCondition)
    Call gConnection.Execute(strSQL)
    
    CheckValidate = True
    Exit Function
Err:
    MsgBox "输入条件不合法,请校验后再应用或确认!", vbInformation
    CheckValidate = False
End Function

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?