标题:MFC ODBC 访问 数据库如何获取到所有表名?
只看楼主
northqd
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-12-15
 问题点数:0 回复次数:7 
MFC ODBC 访问 数据库如何获取到所有表名?
MFC ODBC 访问 数据库如何获取到所有表名? ADO方式呢?

[此贴子已经被作者于2007-1-29 16:47:08编辑过]


搜索更多相关主题的帖子: 表名 MFC ODBC 数据库 获取 
2007-01-29 16:46
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
得分:0 
sql:

select * from tab;

佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2007-01-29 23:54
northqd
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-12-15
得分:0 
这不是获取表名吧?
楼上的这个好象是获取指定表的所有记录呢?
我的意思是:ODBC DNS指定的数据库如example,其中包含50张表,我想把所有的表名列出来放到ListBox中供用户选择。
2007-01-30 08:15
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
得分:0 
SELECT name FROM sysobjects WHERE (OBJECTPROPERTY(id, N'IsUserTable') = 1)

佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2007-01-30 10:25
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
得分:0 
TESTHR(pConnection.CreateInstance(__uuidof(Connection)));
pConnection->Open (strCnn,"", "",adConnectUnspecified);
pRstSchema = pConnection->OpenSchema(adSchemaTables);
while(!(pRstSchema->EndOfFile))
{
_bstr_t Table_name = pRstSchema->Fields->
GetItem("TABLE_NAME")->Value;
printf("Table Name: %s\n",(LPCSTR) table_name);
_bstr_t table_type = pRstSchema->Fields->
GetItem("TABLE_TYPE")->Value;
printf("Table type: %s\n\n",(LPCSTR) table_type);
pRstSchema->MoveNext();
int intLine = intLine + 1;
if (intLine % 5 == 0)
{
printf("\nPress any key to continue...");
getch();
//Clear the screen for the next display
system("cls");
}
}

[此贴子已经被作者于2007-1-30 10:32:08编辑过]


佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2007-01-30 10:30
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
得分:0 

根据DataBaseMetaData获得数据库表名````
results =
dma.getTables(catalog, schema, tablemask, types[]);

其中参数的意义是:

catalog

要在其中查找表名的目录名。对于 JDBC-ODBC 数据库以及许多其他数据库而言,可将其设置为 null。这些数据库的目录项实际上是它在文件系统中的绝对路径名称。
schema

要包括的数据库“方案”。许多数据库不支持方案,而对另一些数据库而言,它代表数据库所有者的用户名。一般将它设置为 null。
tablemask

一个掩码,用来描述您要检索的表的名称。如果您希望检索所有表名,则将其设为通配符 %。请注意,SQL 中的通配符是 % 符号,而不是一般 PC 用户的 * 符号。
types[]

这是描述您要检索的表的类型的 String 数组。数据库中通常包括许多用于内部处理的表,而对作为用户的您没什么价值。如果它是空值,则您会得到所有这些表。如果您将其设为包含字符串“TABLES”的单元素数组,您将仅获得对用户有用的表格。

用于从数据库中获取表名的简单代码相当于获取 DatabaseMetaData 对象,并从其中检索表名:


con = DriverManager.getConnection(url);
//获取数据库的元数据
dma =con.getMetaData();
//将数据库中的表的名称转储出来
String[] types = new String[1];
types[0] = "TABLES"; //设置查询类型
//请注意通配符是 % 符号(而不是“*”)
results = dma.getTables(null, null, "%", types);

然后,我们可以打印出表名,正如我们上面所做的那样:

boolean more = results.next();
while (more)
{
for (i = 1; i <= numCols; i++)
System.out.print(results.getString(i)+" ");
System.out.println();
more = results.next();
}


佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2007-01-30 10:57
northqd
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-12-15
得分:0 
楼主还是很强,这是我找到的,应该与你的差不多。
    _RecordsetPtr rst,DeleRst;
    rst.CreateInstance(__uuidof(Recordset));
    rst=cnn->OpenSchema(adSchemaTables);
    _variant_t vTableName,vTableType;
    CString sSQL;
    rst->MoveFirst();
    CString sType;
    CString pName[255];
    int nIndex=0;
    while(!rst->_EOF)
    {
        vTableType=rst->GetCollect("TABLE_TYPE");
        vTableName=rst->GetCollect("TABLE_NAME");
        if(vTableType.vt!=VT_NULL && vTableName.vt!=VT_NULL)
        {
            sType=(char*)(_bstr_t)vTableType;
            if(sType=="TABLE")
            {
                CString strTemp;
            //    MessageBox("Hi");
                strTemp.Format("%s",(char*)(_bstr_t)vTableName);
                m_comboSheet.AddString(strTemp);                
           }
        }
        rst->MoveNext();
    }

[此贴子已经被作者于2007-1-30 17:47:03编辑过]

2007-01-30 16:59
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
得分:0 
楼主还是很强,这是我找到的,应该与你的差不多。


佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2007-02-03 17:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-118741-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.877479 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved