使用下面的语句sql server 下通过,access没试过 Select a.status as Status, a.cdefault as cdefault, a.id as id, a.colorder as colorder, c.name as TableName, a.name as ColumnName, b.name as TypeName, a.length as Length, a.scale as Scale, a.isnullable as IsNullAble from syscolumns a, systypes b, sysObjects c where a.xtype = b.xusertype and a.id = c.id and c.xtype='U' and c.name = 'authors' //注:authors是表名称 order by a.colorder
void GetTableSchema(_ConnectionPtr pConnection, _bstr_t bstrTableName,_bstr_t* bstrColumnNames, int* nColumnCount)
{
ASSERT(pConnection->State==adStateOpen);
_RecordsetPtr pRstSchema = NULL; try
{
SAFEARRAY FAR* psa = NULL;
SAFEARRAYBOUND rgsabound;
_variant_t var;
_variant_t Array;
rgsabound.lLbound = 0;
rgsabound.cElements = 4;
psa = SafeArrayCreate(VT_VARIANT, 1, &rgsabound);
var.vt = VT_EMPTY;
long ix;
ix = 0;
SafeArrayPutElement(psa, &ix, &var); ix= 1;
SafeArrayPutElement(psa, &ix, &var); ix = 2;
var.vt = VT_BSTR;
var.bstrVal =bstrTableName;
SafeArrayPutElement(psa, &ix, &var);
SysFreeString(var.bstrVal);
var.vt = VT_EMPTY;
ix = 3;
SafeArrayPutElement(psa, &ix, &var); Array.vt = VT_ARRAY|VT_VARIANT;
Array.parray = psa; pRstSchema = pConnection->OpenSchema(adSchemaColumns,&Array);
*nColumnCount=0;
while(!(pRstSchema->EndOfFile))
{
if(bstrColumnNames!=NULL)
{
_bstr_t column_name = pRstSchema->Fields->
GetItem("COLUMN_NAME")->Value;
*(bstrColumnNames++)=column_name;
} *nColumnCount+=1;
pRstSchema->MoveNext();
}
}
catch (_com_error e) {
PrintComError(e);
} if (pRstSchema)
if (pRstSchema->State == adStateOpen)
pRstSchema->Close();
}这个函数这样使用,
int nColumnCount=0;
_bstr_t* bstrColumnNames=NULL;
GetTableSchema(m_pConnection,(_bstr_t) strTableName,bstrColumnNames,&nColumnCount);
if(nColumnCount!=0)
{
bstrColumnNames=new _bstr_t[nColumnCount];
GetTableSchema(m_pConnection,(_bstr_t)strTableName,bstrColumnNames,&nColumnCount);
}
那么bstrColumnNames里面就是各列的名称了,
这样可以取得CString strFieldName=(LPCTSTR)bstrColumnNames[i];
Select a.status as Status, a.cdefault as cdefault, a.id as id, a.colorder as colorder, c.name as TableName, a.name as ColumnName, b.name as TypeName, a.length as Length, a.scale as Scale, a.isnullable as IsNullAble from syscolumns a, systypes b, sysObjects c where a.xtype = b.xusertype and a.id = c.id and c.xtype='U' and c.name = 'authors' //注:authors是表名称
order by a.colorder
pRstSchema就是所有列的名称的表
_bstr_t column_name = pRstSchema->Fields->GetItem("COLUMN_NAME")->Value;
取得各列的名称