
string ConnectionString = "Provider=MicrosoftJetOLEDB40;" + @"Data Source=E:\report20100819\report20100819mdb";
OleDbConnection Conn = new OleDbConnection(ConnectionString);
ConnOpen();
DataTable shemaTable = ConnGetOleDbSchemaTable(OleDbSchemaGuidTables, new object[] { null, null, null, "TABLE" });
foreach (DataRow dr in shemaTableRows)
{
ConsoleWriteLine(dr["TABLE_NAME"]);
DataTable columnTable = ConnGetOleDbSchemaTable(OleDbSchemaGuidColumns, new object[] { null, null, dr["TABLE_NAME"]ToString(), null });
foreach (DataRow dr2 in columnTableRows)
{
ConsoleWriteLine(dr2["COLUMN_NAME"]);
}
}
ConnClose();
解释:
“ConnGetOleDbSchemaTable(OleDbSchemaGuidTables, new object[] { null, null, null, "TABLE" });”返回数据库中所有的数据表清单,返回值为DataTable。
“ConnGetOleDbSchemaTable(OleDbSchemaGuidColumns, new object[] { null, null, dr["TABLE_NAME"]ToString(), null });”返回指定数据表中所有的数据列清单,返回值为DataTable。Access有个系统内置表,系统内置表打开办法:
office 2003设置:工具 -> 选项 -> 视图 -> 勾选隐藏对象、系统对象。工具 -> 安全 -> 用户与组的权限 ,在对象名称中选定 MSysObjects ,然后权限中设置其读取权限。
office 2007设置:单击左上角图标 -> Access选项 -> 当前数据库 -> 导航 -> 导航选项 -> 勾选显示隐藏对象,显示系统对象。数据库工具选项卡 -> 用户和权限 -> 用户与组权限,对象类型选择表,对象名称选定MSysObjects,然后勾选“读取数据”权限
还有一种方法可以实现读取Access数据库中所有表:
最终读取的Sql语句为:
SELECT MSysObjectsDateCreate, MSysObjectsDateUpdate,MSysObjectsName,MSysObjectsType FROM MSysObjects
剩下的就是读这个Sql语句了。这个会吧
给LZ一个代码可以搜索ACCESS数据库内所有表名的代码。
Option ExplicitDim TableSet As ADODBRecordset
Dim Gconnection As ADODBConnection
Dim lianjie As String
Sub getTableName()
lianjie = "Provider=MicrosoftJetOLEDB40;Data Source=J:\LDGZ\南汇40M^2New\ldgz30_wd20100205N19200\Data\wdoldmdb;Persist Security Info=False"
Set Gconnection = New ADODBConnection
GconnectionOpen lianjie
Set TableSet = GconnectionOpenSchema(adSchemaTables, Array(Empty, Empty, Empty, Empty))
Do Until TableSetEOF
List1AddItem TableSet!table_name
TableSetMoveNext
Loop
End Sub
Private Sub Form_Load()
getTableName
End Sub
LZ可以将lianjie变量以你自己的连接字符串替代。我这里是用ACCESS7的数据库。
再给LZ提供一个链接
>
是关于获取“
VB 读取ACCESS数据库中所有表名及指定表的字段名
“的Word文件。
创建数据库在打开access时,点击空白数据库,就创建了,下面是创建表的语句。create
table
<表名>
(<字段1名>
<字段1的数据类型>
[字段1的字段级完整性约束条件]
[,<字段2名>
<字段2的数据类型>
[字段2的字段级完整性约束条件]
[,……]
[,<字段n名>
<字段n的数据类型>
[字段n的字段级完整性约束条件])
例如创建一个“学生”表
create
table
学生
(学号
char(10)
primary
key,姓名
char(4)
not
null,性别
char(1)
,
出生日期
date)JET SQL 可以更改字段类型,无法更改字段名的,除非你连续使用几个JET SQL 先删除字段然后再插入字段,然后用UPDATE查询将保存再临时表的原字段数据恢复过来。
或者,直接用 ADOX 更改 TABLE 的 Columns(字段名) 对象的 NAME 属性即可。
Function Test()
ChangeTableFieldName_ADO "表1", "aa", "pic1"
End Function
Function ChangeTableFieldName_ADO(MyTableName As String, MyFieldName As String, strNewName As String)
'3个参数:
'MyTableName 字符串,表名
'MyFieldName 字符串,原来的字段名
'strNewName 字符串,新的字段名
'记得先引用 ADOX
Dim MyDB As New ADOXCatalog
Dim MyTable As ADOXTable
MyDBActiveConnection = CurrentProjectConnection
Set MyTable = MyDBTables(MyTableName)
MyTableColumns(MyFieldName)Name = strNewName
End Function如何使用Access创建数据库及表
创建数据库在打开access时,点击空白数据库,就创建了,下面是创建表的语句。
Create table <表名> (<字段1名> <字段1的数据类型> [字段1的字段级完整性约束条件]
[,<字段2名> <字段2的数据类型> [字段2的字段级完整性约束条件] [,……] [,<字段n名> <字段n的数据类型> [字段n的字段级完整性约束条件])
例如创建一个“学生”表
create table 学生 (学号 char(10) primary key,姓名 char(4) not null,性别 char(1) , 出生日期 date)怎样使用一个查询获得数据库对象的名称(查询/窗体/表/报表/模块/宏)
方法一:
请详细参阅ADO参考文档中OpenSchema
如:
'功能:获取access库中表的个数及表的名称
'用ado怎样实现
'工程--->引用--->Microsoft ActiveX Data Object 2x(版本号)
'----------------------------------------------------------------------------
Private Sub Form_Load()
Dim adoCN As New ADODBConnection '定义数据库的连接
Dim strCnn As New ADODBRecordset
Dim rstSchema As New ADODBRecordset
Dim I As Integer
str1 = "Provider=MicrosoftJetOLEDB40;Data Source=c:\NorthwindMDB;Persist Security Info=False"
adoCNOpen str1
Set rstSchema = adoCNOpenSchema(adSchemaTables)
Do Until rstSchemaEOF
If rstSchema!TABLE_TYPE = "TABLE" Then
out = out & "Table name: " & _
rstSchema!TABLE_NAME & vbCr & _
"Table type: " & rstSchema!TABLE_TYPE & vbCr
I = I + 1
End If
rstSchemaMoveNext
Loop
MsgBox I
rstSchemaClose
adoCNClose
DebugPrint out
End Sub
方法二:
Access 系统表 MsysObjects 包含了数据库对象列表, 尽管未在文档中记载, 你仍可通过查询它来获取你想要的
注: 请不要有意或无意地修改任何ACCESS系统表,否则会出现不可意料的情况
使用下列 SQL 语句来获取你想要的
查询:
SELECT MSysObjectsName FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (MSysObjectsType)=5 ORDER BY MSysObjectsName;
窗体:
SELECT MSysObjectsName FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (MSysObjectsType)=-32768 ORDER BY MSysObjectsName;
表:
SELECT MSysObjectsName FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (Left$([Name],4) <> "Msys") AND (MSysObjectsType)=1 ORDER BY MSysObjectsName;
报表:
SELECT MSysObjectsName FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (MSysObjectsType)= -32764 ORDER BY MSysObjectsName;
模块:
SELECT MSysObjectsName FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (MSysObjectsType)= -32761 ORDER BY MSysObjectsName;
宏:
SELECT MSysObjectsName FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (MSysObjectsType)= -32766 ORDER BY MSysObjectsName;
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)