【问题标题】:Extract query definition from JET database via ADO通过 ADO 从 JET 数据库中提取查询定义
【发布时间】:2010-10-14 01:51:42
【问题描述】:

我在 Delphi 2010 中有一个程序,它通过 ADO 使用 JET (mdb) 数据库。我希望能够提取数据库中一些查询的定义并将它们显示给用户。这是否可以通过 SQL、某些 ADO 接口或通过询问数据库本身来实现(我似乎没有 MSysObjects 的权限)。

【问题讨论】:

    标签: delphi delphi-2010 ado ms-jet-ace


    【解决方案1】:

    其中一些信息可通过 ADOX 调用获得。在MSDN website 上有一些示例(不幸的是不在 Delphi 中)的 api 概述。

    基本上,您要做的是导入 ADOX 类型库,然后使用为您生成的包装器来访问底层 API。从那里它就像导航层次结构以获取您需要的数据一样简单。

    您需要访问特定的View object,然后从那里获取命令属性。

    【讨论】:

    • 谢谢。我在这里找到了一些 Delphi 特定的 ADOX 材料:delphi.about.com/od/database/l/aa072401a.htm。将阅读它,看看它是否符合我的需要。虽然我真的希望我可以通过常规 ADOCommand 对象或询问 ADOConnection 对象。
    • 我认为 ADOX 连接是 ADO 连接。
    • 请注意,视图只是 SELECT 查询,而不是 DML 查询,因此对于 Access 数据库中所有可能保存的 QueryDef,这将是一个不完整的结果。
    【解决方案2】:

    通过 DAO,这很容易。您只需提取每个 QueryDef 的 SQL 属性。在 Access 中的 DAO 中,这将是:

      Dim db As DAO.Database
      Dim qdf As DAO.QueryDef
    
      Set db = DBEngine.OpenDatabase("[path/name of database]")
      For Each qdf In db
        Debug.Print qdf.SQL
      Next qdf
      Set qdf = Nothing
      db.Close
      Set db = Nothing
    

    我不知道如何翻译,但我认为这是最简单的方法,只要您习惯使用 DAO 而不是 ADOX。

    我根本不使用 ADO,但我猜它有一个视图集合,并且 SQL 属性适用于 SELECT 查询。但是,如果您对获取所有已保存 QueryDef 的 SQL 感兴趣,您还需要查看 DML 查询,因此您必须查看存储过程。我必须查找它的语法,但我很确定这就是您通过 ADO 获取信息的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      相关资源
      最近更新 更多