2012-03-16 5 views
2

PHP로 dbf 데이터베이스에 연결하려고합니다. 행운을 빌어 여러 가지 방법을 시도했습니다.Php, odbc & vfp

PHP : 5.3.8 파일 : C : \ XAMPP \ htdocs에 작업 \의 vcabdoc.dbf \

1rst 방법 :

생성 된 데이터 소스 dbvfp, 드라이버 C : \ WINDOWS \ system32를 \ vfpodbc.

사용 dll을 $odbc = odbc_connect ('dbvfp', '', '') or die('Could Not Connect to ODBC Database!');

Warning: odbc_connect() [function.odbc-connect]: SQL error: [Microsoft][ODBC Visual FoxPro Driver]File c:\xampp\htdocs\work\vcabdoc.dbf is not a database., SQL state S1000 in SQLConnect in C:\xampp\htdocs\WORK\odbc.php on line 5 

두번째 방법 :

include('\xampp\php\PEAR\adodb\adodb.inc.php'); 
include_once('\xampp\php\PEAR\adodb\adodb-pager.inc.php'); 
session_start(); 
$db = ADONewConnection('vfp'); 
$dsn="Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=C:\\xampp\\htdocs\\work\\vcabdoc.dbf;Exclusive=No;"; 
$db->Connect($dsn) or die('nope'); 
$db->SetFetchMode(ADODB_FETCH_ASSOC); 
$query = "Select * from vcabdoc.dbf"; 
$rs = $db->Execute($query); 
echo 'e'; 
while (!$rs->EOF) { 
    print_r($rs->fields); 
    $rs->MoveNext(); 


Notice: Trying to get property of non-object in C:\xampp\htdocs\WORK\testing.php on line 45 
Notice: Trying to get property of non-object in C:\xampp\htdocs\WORK\testing.php on line 46 
Fatal error: Call to a member function MoveNext() on a non-object in C:\xampp\htdocs\WORK\testing.php on line 47 

3 방법 :

$conn = new COM("ADODB.Connection"); 
$conn->Open('Provider=VFPOLEDB.1;Data Source="C:\\xampp\\htdocs\\work\\vcabdoc.dbf;";'); 
// SQL statement to build recordset. 
$rs = $conn->Execute("SELECT * FROM vcabdoc"); 

echo "<p>List of couriers:</p><hr>"; 
// Display all the values in the records set 
while (!$rs->EOF) { 
    $fv = $rs->Fields("Name"); 
    echo $fv->value."<br>\n"; 
    $rs->MoveNext(); 
} 
$rs->Close(); 

Fatal error: Uncaught exception 'com_exception' with message '<b>Source:</b> Microsoft OLE DB Provider for Visual FoxPro<br/><b>Description:</b> Invalid path or file name.' in C:\xampp\htdocs\WORK\testing.php:54 Stack trace: #0 C:\xampp\htdocs\WORK\testing.php(54): com->Open('Provider=VFPOLE...') #1 {main} thrown in C:\xampp\htdocs\WORK\testing.php on line 54 

나는이 경우는, 함께 더블 슬래시 (\)없이 시도했다.

어떤 도움이 필요합니까? 미리 감사드립니다.

감사합니다,

주앙

답변

6

당신이 설정하는 데이터 소스가 .DBF의 전체 이름이 포함됩니다 ... 그렇게하지 마십시오. 데이터 소스는 테이블이있는 실제 디렉토리를 가리켜 야합니다 .... 그러면 테이블에 쿼리를 발행하면 쿼리하는 이름으로 .dbf가 경로에서 찾고 찾은 다음 ... 또한, 당신은 명시 적으로 .DBF를 포함 할 필요가 없습니다 등

선택 *이

열려있는 귀하의 "연결"이 YourTable.dbf

에서

편집 피드백 PER 데이터 소스 그것이 데이터를 어디에서 찾아야하는지 알려줍니다. VFP 소스에 연결하는 경우 원본을 테이블의 실제 경로로 설정하기 만하면됩니다. 공지 사항 나는 단지 문자열 매개 변수에서 "VCABDOC.DBF"를 제거했다. ": \ XAMPP \ htdocs에 작업 \ C"폴더

$conn->Open('Provider=VFPOLEDB.1;Data Source="C:\\xampp\\htdocs\\work;";'); 

지금, 당신은 단지에있는 테이블에서 직접 조회 할 수 있어야한다.

$rs = $conn->Execute("SELECT * FROM vcabdoc"); 

마지막으로, "c : \ xampp \ htdocs \ work"폴더에 둘 이상의 .dbf 테이블이 있다고 가정하십시오. 간단한 고객/주문 입력 시스템을 말하면 특정 사람에 대한 모든 주문을 받고 싶습니다. 한 두 테이블이 같은 폴더에있는대로 (예 : 작업), 당신은 내가 명시 적으로 쿼리의 전체 경로 PLUS 테이블 이름에 던지는 아니에요

$rs = $conn->Execute(
"SELECT customer.*, orders.* 
    FROM customer 
     join orders on customer.ID = orders.customerID 
     order by orders.date"); 

공지 사항 같은 것을 할 수 있습니다. 연결은 쿼리를 완료하기 위해 테이블을 찾을 위치를 알고 있습니다. 또한, 당신의 연결은 상대 경로 인 BACKWARDS (C에 가깝습니다)를 허용하지 않지만, 당신은 상대적으로 앞으로 나아갈 수 있습니다. 그래서, 당신은

c:\xampp\htdocs\work\ 
c:\xampp\htdocs\work\SubFolder1 
c:\xampp\htdocs\work\SubFolder2 

같은 디렉토리 구조 뭔가를 그리고 당신은 원래의 샘플에서와 같이 "작업"폴더로 연결 지점을 말한다. 쿼리의 하위 폴더를 참조 할 수 있습니다.이 쿼리에서는 각 테이블 이름 참조 뒤에 "별칭"을 사용하므로 나머지 쿼리에서 Long 테이블 이름을 명시 적으로 입력 할 필요가 없습니다. 가독성을 높여줍니다.

("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 

희망 사항은 몇 가지 사항을 명확히하는 데 도움이됩니다.

+0

나는 네가 보는 것을 이해하지 못한다. 나는 16 세 밖에 안된다. 인턴쉽을 위해이 일을하려고한다. 네가 나에게 더 잘 설명해 줄 수 있다면, 미리 감사하라. 내 경험이 부족해서 미안해. –

+0

@ user1274469, 명확한 설명을 위해 수정 된 답변 참조 – DRapp