我使用rs.fields(*).name与rs.fields(*).type取表的字段名和类型,可如果是空表的话,就会提示bof与eof中只要一个要为真,怎么才能解决呢?

解决方案 »

  1.   

    if not rs.bof then
       msgbox rs,fields(0).name
    end if
      

  2.   

    if rs.recordcount>0 then
        ...
    else
        msgbox "没有记录!",48,"提示"
    end if
    rs.close
      

  3.   

    哦,有点误解楼主的意思了
    如果只想要获取字段名称和类型,应该和bof/eof没有关系吧?最好看看你的代码...
    只想要获取表的字段名称和类型可以这样:
    select * from tb where 1=0
    然后:
    for i =0 to fields.count-1
        msgbox rs.fields(i).name
    next
      

  4.   

    由于是通过rs.field(*)获得字段名和字段数据类型,肯定会有获得记录的操作,如果表是空,一定会有BOF与EOF的提示,就没法对rs.field(*)操作。
    用ADOX的话,能取字段名,但不知道字段数据类型怎么获得,还请指教!
      

  5.   


    我认为这个理解有问题
    说白了,bof,eof是测试fields(n).value,也就是返回的记录集是否有数据
    但无论bof,eof的值如何,fields(n)的name,type等等是一定返回的
    上面那个select * from tb where 1=0 就是返回一个空记录集,这个语句在用ADDNEW添加数据时是常用的语句,以提高表中巨量数据下的效率....
    做了个简单测试:
        Dim rs As ADODB.Recordset
        Dim sql As String
        Dim i As Long
        
        sql = "select * from tb where 1=0 "
        Set rs = ExecuteSQL(sql)    '这个是一个查询函数
        
        Debug.Print rs.BOF
        For i = 0 To rs.Fields.Count - 1
            Debug.Print rs.Fields(i).Name
            Debug.Print rs.Fields(i).Type
        Next结果:
    True编号
     3 AA
     202 BB
     3 CC
     7