2015-10-02 5 views
1

У меня есть база данных visual fox pro 9, и я пытаюсь подключить ее из своего настольного приложения.Файл 'phd.prg' не существует

Я могу получить данные практически из всех таблиц, кроме одной таблицы.

когда я запускаю запрос для выбора данных из «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; 

ответ

0

У меня есть работа, наконец, кажется, что проблема связана с новым драйвером 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; 
      } 


    } 

Спасибо за вашу поддержку.

0

Поскольку вы открываете таблицу из контейнера базы данных, я бы проверил, есть ли в этой таблице некоторые триггеры, связанные с ней. Если эти триггеры ищут внешний файл phd.prg, который не отображается в пути, это может захлебывать его. Но вы делаете только select * from, так что это не должно быть проблемой. В любом случае, дважды проверьте его. Позволяет ли вам позвонить в phd.prg? Имеет ли база данных хранимые процедуры в ней по этой ссылке, она может вызвать проблему?

0

Раньше существовало дополнение для FoxPro под названием PhDbase, которое обеспечивало быстрый поиск в полях заметок и некоторых других функциях. Я почти уверен, что программа, которая его реализовала, называлась Phd.PRG, и для ее подключения требовался вызов этой программы (функции) в теге индекса.

Первая возможность заключается в том, что программа доступна, но в папке, которую вы не видите с OLEDB. Я не знаю, может ли OLEDB обрабатывать пользовательские функции в индексных тегах или нет. Но если вы можете найти файл в другой папке, попробуйте скопировать его в ту же папку, что и таблицы.

Вторая возможность: Если это старые данные и приложение больше не используется, вы должны удалить соответствующий тег. Я предполагаю, что вам понадобится (или, по крайней мере, хочу) Visual FoxPro выполнить эту работу.

Третий вариант, хотя я не знаю, будет ли он работать. Вы можете создать фиктивную программу с правильным именем файла и поместить ее в нужную папку. Прошло много времени с тех пор, как я использовал PhdBase, поэтому я не помню его параметры и возвращаю значение точно, но вы можете попробовать функцию, которая принимает строку и возвращает ту же строку.

Надеюсь, что-то здесь поможет.