如何使用 ODBC C# 获取 FileMaker pro 中所有数据库名称的列表

How to get a list of all database names in FileMaker pro using ODBC C#

我正在开发一个使用 ODBC 从 FileMaker pro 提取数据的应用程序,我现在成功地从特定 table 获取数据

    try
    {
        conn = new OdbcConnection("DSN=FileMaker;Uid=Admin;Pwd=******");
        conn.Open();
        cmd = new OdbcCommand("SELECT * FROM SimpleProductTest");
        cmd.Connection = conn;
        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        if ((dr != null) && (dr.HasRows))
        {
            while (dr.Read())
            {
                    temp = dr.GetString(0);
                    Console.WriteLine(temp);
            }
        }

        Console.WriteLine("Done.");
        Console.ReadLine();
    }

现在我想列出 FileMaker Pro 中的所有数据库名称和 table 名称。根据他们的文档(http://www.filemaker.com/help/12/fmp/html/func_ref1.31.31.html),函数 DatabaseNames 似乎是正确的。

try
{
    conn = new OdbcConnection("DSN=FileMaker;Uid=Admin;Pwd=******");
    conn.Open();
    cmd = new OdbcCommand("DatabaseNames");
    cmd.Connection = conn;
    dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

    if ((dr != null) && (dr.HasRows))
    {
        while (dr.Read())
        {
            temp = dr.GetString(0);
            Console.WriteLine(temp);
        }
    }

    Console.WriteLine("Done.");
    Console.ReadLine();
}

但是,我得到查询不正确的异常,有人知道如何在 FileMaker Pro 中列出所有数据库和 tables 吗?

提前致谢

想想看,这个函数是没有文档的。尝试 FileMaker_Tables(及其同伴 FileMaker_Fields)。这些在内部 ExecuteSQL() 函数中工作。我想它们也可以通过 ODBC 获得,但我不确定(也无法找到 ATM)。

FileMaker_Tablesreturns以下列:

  1. 表名
  2. 表格ID
  3. 基表名称
  4. 基础文件名
  5. 模数

信用: http://www.databuzz.com.au/using-executesql-to-query-the-virtual-schemasystem-tables/

FileMaker 函数仅在 FileMaker 中有效,包括 FSQL 调用,据我所知。这是来自 FileMaker 的 ODBC 指南 (pdf) 的 link:

https://fmhelp.filemaker.com/docs/13/en/fm13_odbc_jdbc_guide.pdf

您可能需要参阅第 7 章以获取参考信息。 FileMaker 在其关系图中使用 table 出现名称而不是实际的 table 名称将自身暴露给 ODBC。您应该可以从那里 return 所有可用的 table。一般来说,您会知道您尝试访问的数据库或文件名,以及所需的身份验证。

每个单独的文件大致相当于 SQL 中的一个 "database"。我不知道是否有 SQL 语句将 return 所有可用的数据库,但您应该能够从 FM Server 管理控制台看到打开了哪些文件。