【问题标题】:File 'phd.prg' does not exists文件“phd.prg”不存在
【发布时间】:2015-10-02 05:39:57
【问题描述】:

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

我可以从几乎所有表中获取数据,除了一张表。

当我运行查询以从“test.dbf”中选择数据时,它会抛出异常提示

文件“phd.prg”不存在

我正在使用 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;

【问题讨论】:

    标签: c# oledb visual-foxpro


    【解决方案1】:

    由于您正在从数据库容器打开一个表,我会检查该表是否有一些与之关联的触发器。如果这些触发器正在寻找一些在路径中不可见的外部 phd.prg 文件,那可能会阻塞它。但是你只是在做一个 select * from,所以这不应该是问题。无论如何都要仔细检查。 “phd.prg”这个名字给你敲响了警钟吗?数据库中是否有此名称引用的存储过程,它可能会导致问题?

    【讨论】:

      【解决方案2】:

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

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

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

      第三个选项,虽然我不知道它是否会起作用。您可以创建一个具有正确文件名的虚拟程序并将其放在正确的文件夹中。好久没用PhdBase了,具体参数和返回值不记得了,不过你可以试试接受一个字符串,返回同一个字符串的函数。

      希望这里有所帮助。

      【讨论】:

        【解决方案3】:

        我终于搞定了,新的 oledb 驱动程序似乎有问题,所以我现在使用 ODBC 驱动程序“Microsoft Visual FoxPro 驱动程序”。很难找到,但经过大量搜索后,我在这里找到了这个驱动程序。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;   
                    }
        
        
            }
        

        感谢您的支持。

        【讨论】:

          猜你喜欢
          • 2019-03-01
          • 1970-01-01
          • 2018-11-16
          • 2016-06-05
          • 2017-02-26
          • 2019-09-26
          • 2012-11-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多