【发布时间】:2009-12-05 10:56:12
【问题描述】:
我需要计算给定数据库(MDB 格式)中的表名列表,这些表名具有特定格式(例如,其中包含 DateTime 字段“应用日期”)。我该怎么做?
注意:我使用 Delphi 7、ADO 组件、Microsoft JET 4.0 连接到 MDB 类型的数据库。
【问题讨论】:
我需要计算给定数据库(MDB 格式)中的表名列表,这些表名具有特定格式(例如,其中包含 DateTime 字段“应用日期”)。我该怎么做?
注意:我使用 Delphi 7、ADO 组件、Microsoft JET 4.0 连接到 MDB 类型的数据库。
【问题讨论】:
连接组件上有两种方法可用于此类工作。第一个是:
procedure GetTableNames(List: TStrings; SystemTables: Boolean = False);
使用当前数据库中所有可用表的列表填充 TStrings 后代。下一个方法是:
procedure GetFieldNames(const TableName: string; List: TStrings);
填充特定表的所有字段的列表。然后,您可以创建一个简单的例程来遍历您正在查找的特定字段的所有表的所有字段。
【讨论】:
架构可能适合:
Set rs = cn.OpenSchema(adSchemaColumns, _
Array(Empty, Empty, Empty, SelectFieldName))
在哪里
adSchemaColumns = 4
rs 是一个记录集对象
cn 一个连接对象
SelectFieldName 是列名,在本例中为“应用日期”。
此架构的约束是:
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
返回的列(字段)为:
TABLE_CATALOG
TABLE_SCHEMA
TABLE_NAME
COLUMN_NAME
COLUMN_GUID
COLUMN_PROPID
ORDINAL_POSITION
COLUMN_HASDEFAULT
COLUMN_DEFAULT
COLUMN_FLAGS
IS_NULLABLE
DATA_TYPE
TYPE_GUID
CHARACTER_MAXIMUM_LENGTH
CHARACTER_OCTET_LENGTH
NUMERIC_PRECISION
NUMERIC_SCALE
DATETIME_PRECISION
CHARACTER_SET_CATALOG
CHARACTER_SET_SCHEMA
CHARACTER_SET_NAME
COLLATION_CATALOG
COLLATION_SCHEMA
COLLATION_NAME
DOMAIN_CATALOG
DOMAIN_SCHEMA
DOMAIN_NAME
DESCRIPTION
-- [从数据库中获取架构信息](http://msdn.microsoft.com/en-us/library/kcax58fh(VS.80).aspx)
【讨论】:
这是一个 vbscript/asp 类型的解决方案。您可以将其调整为 Delphi
Const adSchemaTables = 20
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
objConnection.Open _
"Provider = Microsoft.Jet.OLEDB.4.0; " & _
"Data Source = 'C:\Scripts\Test.mdb'"
Set objRecordSet = objConnection.OpenSchema(adSchemaTables)
Do Until objRecordset.EOF
Wscript.Echo "Table name: " & objRecordset.Fields.Item("TABLE_NAME")
Wscript.Echo "Table type: " & objRecordset.Fields.Item("TABLE_TYPE")
Wscript.Echo
objRecordset.MoveNext
Loop
【讨论】: