Home >Database >Mysql Tutorial >BCB得到Access表格的所有表名

BCB得到Access表格的所有表名

WBOY
WBOYOriginal
2016-06-07 15:43:521134browse

之前我知道有两种方法可以获取Mdb文件的 所有 表名: 1、调用TADOConnection::GetTableNames 2、查询系统表MSysObjects 但是实际中均遇到了问题,第1种方法会 得到 Access里表连同查询的名字,而且没有办法区分;第二种方法MSysObjects默认是没有读写的权限

之前我知道有两种方法可以获取Mdb文件的所有表名:

1、调用TADOConnection::GetTableNames

2、查询系统表MSysObjects


但是实际中均遇到了问题,第1种方法会得到Access里表格连同查询的名字,而且没有办法区分;第二种方法MSysObjects默认是没有读写的权限的,需要修改Access文件的设置才行,这样如果是自己的数据库文件还好,如果是其它同事的数据库,要求别人也按照自己的想法来做总感觉不是很妥当,而且可能数据库文件在客户中已经开始使用导致没办法修改。

鉴于以上原因,我找了第三种方法。请看代码:


void GetMdbAllTables(TADOConnection *Conn, TStrings *List)
{   
    List->Clear();
    AnsiString sTableType;
    auto_ptr query(new TADOQuery(NULL));
    query->Connection = Conn;
    TSchemaInfo Schema = siTables;
    Conn->OpenSchema( Schema, EmptyParam, EmptyParam, (TADODataSet*)query.get());
    for ( ; !query->Eof; query->Next() )
    {
        sTableType = query->FieldByName("TABLE_TYPE")->AsString;
        if ( sTableType == "TABLE" )
        {
            if ( !query->FieldByName("TABLE_NAME")->AsString.Pos("粘贴错误") )  //见注1

            {
                List->Add( query->FieldByName("TABLE_NAME")->AsString );
            }
        }
    }
}


注1:/如果Access从外部导入表格,很可能会出现这个“粘贴错误”这个表名。



Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn