【问题标题】:How to find list of all tables in Access Database matching certain format in Delphi如何在Delphi中查找与特定格式匹配的Access数据库中所有表的列表
【发布时间】:2009-12-05 10:56:12
【问题描述】:

我需要计算给定数据库(MDB 格式)中的表名列表,这些表名具有特定格式(例如,其中包含 DateTime 字段“应用日期”)。我该怎么做?

注意:我使用 Delphi 7、ADO 组件、Microsoft JET 4.0 连接到 MDB 类型的数据库。

【问题讨论】:

    标签: sql database delphi ado


    【解决方案1】:

    连接组件上有两种方法可用于此类工作。第一个是:

    procedure GetTableNames(List: TStrings; SystemTables: Boolean = False); 
    

    使用当前数据库中所有可用表的列表填充 TStrings 后代。下一个方法是:

    procedure GetFieldNames(const TableName: string; List: TStrings);
    

    填充特定表的所有字段的列表。然后,您可以创建一个简单的例程来遍历您正在查找的特定字段的所有表的所有字段。

    【讨论】:

    • 你知道哪一种效果更快吗? OpenSchema 还是 GetTableNames?
    【解决方案2】:

    架构可能适合:

       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)

    【讨论】:

      【解决方案3】:

      这是一个 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
      

      【讨论】:

        猜你喜欢
        • 2014-11-04
        • 1970-01-01
        • 1970-01-01
        • 2016-12-18
        • 2021-01-11
        • 2015-04-03
        • 1970-01-01
        • 2021-12-13
        • 2016-02-23
        相关资源
        最近更新 更多