文件 'phd.prg' 不存在

File 'phd.prg' does not exists

我有一个 visual fox pro 9 数据库,我正在尝试从我的桌面应用程序连接它。

我可以从几乎所有 table 中获取数据,只有一个 table 除外。

当我 运行 从 "test.dbf" 查询 select 数据时,它抛出异常说

File 'phd.prg' does not exists

我正在使用 VFP OLEDB 驱动程序连接数据库。

 DataTable YourResultSet = new DataTable();
        OleDbConnection yourConnectionHandler = new OleDbConnection(
               "Provider=VFPOLEDB.1;Data Source=E:/TRACKONE.DBC;Exclusive=false;Nulls=false;");
        yourConnectionHandler.Open();

        if (yourConnectionHandler.State == ConnectionState.Open)
        {
            OleDbDataAdapter DA = new OleDbDataAdapter();

            string mySQL = "SELECT * FROM TEST.DBF";
            OleDbCommand MyQuery = new OleDbCommand(mySQL, yourConnectionHandler);


            DA.SelectCommand = MyQuery;
            try
            {
                DA.Fill(YourResultSet);

            }
            catch (OleDbException ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            yourConnectionHandler.Close();
            return YourResultSet;

        }

        else
        {
            MessageBox.Show("Error Opening Databse");
        }

        return null;

由于您要从数据库容器中打开 table,我会检查所讨论的 table 是否有一些与之关联的触发器。如果这些触发器正在寻找路径中不可见的某些外部 phd.prg 文件,则可能会阻塞它。但是你只是在做一个 select * from,所以这不应该是问题所在。无论如何都要仔细检查一下。 "phd.prg" 的名字是否让您耳目一新?数据库中是否有使用此名称引用的存储过程,这可能是导致问题的原因?

FoxPro 曾经有一个名为 PhDbase 的附加组件,它提供在备忘录字段中的快速搜索和一些其他功能。我很确定实现它的程序被称为 Phd.PRG 并且连接它需要在索引标记中调用该程序(函数)。

第一种可能性是该程序可用,但在您看不到 OLEDB 的文件夹中。我不知道OLEDB 是否可以处理索引标签中的用户自定义函数。但如果你能在另一个文件夹中找到该文件,你可以尝试将其复制到与表格相同的文件夹中。

第二种可能性:如果这是旧数据并且应用程序不再使用,您应该能够删除相关标签。我的猜测是您需要(或至少想要)Visual FoxPro 来完成这项工作。

第三个选项,虽然我不知道它是否有效。您可以创建一个具有正确文件名的虚拟程序并将其放在正确的文件夹中。自从我使用 PhdBase 以来已经有很长时间了,所以我确实不记得它的参数和 return 值,但是你可以尝试一个接受字符串和 returns 相同字符串的函数。

希望这里的内容有所帮助。

我终于让它工作了,新的 oledb 驱动程序似乎有问题,所以我现在正在使用 ODBC 驱动程序 "Microsoft Visual FoxPro Driver"。很难找到,但经过大量搜索后,我在这里找到了这个驱动程序。VFODBC

public DataTable GetYourData2(string textquery)
        {
            using (OdbcConnection conn = new OdbcConnection("Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;Exclusive=No;Collate=Machine;NULL=NO;DELETED=YES;BACKGROUNDFETCH=NO;SourceDB=e:/"))
                {


                OdbcDataAdapter ODA = new OdbcDataAdapter();

                OdbcCommand ODC = new OdbcCommand(textquery, conn);
                ODA.SelectCommand = ODC;  
                conn.Open();
                ODA.Fill(YourResultSet);

                return YourResultSet;   
            }


    }

感谢您的支持。