vc 如何获得SQL 数据库中某一个表的各个字段名啊?

时间:2021-01-18 15:29:44
CString strValue;
    for(long i=0; i < ColCount; i++)//得到记录集//中的字段名
    {
        //_variant_t lvar(i);
        // var.operator shor = i;
        //m_pRecordset->get
        // varValue[i] = fields->GetItem(lvar)->Value;
        strValue = (LPCSTR)_bstr_t(fields->GetItem((long)i)->Value);
        m_ListShow.AddString(strValue);
}

得到的是某一行的记录值,现在想获得该表的的各列 的 字段的值,该怎么办?
谢谢!

9 个解决方案

#1


给你一条SQL语句(获取 客户资料表 的所有列名)


Select name From syscolumns 
Where Id=(select Id From sysobjects Where name='客户资料表')

#2


用ADOX

#3


access的例子:

    (1)在 stdafx.h 加入如下代码引入 ADO 库定义文件, 

  #import "c:\program files\common files\system\ado\msado15.dll" \ no_namespace \ 
   rename ("EOF", "adoEOF")   

  (2)初始化COM库,在BOOL CGetFieldNameApp::InitInstance()中添加AfxOleInit();    

  (3)在类 CgetFieldNameDlg 中添加两个用于打开数据库连接和打开记录集的变量; 
      _ConnectionPtr m_pConnection; 
    _RecordsetPtr m_pRecordset;   

  (4) 在CgetFieldNameDlg的构造函数中添加数据库连接和记录集初始化代码;m_pConnection.CreateInstance(__uuidof(Connection)); 
  try 
  { 
   m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\FTI.mdb", 
     "", 
     "", 
     adModeUnknown ); 
  } 

  catch(_com_error e) 
  { 
   AfxMessageBox("数据库连接失败!"); 
  } 

  m_pRecordset.CreateInstance(__uuidof(Recordset)); 

  (5) 给Listbox控件添加控件变量m_FieldsList; 

  (6) 在按钮的单击事件中添加相应代码;_bstr_t mStrSQL; 

  CString strColName; 
  BSTR bstrColName; 
  long ColCount,i; 
  Field * field = NULL; 
  HRESULT hr; 
  Fields * fields = NULL; 
  LPCTSTR nameField;   

  //打开记录集,得到字段名,并将字段名信息添加到ListBox中   

  mStrSQL = "SELECT * FROM Images"; 
  m_pRecordset->Open(mStrSQL, 
       m_pConnection.GetInterfacePtr(), 
       adOpenDynamic, 
       adLockOptimistic, 
       adCmdText); 
  hr = m_pRecordset->get_Fields (&fields); //得到记录集的字段集和 
  if(SUCCEEDED(hr)) 
   fields->get_Count(&ColCount);  

  //得到记录集的字段集合中的字段的总个数    

  for(i=0;i  
    { 
   fields->Item[i]->get_Name(&bstrColName); //得到记录集//中的字段名 
   strColName=bstrColName; 
   nameField = strColName; 
   m_FieldsList.AddString(nameField); 
  }  

  if(SUCCEEDED(hr)) 
   fields->Release();//释放指针 

#4


UP

#5


recordset->fields->field->field_name

#6


fields->GetItem((long)i)->Name 就是字段名

#7


fields->GetItem((long)i)->Name

#8


_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset,pRS_Column;
m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordset.CreateInstance(__uuidof(Recordset));
_bstr_t strConnect = "Provider=SQLOLEDB; Server="服务器名称";Database="数据库名称";uid="用户名";pwd="密码";
m_pConnection->Open(strConnect,"","",adModeUnknown);
m_pRecordset->Open("表名",m_pConnection.GetInterfacePtr(), adOpenForwardOnly, adLockOptimistic, adCmdTable);

long lColumn = m_pRecordset->Fields->Count;
for(long i=0;i<lColumn;i++)
 {
   CString strName=(char*)_bstr_t(m_pRecordset->Fields->Item[i]->Name);
 }

strName得到的就是字段名称

#9


上面最长的2个帖子的方法我试验过了,
都是可行的.


我也正好遇到这个问题,
谢了 :)

#1


给你一条SQL语句(获取 客户资料表 的所有列名)


Select name From syscolumns 
Where Id=(select Id From sysobjects Where name='客户资料表')

#2


用ADOX

#3


access的例子:

    (1)在 stdafx.h 加入如下代码引入 ADO 库定义文件, 

  #import "c:\program files\common files\system\ado\msado15.dll" \ no_namespace \ 
   rename ("EOF", "adoEOF")   

  (2)初始化COM库,在BOOL CGetFieldNameApp::InitInstance()中添加AfxOleInit();    

  (3)在类 CgetFieldNameDlg 中添加两个用于打开数据库连接和打开记录集的变量; 
      _ConnectionPtr m_pConnection; 
    _RecordsetPtr m_pRecordset;   

  (4) 在CgetFieldNameDlg的构造函数中添加数据库连接和记录集初始化代码;m_pConnection.CreateInstance(__uuidof(Connection)); 
  try 
  { 
   m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\FTI.mdb", 
     "", 
     "", 
     adModeUnknown ); 
  } 

  catch(_com_error e) 
  { 
   AfxMessageBox("数据库连接失败!"); 
  } 

  m_pRecordset.CreateInstance(__uuidof(Recordset)); 

  (5) 给Listbox控件添加控件变量m_FieldsList; 

  (6) 在按钮的单击事件中添加相应代码;_bstr_t mStrSQL; 

  CString strColName; 
  BSTR bstrColName; 
  long ColCount,i; 
  Field * field = NULL; 
  HRESULT hr; 
  Fields * fields = NULL; 
  LPCTSTR nameField;   

  //打开记录集,得到字段名,并将字段名信息添加到ListBox中   

  mStrSQL = "SELECT * FROM Images"; 
  m_pRecordset->Open(mStrSQL, 
       m_pConnection.GetInterfacePtr(), 
       adOpenDynamic, 
       adLockOptimistic, 
       adCmdText); 
  hr = m_pRecordset->get_Fields (&fields); //得到记录集的字段集和 
  if(SUCCEEDED(hr)) 
   fields->get_Count(&ColCount);  

  //得到记录集的字段集合中的字段的总个数    

  for(i=0;i  
    { 
   fields->Item[i]->get_Name(&bstrColName); //得到记录集//中的字段名 
   strColName=bstrColName; 
   nameField = strColName; 
   m_FieldsList.AddString(nameField); 
  }  

  if(SUCCEEDED(hr)) 
   fields->Release();//释放指针 

#4


UP

#5


recordset->fields->field->field_name

#6


fields->GetItem((long)i)->Name 就是字段名

#7


fields->GetItem((long)i)->Name

#8


_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset,pRS_Column;
m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordset.CreateInstance(__uuidof(Recordset));
_bstr_t strConnect = "Provider=SQLOLEDB; Server="服务器名称";Database="数据库名称";uid="用户名";pwd="密码";
m_pConnection->Open(strConnect,"","",adModeUnknown);
m_pRecordset->Open("表名",m_pConnection.GetInterfacePtr(), adOpenForwardOnly, adLockOptimistic, adCmdTable);

long lColumn = m_pRecordset->Fields->Count;
for(long i=0;i<lColumn;i++)
 {
   CString strName=(char*)_bstr_t(m_pRecordset->Fields->Item[i]->Name);
 }

strName得到的就是字段名称

#9


上面最长的2个帖子的方法我试验过了,
都是可行的.


我也正好遇到这个问题,
谢了 :)