现在在完善一个档案系统,查询工作实现呢模糊查询,也可以按照多种条件查询,但今天用户提了个要求要实现二次查询,因为有很多的文件某些信息相同,就需要实现在刚才查询的基础上再查询一次,一步一步缩小范围,请帮下忙
QQ:403997188

解决方案 »

  1.   

    将第一次查询条件部分放到变量a中。
    比如用户第一次查:
    a="产品='鞋子' and 颜色='黑'"第二次查询 品牌='nnnn',条件a:
    a=a & " 品牌='nnnn'"这样,条件a不就齐了?这样应该可以吧我想。
      

  2.   

    set res=db.openrecoder("select * form where ....")
    res.Filter="Name='" & XXX & "'"
    set rs=res.operrecoder(2)
      

  3.   

    SoftProj(努力工作中) 和 coralsoft(我是小虫虫~) (请留下QQ,或者与我联系,到时我好请教,我现在现保留这个问题,把别的修改好了再具体看这个问题
      

  4.   

    把一次查询的SQL语句保留,再查询的时候,在原来的基础上再增加条件就行了啊
      

  5.   

    我的意思是点击了“查询”按钮之后又很多信息,有很多文件的信息是重合的,我是将很多条件查询组合在一起,实现多条件查询,但用户单位要求再增加二次查询的功能,也就是点击了刚才“查询”按钮后,可以再增加个“二次查询”的按钮,在刚才查询的基础上查询,就像维普论文数据库或者中国期刊网那样查询
    这是现有“查询”按钮想对应的代码
    Private Sub cmdFind_Click()
    Dim strSQL As String
    Dim strCon(12) As String
    Dim intCount As Integer
    Dim I As Integer
    intCount = 0'获得所有得查询条件
    If Text1.Text <> "" Then
        If chkMoHu.Value = 1 Then
            strCon(1) = "内部文件.文号 like '%" & Text1.Text & "%'"
        Else
            strCon(1) = "内部文件.文号='" & Text1.Text & "'"
        End If
    Else
        strCon(1) = ""
    End IfIf Text2.Text <> "" Then
        If chkMoHu.Value = 1 Then
            strCon(2) = "内部文件.档号 like '%" & Text2.Text & "%'"
        Else
            strCon(2) = "内部文件.档号='" & Text2.Text & "'"
        End If
        
    Else
        strCon(2) = ""
    End If
    If Text3.Text <> "" Then
        If chkMoHu.Value = 1 Then
            strCon(3) = "内部文件.原档号 like '%" & Text3.Text & "%'"
        Else
            strCon(3) = "内部文件.原档号='" & Text3.Text & "'"
        End If
        
    Else
        strCon(3) = ""
    End IfIf Text4.Text <> "" Then
        If chkMoHu.Value = 1 Then
            strCon(4) = "内部文件.文件标题 like '%" & Text4.Text & "%'"
        Else
            strCon(4) = "内部文件.文件标题='" & Text4.Text & "'"
        End If
    Else
        strCon(4) = ""
    End If
    If Text5.Text <> "" Then
        If chkMoHu.Value = 1 Then
            strCon(5) = "内部文件.顺序号 like '%" & Text5.Text & "%'"
        Else
            strCon(5) = "内部文件.顺序号='" & Text5.Text & "'"
        End If
    Else
        strCon(5) = ""
    End IfIf Text6.Text <> "" Then
        If chkMoHu.Value = 1 Then
            strCon(6) = "内部文件.责任人 like '%" & Text6.Text & "%'"
        Else
            strCon(6) = "内部文件.责任人='" & Text6.Text & "'"
        End If
    Else
        strCon(6) = ""
    End IfIf Text7.Text <> "" Then
        If chkMoHu.Value = 1 Then
            strCon(7) = "内部文件.分类 like '%" & Text7.Text & "%'"
        Else
            strCon(7) = "内部文件.分类='" & Text7.Text & "'"
        End If
    Else
        strCon(7) = ""
    End If
    If Text8.Text <> "" Then
        If chkMoHu.Value = 1 Then
            strCon(8) = "内部文件.关键词 like '%" & Text8.Text & "%'"
        Else
            strCon(8) = "内部文件.关键词='" & Text8.Text & "'"
        End If
    Else
        strCon(8) = ""
    End IfIf Text9.Text <> "" Then
        If chkMoHu.Value = 1 Then
            strCon(9) = "内部文件.归档年度 like '%" & Text9.Text & "%'"
        Else
            strCon(9) = "内部文件.归档年度='" & Text9.Text & "'"
        End If
    Else
        strCon(9) = ""
    End IfIf chkRigDate.Value = 1 Then
        If chkMoHu.Value = 1 Then
            strCon(10) = "内部文件.成文日期 like #" & dtpRigDate.Value & "#"
        Else
            strCon(10) = "内部文件.成文日期=#" & dtpRigDate.Value & "#"
        End If
    Else
        strCon(10) = ""
    End If
        
    If Combo1.Text <> "" Then
        strCon(11) = "内部文件.保管期限='" & Combo1.Text & "'"
    Else
        strCon(11) = ""
    End IfIf Text10.Text <> "" Then
        If chkMoHu.Value = 1 Then
            strCon(12) = "内部文件.全文档案存放地址 like '%" & Text10.Text & "%'"
        Else
            strCon(12) = "内部文件.全文档案存放地址='" & Text10.Text & "'"
        End If
    Else
        strCon(12) = ""
    End If
    If strCon(1) = "" And strCon(2) = "" And strCon(3) = "" And strCon(4) = "" And strCon(5) = "" And strCon(6) = "" And strCon(7) = "" And strCon(8) = "" And strCon(9) = "" And strCon(10) = "" And strCon(11) = "" And strCon(12) = "" Then
        strSQL = "select * from 内部文件"
    Else
       strSQL = "select * from 内部文件 where "
        For I = 1 To 12
           If strCon(I) <> "" Then
              intCount = intCount + 1
                If intCount = 1 Then
                    strSQL = strSQL + strCon(I)
                Else
                    strSQL = strSQL + " and " + strCon(I)
                End If
           End If
       Next
    End If
    也就是可以实现多种条件查询,那你们帮我考虑下吗
      

  6.   

    Do you understand?please help me,I am a master,will graduate,but this project is irrelative to my major,my disseration,sometimes I feel burdened by this project,help me,thank you!
      

  7.   

    ado里面有filter等Filter 属性
          为 Recordset 中的数据指定筛选条件。设置和返回值设置或返回变体型值,该值包含以下某项内容: 条件字符串 — 由一个或多个用 AND 或 OR 操作符连接的子句组成的字符串。
    书签数组 — 指向 Recordset 对象中记录的唯一书签值数组。
    以下某个 FilterGroupEnum 值。常数 说明 
    AdFilterNone 删除当前筛选条件并恢复查看的所有记录。 
    AdFilterPendingRecords 允许只查看已更改且尚未发送到服务器的记录。只能应用于批更新模式。 
    AdFilterAffectedRecords 允许只查看上一次 Delete、Resync、UpdateBatch 或 CancelBatch 调用所影响的记录。 
    AdFilterFetchedRecords 允许查看当前缓冲区中的记录,即上一次从数据库中检索记录的调用结果。 
    AdFilterConflictingRecords 允许查看在上一次批更新中失败的记录。 
    说明使用 Filter 属性可选择性地屏蔽 Recordset 对象中的记录,已筛选的 Recordset 将成为当前游标。这将影响基于当前游标返回值的其他属性,如 AbsolutePosition、AbsolutePage、RecordCount 和 PageCount,因为将 Filter 属性设置为特定值可将当前记录移动到满足新值的第一个记录。条件字符串由 FieldName-Operator-Value 格式(如“LastName = 'Smith'”)的子句组成。可以创建用单独的 AND(如“LastName = 'Smith' AND FirstName = 'John'”)或 OR(如“LastName = 'Smith' OR LastName = 'Jones'”)子句连接而成的混合子句。对于条件字符串请遵循以下规则: FieldName 必须为 Recordset 中的有效字段名。如果字段名包含空格,必须用方括号将字段名括起来。
    Operator 必须使用的操作符为:<、>、<=、>=、<>、= 或 LIKE。
    Value 是用于与字段值(如 'Smith'、#8/24/95#、12.345 或 $50.00)进行比较的值。字符串使用单引号而日期使用井号 (#),对于数字,可以使用小数点、货币符号和科学记数法。如果 Operator 为 LIKE,Value 则可使用通配符。只允许使用星号 (*) 和百分号 (%) 通配符,而且必须为字符串的尾字符。Value 不可为 Null。
    AND 和 OR 在级别上没有先后之分。可使用括号将子句分组。但不能象以下示例那样先将由 OR 联接的子句分组,然后将该组用 and 联接到其他子句。
    (LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'与之相反,可以构造如下形式的筛选:
    (LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')在 LIKE 子句中,可在样式的开头和结尾使用通配符(如 LastName Like '*mit*'),或者只在结尾使用通配符(如,LastName Like 'Smit*') 。 
    通过仅允许查看(例如)上次调用 UpdateBatch 方法时受到影响的记录,筛选常量使得在批更新模式时所发生的单个记录冲突更易于解决。设置 Filter 属性本身可能会因与基本数据发生冲突(如某记录已被其他用户删除)而失败。在此情况下,提供者将返回对 Errors 集合的警告但不停止程序执行。只有在所有需要的记录上发生冲突时才产生运行时错误。使用 Status 属性可定位发生冲突的记录。将 Filter 属性设置为零长度字符串 ("") 与使用 adFilterNone 常量具有同样效果。一旦设置 Filter 属性,当前记录位置将移动到 Recordset 中已筛选记录子集中的第一个记录。类似地,清除 Filter 属性后,当前记录位置将移动到 Recordset 的第一个记录。有关可与 Filter 属性一起使用创建数组的书签值的解释,请参考 Book 属性。
      

  8.   

    Filter 和 RecordCount 属性范例
    该范例使用 Filter 属性打开一个新的 Recordset,它基于适用于已有 Recordset 的指定条件。它使用 RecordCount 属性显示两个 Recordsets 中的记录数。该过程运行时需要 FilterField 函数。Public Sub FilterX()   Dim rstPublishers As ADODB.Recordset
       Dim rstPublishersCountry As ADODB.Recordset
       Dim strCnn As String
       Dim intPublisherCount As Integer
       Dim strCountry As String
       Dim strMessage As String   ' 使用出版商表中的数据打开记录集。
       strCnn = "Provider=sqloledb;" & _
          "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
       Set rstPublishers = New ADODB.Recordset
       rstPublishers.CursorType = adOpenStatic
       rstPublishers.Open "publishers", strCnn, , , adCmdTable   ' 充填记录集。
       intPublisherCount = rstPublishers.RecordCount   ' 获得用户输入。
       strCountry = Trim(InputBox( _
          "Enter a country/region to filter on:"))   If strCountry <> "" Then
          ' 打开已筛选的记录集对象。
          Set rstPublishersCountry = _
             FilterField(rstPublishers, "Country", strCountry)      If rstPublishersCountry.RecordCount = 0 Then
             MsgBox "No publishers from that country/region."
          Else
             ' 打印原始记录集和已筛选记录集对象的记录数。
             strMessage = "Orders in original recordset: " & _
                vbCr & intPublisherCount & vbCr & _
                "Orders in filtered recordset (Country = '" & _
                strCountry & "'): " & vbCr & _
                rstPublishersCountry.RecordCount
             MsgBox strMessage
          End If
          rstPublishersCountry.Close   End IfEnd SubPublic Function FilterField(rstTemp As ADODB.Recordset, _
       strField As String, strFilter As String) As ADODB.Recordset   ' 在指定的记录集对象上设置筛选操作并打开一个新的记录集对象。
       rstTemp.Filter = strField & " = '" & strFilter & "'"
       Set FilterField = rstTempEnd Function注意   当已知要选择的数据时,使用 SQL 语句打开 Recordset 通常更为有效。该范例说明了如何创建唯一的 Recordset 并从特定的国家(地区)获得记录。Public Sub FilterX2()   Dim rstPublishers As ADODB.Recordset
       Dim strCnn As String   ' 使用出版商表中的数据打开记录集。
       strCnn = "Provider=sqloledb;" & _
          "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
       Set rstPublishers = New ADODB.Recordset
       rstPublishers.CursorType = adOpenStatic
       rstPublishers.Open "SELECT * FROM publishers " & _
          "WHERE Country = 'USA'", strCnn, , , adCmdText
          
       ' 打印记录集中的当前数据。
       rstPublishers.MoveFirst
       Do While Not rstPublishers.EOF
          Debug.Print rstPublishers!pub_name & ", " & _
             rstPublishers!country
          rstPublishers.MoveNext
       Loop   rstPublishers.CloseEnd Sub
      

  9.   

    Find 方法
          搜索 Recordset 中满足指定标准的记录。如果满足标准,则记录集位置设置在找到的记录上,否则位置将设置在记录集的末尾。语法Find (criteria, SkipRows, searchDirection, start)参数criteria   字符串,包含指定用于搜索的列名、比较操作符和值的语句。SkipRows    可选,长整型值,其默认值为零,它指定当前行或 start 书签的位移以开始搜索。searchDirection    可选的 SearchDirectionEnum 值,指定搜索应从当前行还是下一个有效行开始。其值可为 adSearchForward 或 adSearchBackward。搜索是在记录集的开始还是末尾结束由 searchDirection 值决定。start    可选,变体型书签,用作搜索的开始位置。说明criteria 中的“比较操作符”可以是“>”(大于)、“<”(小于)、“=”(等于)、“>=”(大于或等于)、“<=”(小于或等于)、“<>”(不等于)或“like”(模式匹配)。 criteria 中的值可以是字符串、浮点数或者日期。字符串值以单引号分界(如“state = 'WA'”)。日期值以“#”(数字记号)分界(如“start_date > #7/22/97#”)。如“比较操作符”为“like”,则字符串“值”可以包含“*”(某字符可出现一次或多次)或者“_”(某字符只出现一次)。(如“state like M_*”与 Maine 和 Massachusetts 匹配。)。