我现在想用ado访问数据库中表的字段,看到的例子中有Fields ,Field, FieldsPtr, FieldPr,他们都分别表示什么?我到底应该用哪个?

解决方案 »

  1.   

    CDataSource dataSource;
    dataSource.Open();
    BSTR connectString; dataSource.GetInitializationString(&connectString,true);
    ConnectionStr = CString(connectString); //得到连接字符串

    this->m_TableList.ResetContent();
    ADOX_DB.CreateInstance(__uuidof(ADOX::Catalog));
    try{
    ADOX_DB->PutActiveConnection( _bstr_t(ConnectionStr) );
    int tableCount = ADOX_DB->Tables->Count;
    for(int i=0;i<tableCount;i++)
    {//得到表对象指针
    ADOX::_TablePtr  tablePtr = (ADOX::_TablePtr)ADOX_DB->Tables->GetItem((long)i);
    CString tableName = (BSTR)tablePtr->Name;//表名
    //ADOX::PropertiesPtr tableProperties = (ADOX::PropertiesPtr)tablePtr->GetProperties(); 
    ADOX::ColumnsPtr  colunmsPtr = tablePtr->GetColumns();
    //又表指针得到此表的字段指针,当然可以又表名来得到(查ado文档)
    int colunmCount = colunmsPtr->Count;
                               for(...){
                                    字段
                               }
    m_TableList.AddString(tableName); }

    } catch(_com_error &e) {
    AfxMessageBox(e.Description());
    }
      

  2.   

    我对 newkey007(无限天空) 深表同情 :(
      

  3.   

    首先查一下msdn,了解fields,field的区别(很明显FieldsPtr,FieldPtr是它们的指针类)
    下面是一段代码示例:
    Fields *fields=NULL;//fields是一组field
    Field *field=NULL;
    try
    {
    hr=m_recordset->AddNew();
    hr=m_recordset->get_Fields(&fields);
    for(int i=0;i<nColNum;i++)
    {
    varCount.lVal=i;
    hr=fields->get_Item(varCount,&field);
    field->get_Type(&data_type);
    if(!ConstructVar(saValues.GetAt(i),data_type,&varValue))
    return FALSE;
    hr=field->put_Value(varValue);
    }
    //提交
    hr=m_recordset->Update();//must
    fields->Release();
    field->Release();
    if(FAILED(hr))
    AfxMessageBox("Insert Error");
    }
    catch(_com_error &e)
    {
    AfxMessageBox(e.Description());
    m_recordset->Close();
    return FALSE;
    }
    m_recordset->Close();
      

  4.   

    请用汉语解释一下fields,field的区别?
      

  5.   

    A Recordset object has a Fields collection made up of Field objects. Each Field object corresponds to a column in the Recordset. You can populate the Fields collection before opening the Recordset by calling the Refresh method on the collection
    就是说Field与一个列相对应,而Fields是Field的集合
      

  6.   

    Field与一个列相对应,而Fields是Field的集合
    很明显FieldsPtr,FieldPtr是它们的指针类
      

  7.   

    Fields ,Field, FieldsPtr, FieldPr
    带有Ptr的是ADO作为COM调用定义的接口指针
    而Fields/Field则是ADO的数据类型
    Fields/Field的区别很简单:
    比如你的表里面有8列
    那么Fields就是总体指代这8列的集合,
    常用来遍历这个表以取得所有列的名字、类型等
    而Field就是其中的一列
    你可以用它来取得当前纪录的该列的数据
    FieldsPtr, FieldPr的区别同样