Источник данных, который вы устанавливаете, включает полное имя .DBF ... Не делайте этого.Источник данных должен просто указывать на физический каталог, ГДЕ находится таблица .... Затем, когда вы отправляете запрос к таблице, он ищет путь к .dbf по имени, которое вы запрашиваете, находит его и возвращает, что... Кроме того, вам не нужно явно включать .dbf, например
select * from YourTable.dbf
РЕДАКТИРОВАТЬ В ОБРАТНОЙ СВЯЗИ
Ваше открываемое «соединение» имеет источник данных.Это говорит о том, где он должен найти данные.При подключении к источнику VFP все, что вам нужно сделать, это установить источник на физический путь к таблице.Обратите внимание, что я только что удалил «VCABDOC.DBF» из строкового параметра.
$conn->Open('Provider=VFPOLEDB.1;Data Source="C:\\xampp\\htdocs\\work;";');
СЕЙЧАС, вы сможете просто запрашивать данные непосредственно из таблицы, расположенной в «c: \ xampp \ htdocs».\ work "папка.
$rs = $conn->Execute("SELECT * FROM vcabdoc");
Наконец, допустим, у вас есть более одной таблицы .dbf в вашей папке" c: \ xampp \ htdocs \ work ".Скажем, простая система ввода клиентов / заказов, и вы хотите получить все заказы для конкретного человека.Пока обе таблицы находятся в одной папке (т.е. работают), вы можете сделать что-то вроде
$rs = $conn->Execute(
"SELECT customer.*, orders.*
FROM customer
join orders on customer.ID = orders.customerID
order by orders.date");
Заметьте, что я явно не добавляю в запрос полный путь плюс имя таблицы PLUS.Соединение знает, где оно будет пытаться найти таблицы для завершения запроса.Кроме того, ваше соединение НЕ позволяет вам идти относительно пути назад (ближе к C :), но позволяет вам идти относительно вперед.Итак, скажем, у вас есть структура каталогов, похожая на
c:\xampp\htdocs\work\
c:\xampp\htdocs\work\SubFolder1
c:\xampp\htdocs\work\SubFolder2
, и вы устанавливаете точку подключения к папке «работа», как в исходном примере.Вы МОЖЕТЕ запросить ссылку на подпапки в вашем запросе.В этом запросе я использую «псевдоним» после каждой ссылки на имя таблицы, поэтому мне не нужно явно вводить длинное имя таблицы там, где оно используется в остальной части запроса.Это облегчает чтение.
("c" is alias to customers table)
("sft1" is alias to Sub-folder first table )
("sft2" is alias to Sub-folder second table )
select
c.*,
sft1.someField,
sft2.AnotherField
from
customers c
join SubFolder1\SomeOtherTable sft1
on c.SomeCommonColumn = sft1.SameCommonColumn
join SubFolder2\SecondTable sft2
on c.ADifferentColumn =sft2.SimilarPurposeColumn
Надеюсь, это поможет вам кое-что прояснить.