BCB6.0中通过ADOQuery读取Access表中的字段名

LPTSTR FiledTypeNames[] =
{
TEXT("ftUnknown"),
TEXT("ftString"),
TEXT("ftSmallint"),
TEXT("ftInteger"),
TEXT("ftWord"),
TEXT("ftBoolean"),
TEXT("ftFloat"),
TEXT("ftCurrency"),
TEXT("ftBCD"),
TEXT("ftDate"),
TEXT("ftTime"),
TEXT("ftDateTime"),
TEXT("ftBytes"),
TEXT("ftVarBytes"),
TEXT("ftAutoInc"),
TEXT("ftBlob"),
TEXT("ftMemo"),
TEXT("ftGraphic"),
TEXT("ftFmtMemo"),
TEXT("ftParadoxOle"),
TEXT("ftDBaseOle"),
TEXT("ftTypedBinary"),
TEXT("ftCursor"),
TEXT("ftFixedChar"),
TEXT("ftWideString"),
TEXT("ftLargeint"),
TEXT("ftADT"),
TEXT("ftArray"),
TEXT("ftReference"),
TEXT("ftDataSet"),
TEXT("ftOraBlob"),
TEXT("ftOraClob"),
TEXT("ftVariant"),
TEXT("ftInterface"),
TEXT("ftIDispatch"),
TEXT("ftGuid"),
TEXT("ftTimeStamp"),
TEXT("ftFMTBcd")
};

int CrnGetTableFields(String strMdbFile, String strTableName, TStrings *pList)
{
if (!pList) return 0;
pList->Clear();

// ADO连接
TADOConnection *con = new TADOConnection(NULL);
TADOQuery *aq = new TADOQuery(NULL);

try
{
if (con->Connected)
con->Connected = false;

// 连接该MDB数据库
con->ConnectionString = String().sprintf(
TEXT("Provider=Microsoft.Jet.OLEDB.4.0;")
TEXT("Data Source=%s;")
TEXT("Persist Security Info=False;"),
strMdbFile.c_str());

try
{
con->Connected = true;
}
catch(...)
{
::MessageBox(0, TEXT("打开数据库失败!"),
TEXT("警告"), MB_OK | MB_ICONWARNING);
}

// 如果连接成功,就通过ADOQuery读取字段
if (con->Connected)
{
aq->Connection = con;

aq->Close();
aq->SQL->Text = String().sprintf(
TEXT("select top 1 * from %s"),
strTableName);

bool bSucceed(true);
try
{
aq->Open();
}
catch(...)
{
bSucceed = false;
::MessageBox(0, TEXT("打开表时发生错误!"),
TEXT("警告"), MB_OK | MB_ICONWARNING);
}

if (bSucceed)
{
int nType;
for (int i = 0; i < aq->FieldDefList->Count; i++)
{
// 63 63 72 75 6E 2E 63 6F 6D
nType = aq->FieldDefList->FieldDefs->DataType;
if (nType > sizeof(FiledTypeNames) / sizeof(FiledTypeNames[0])
|| nType < 0)
nType = 0;

pList->Add(String().sprintf(
TEXT("字段名: %s, 类型:%s"),
aq->FieldDefList->FieldDefs->Name,
FiledTypeNames[nType]));
}

::MessageBox(0, TEXT("获取完毕!"),
TEXT("提示"), MB_OK | MB_ICONWARNING);
}
}
}
__finally
{
delete aq;
delete con;
}
return pList->Count;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 要打开的数据库文件名
String strMdbFile = TEXT("C:\\ccrun\\Database1.mdb");

CrnGetTableFields(strMdbFile, TEXT("Table1"), Memo1->Lines);
}
 

发布了41 篇原创文章 · 获赞 12 · 访问量 7032

猜你喜欢

转载自blog.csdn.net/lzksword/article/details/102599187