如何过滤掉系统表?

wsljj_2002 2002-07-13 05:03:33
我用ADOConnection取出数据库中的表,代码如下:
int j;
AnsiString tempstr1;
AnsiString tempstr2;
AnsiString tempstr3;
AnsiString strValue;
ListBox1->Items->Clear();
TTreeNode *tempNode;
TreeView1->Items->Clear();
tempstr1="yxk";
TreeView1->Items->Add(NULL,tempstr1);
ListBox2->Items->Clear();
tempNode=TreeView1->Items->Item[0];
tempNode->ImageIndex=1;
strValue=tempNode->Text;
Formyxk->ADOConnection1->GetTableNames(ListBox2->Items,false);
for(j=0;j<ListBox2->Items->Count;j++)
{
tempstr2=ListBox2->Items->Strings[j];
TreeView1->Items->AddChild(tempNode,tempstr2);
}
但是为什么有一些其它的表,我只想取出我自己建的表。
还有如何取出表中字段的属性,比如是char的或long类型的。
...全文
24 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsljj_2002 2002-07-13
  • 打赏
  • 举报
回复
你有oicq号么?
jiangdh 2002-07-13
  • 打赏
  • 举报
回复
这些都是ado提供的功能,是语言无关的。
wsljj_2002 2002-07-13
  • 打赏
  • 举报
回复
请问这位高手,你这个程序是什么语言,对于cb那些函数可以用么
jiangdh 2002-07-13
  • 打赏
  • 举报
回复
获取用户自己建的表的另一种方法(通用):

数据库中表和视图的获取
数据库中表和视图的获取是通过ADO对象的OpenSchema方法获得的。OpenSchema需要两个参数,分别是querytype和criteria。
querytype=adSchemaTables
criteria=Array("EIP_database",Empty,Empty,"TABLE")
Set viewRS=Session ("sysconn").OpenSchema(querytype,criteria)
While NOT viewRS. Eof
Response.write viewRS(2)
viewRS. MoveNext
Wend

在上面的程序中,将常量adSchemaTables赋给querytype变量。AdSchemaTables是在adovbs.inc中定义的ADO常量。当用这种查询类型调用OpenSchema方法时,返回的结果集中包含有用户创建的表、系统表以及视图。criteria变量用来限制查询结果。它有一个包含4个元素的数组。其中最后一个元素用来指定返回的表的类型。用来返回用户创建的表或视图所对应的值分别是“TABLE”和“VIEW”。在执行语句3后,数据库EIP_database中的所有用户创建的表的信息就可以通过记录集viewRS来访问了。其中viewRS(2)表示取得记录集viewRS从0开始的第2个字段的值,即表的名称。取得视图的操作同样如此,只是把语句2中的“TABLE”替换为“VIEW”。
jiangdh 2002-07-13
  • 打赏
  • 举报
回复
字段属性含义如下:
常量 说明
AdArray 与其他类型一起加入逻辑 OR 以指示该数据是那种类型的安全数组 (DBTYPE_ARRAY)。
AdBigInt 8 字节带符号的整数 (DBTYPE_I8)。
AdBinary 二进制值 (DBTYPE_BYTES)。
AdBoolean 布尔型值 (DBTYPE_BOOL)。
adByRef 与其他类型一起加入逻辑 OR 以指示该数据是其他类型数据的指针 (DBTYPE_BYREF)。
adBSTR 以空结尾的字符串 (Unicode) (DBTYPE_BSTR)。
adChar 字符串值 (DBTYPE_STR)。
adCurrency 货币值 (DBTYPE_CY)。货币数字的小数点位置固定、小数点右侧有四位数字。该值保存为 8 字节范围为 10,000 的带符号整型值。
adDate 日期值 (DBTYPE_DATE)。日期按双精度型数值来保存,数字全部表示从 1899 年 12 月 30 开始的日期数。小数部分是一天当中的片段时间。
adDBDate 日期值 (yyyymmdd) (DBTYPE_DBDATE)。
adDBTime 时间值 (hhmmss) (DBTYPE_DBTIME)。
adDBTimeStamp 时间戳(yyyymmddhhmmss 加 10 亿分之一的小数)(DBTYPE_DBTIMESTAMP).
adDecimal 具有固定精度和范围的精确数字值 (DBTYPE_DECIMAL)。
adDouble 双精度浮点值 (DBTYPE_R8)。
adEmpty 未指定值 (DBTYPE_EMPTY)。
adError 32 - 位错误代码 (DBTYPE_ERROR)。
adGUID 全局唯一的标识符 (GUID) (DBTYPE_GUID)。
adIDispatch OLE 对象上 Idispatch 接口的指针 (DBTYPE_IDISPATCH)。
adInteger 4 字节的带符号整型 (DBTYPE_I4)。
adIUnknown OLE 对象上 IUnknown 接口的指针 (DBTYPE_IUNKNOWN)。
adLongVarBinary 长二进制值(仅用于 Parameter 对象)。
adLongVarChar 长字符串值(仅用于 Parameter 对象)。
adLongVarWChar 以空结尾的长字符串值(仅用于 Parameter 对象)。
adNumeric 具有固定精度和范围的精确数字值 (DBTYPE_NUMERIC)。
adSingle 单精度浮点值 (DBTYPE_R4)。
adSmallInt 2 字节带符号整型 (DBTYPE_I2)。
adTinyInt 1 字节带符号整型 (DBTYPE_I1)。
adUnsignedBigInt 8 字节不带符号整型 (DBTYPE_UI8)。
adUnsignedInt 4 字节不带符号整型 (DBTYPE_UI4)。
adUnsignedSmallInt 2 字节不带符号整型 (DBTYPE_UI2)。
adUnsignedTinyInt 1 字节不带符号整型 (DBTYPE_UI1)。
adUserDefined 用户定义的变量 (DBTYPE_UDT)。
adVarBinary 二进制值(仅 Parameter 对象)。
adVarChar 字符串值(仅 Parameter 对象)。
adVariant 自动变体型 (DBTYPE_VARIANT)。
adVector 与其他类型一起加入逻辑 OR 中,指示数据是 DBVECTOR 结构(由 OLE DB 定义)。该结构含有元素的计数和其他类型 (DBTYPE_VECTOR) 数据的指针。
adVarWChar 以空结尾的 Unicode 字符串(仅 Parameter 对象)。
adWChar 以空结尾的 Unicode 字符串 (DBTYPE_WSTR)。
jiangdh 2002-07-13
  • 打赏
  • 举报
回复
取出自己建的表名,可以通过访问sysobjects表得到,语句为:
select name from sysobjects where type='u'
建一个recordset,取出其字段(name)的值即为自己建的表名。
取字段属性如下:
Public Sub TypeX()

Dim rstEmployees As ADODB.Recordset
Dim fldLoop As ADODB.Field
Dim strCnn As String

' 使用雇员表中的数据打开记录集。
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
Set rstEmployees = New ADODB.Recordset
rstEmployees.Open "employee", strCnn, , , adCmdTable

Debug.Print "Fields in Employee Table:" & vbCr

' 枚举雇员表的字段集合。
For Each fldLoop In rstEmployees.Fields
Debug.Print " Name: " & fldLoop.Name & vbCr & _
" Type: " & FieldType(fldLoop.Type) & vbCr
Next fldLoop

End Sub

Public Function FieldType(intType As Integer) As String

Select Case intType
Case adChar
FieldType = "adChar"
Case adVarChar
FieldType = "adVarChar"
Case adSmallInt
FieldType = "adSmallInt"
Case adUnsignedTinyInt
FieldType = "adUnsignedTinyInt"
Case adDBTimeStamp
FieldType = "adDBTimeStamp"
End Select

End Function
wsljj_2002 2002-07-13
  • 打赏
  • 举报
回复
能不能给个例子
allmywant 2002-07-13
  • 打赏
  • 举报
回复
可以用数据库用户名来限制,以Oracle为例,可以通过owner字段来寻找某个用户的表

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧