ご存知のかたご教授ください。
_RecordsetPtr pRs = pAdoConnection->Execute(
"select * from emp", NULL, adOptionUnspecified);
で取ったレコードセットに含まれる「列名」を取るには、
pRs->Fields->GetItem(&idx)->GetName();
で取れますが、これは通常、
while (!pRs->adoEOF) {
と、「行があれば」という条件がつきます。(idx=-1だとError)
行がなくても「列名」を取るには何を呼べばいいのでしょうか?
by VC++6 MFC #import msado15.dll
う〜ん・・・
SQL Serverですか?
ACCESSですか?
● SQL Server なら・・・
私が、過去DB構造をレポートさせるのに使ったSQLで
構造(全てではない)が取れます。
ここから、フィールド名を取得してもらえれば・・・
SELECT
sysobjects.name AS TABLE_NAME,
syscolumns.name AS COLUMN_NAME,
syscolumns.xtype AS COLUMN_TYPE,
syscolumns.prec AS COLUMN_PREC,
syscolumns.scale AS COLUMN_SCALE,
syscolumns.status AS COLUMN_STATUS,
syscolumns.isnullable AS COLUMN_NULL,
sysindexkeys.indid AS COLUMN_KEY,
CAST(sysproperties.value AS varchar(100)) AS DESCRIPTION
From
sysobjects
INNER JOIN
syscolumns
ON
sysobjects.id = syscolumns.id
LEFT OUTER JOIN
sysproperties
ON
syscolumns.id = sysproperties.id AND
syscolumns.colid = sysproperties.smallid
LEFT OUTER JOIN
sysindexkeys
ON
sysobjects.id = sysindexkeys.id AND
syscolumns.colid = sysindexkeys.colid,(
SELECT
TABLE_NAME
From
INFORMATION_SCHEMA.TABLES
Where
TABLE_TYPE = 'BASE TABLE') AS T1
Where
sysproperties.name = 'MS_Description' AND
sysobjects.name = T1.TABLE_NAME
※ 該当のデータベース中の全てのテーブルの構造が取得され
ますので・・・必要なテーブルのみでしたら、これを改造
して下さい。
以上。
訂正します。
※ 先のSQL文ですと、SQL Server でのテーブルのフィールドの説明
が入力されていないと、何もレコードが得られません。
説明以外の一般的な情報を取得するには・・・
SELECT
sysobjects.name AS TABLE_NAME,
syscolumns.name AS COLUMN_NAME,
syscolumns.xtype AS COLUMN_TYPE,
syscolumns.prec AS COLUMN_PREC,
syscolumns.scale AS COLUMN_SCALE,
syscolumns.status AS COLUMN_STATUS,
syscolumns.isnullable AS COLUMN_NULL,
sysindexkeys.indid AS COLUMN_KEY
From
sysobjects
INNER JOIN
syscolumns
ON
sysobjects.id = syscolumns.id
LEFT OUTER JOIN
sysproperties
ON
syscolumns.id = sysproperties.id AND
syscolumns.colid = sysproperties.smallid
LEFT OUTER JOIN
sysindexkeys
ON
sysobjects.id = sysindexkeys.id AND
syscolumns.colid = sysindexkeys.colid,
(
SELECT
TABLE_NAME
From
INFORMATION_SCHEMA.TABLES
Where
TABLE_TYPE = 'BASE TABLE'
) AS T1
Where
sysobjects.name = T1.TABLE_NAME
order by
sysobjects.id,
syscolumns.colid
とすれば、得られます。
お試し下さい。
以上。