有下面语句,欲实现动态设置查询的准备。
运行  Data1.Database.TableDefs(sTable).Fields(sField).Type 语句时,有时可以通过,有时会出现错误,错误描述是 <这个集合中找不到此项目。>。我跳时发现
好像是 Fields(sField) 造成的。
为什么会出现这种问题,怎么解决,请指教。Private Sub CmbSelectField_Click(Index As Integer)
    Dim sTable As String
    Dim sField As String
    
    If CmbSelectField(Index).Text <> "" Then
        sTable = CmbSelectTable(3).Text
        sField = CmbSelectField(Index).Text
        
        Select Case Data1.Database.TableDefs(sTable).Fields(sField).Type
            Case dbBoolean
                CmbSelectOperator(Index).AddItem ("是")
                CmbSelectOperator(Index).AddItem ("否")
                MbxInput(Index).Enabled = False
            
            Case dbDate
                CmbSelectOperator(Index).AddItem ("=")
                CmbSelectOperator(Index).AddItem (">")
                CmbSelectOperator(Index).AddItem ("<")
                CmbSelectOperator(Index).AddItem (">=")
                CmbSelectOperator(Index).AddItem ("<=")
                CmbSelectOperator(Index).AddItem ("<>")
                MbxInput(Index).Mask = "####-##-##"
                
            Case dbText, dbMemo, dbChar
                CmbSelectOperator(Index).AddItem ("包含")
                CmbSelectOperator(Index).AddItem ("不包含")
                CmbSelectOperator(Index).AddItem ("=")
                CmbSelectOperator(Index).AddItem (">")
                CmbSelectOperator(Index).AddItem ("<")
                CmbSelectOperator(Index).AddItem (">=")
                CmbSelectOperator(Index).AddItem ("<=")
                CmbSelectOperator(Index).AddItem ("<>")
            
            Case dbByte, dbNumeric, dbBigInt, dbInteger, dbLong
                CmbSelectOperator(Index).AddItem ("=")
                CmbSelectOperator(Index).AddItem (">")
                CmbSelectOperator(Index).AddItem ("<")
                CmbSelectOperator(Index).AddItem (">=")
                CmbSelectOperator(Index).AddItem ("<=")
                CmbSelectOperator(Index).AddItem ("<>")
                               
            Case dbSingle, dbCurrency, dbDouble, dbFloat
                CmbSelectOperator(Index).AddItem ("=")
                CmbSelectOperator(Index).AddItem (">")
                CmbSelectOperator(Index).AddItem ("<")
                CmbSelectOperator(Index).AddItem (">=")
                CmbSelectOperator(Index).AddItem ("<=")
                CmbSelectOperator(Index).AddItem ("<>")
            
            Case Else        
        End Select
    End If
End Sub

解决方案 »

  1.   

    sField会不会是遇到了一个计算字段了?
      

  2.   

    我调试过该语句,调试情况如下:
     
     监视变量:                                      变量值
    Data1.Database.TableDefs(sTable)                "数据库中的某个表名"
    Data1.Database.TableDefs(sTable).Fields(sField) <这个集合中找不到此项目。>我想,问题因该时出现在下一个变量上,这条语句有什么问题呢?怎么改完善?
    请指点,谢谢!
      

  3.   

    If CmbSelectField(Index).Text <> "" Then
            sTable = CmbSelectTable(3).Text
            sField = CmbSelectField(Index).Text        Set Data1.RecordSource = sTable
            
            Select Case Data1.RecordSet.Fields(sField).Type
            ......
      

  4.   

    of123:你好!我是过你的建议,但运行时运行到 Set Data1.RecordSource = sTable时出现错误:编译错误,属性的使用无效。我试图修正,但不得要领,请指教。