2017-08-18 77 views
1

我需要添加一些從HTML表單上傳到MS Access DDBB的文件。 使用PHP,SQL和ODBC我沒有任何問題queryng到Access文件,除了附件字段。如何使用PHP將附件插入Access數據庫?

INSERT INTO TEMAS (DATOSADJUNTOS.FILENAME, DATOSADJUNTOS.FILEDATA) VALUES ("ExampleName.txt", "Wathever") WHERE ID = 4; 

此查詢將返回以下錯誤:

SQLSTATE[07009]: Invalid descriptor index: -1003 [Microsoft][Controlador ODBC Microsoft Access] Argumento no válido. (SQLExecute[-1003] at ext\pdo_odbc\odbc_stmt.c:260) 

不管是什麼,我把「Wathever」代替,誤差始終是相同的。除非它是一個空字符串,那麼查詢沒有問題跑,而實際工作,你可以在我應該把在查詢中next image.

任何想法看,使其工作,或任何其他方式將附件插入MS Access DDBB?

謝謝

回答

2

埃裏克是正確的:使用ODBC您不能插入附件。你需要使用Access DAO,就像這樣:

$dbe = new COM("DAO.DBEngine.120") or die("Cannot create DBEngine object."); 
$db = $dbe->OpenDatabase("C:\\Users\\Public\\Database1.accdb"); 
$rsMain = $db->OpenRecordset("SELECT DATOSADJUNTOS FROM TEMAS WHERE ID=4", 2); // dbOpenDynaset 
$rsMain->Edit; 
$rsAttach = $rsMain->Fields("DATOSADJUNTOS")->Value; 
$rsAttach->AddNew; 
$fldAttach = $rsAttach->Fields("FileData"); 
$fldAttach->LoadFromFile("C:\\Users\\Gord\\Desktop\\sample.pdf"); 
$rsAttach->Update; 
$rsAttach->Close; 
$rsMain->Update; 
$rsMain->Close; 
$db->Close; 

注意,使用DAO是Access數據庫引擎的一個組成部分,所以這種方法並不需要一個完整安裝的Microsoft Access應用程序。

+0

比我提出的解決方案更容易!我的PHP經驗僅限於Linux,不知道你可以在PHP中使用COM,但肯定不知道這很容易。 –

+1

@ErikvonAsmuth - 'com_dotnet'僅在Windows版本的PHP中可用,默認情況下通常不啓用,但在php.ini中取消註釋適當的行將處理該問題。順便說一句,你最近在這裏做出了傑出的貢獻;他們非常感謝。 –

+0

非常感謝! 加入後,我的工作非常好: '[COM_DOT_NET] extension = php_com_dotnet。dll' 到'我的php.ini'配置文件。 –

1

據我所知,只有使用PHP和ODBC時,這是不可能的。您將需要一些可以通過COM或命令行直接與Access進行連接的東西。

您可以創建一個宏來導入Access中某個文件夾中的所有文件,或者偵聽命令行並導入一個文件。然後你可以在PHP中使用shell_exec來觸發它。這意味着您將需要在運行命令的服務器上擁有Access。

這並不容易。如果你真的想這樣做,我可以在步驟中給你指點。

請參閱this google discussion微軟員工聲稱ACE ODBC不支持附件字段。

(如果有人知道的方式,我很樂意被糾正)

+0

問題在於,由於某些原因,我不得編輯Access文件,而是照原樣使用它。 我很難相信沒有辦法做到這一點。讓我們等待,以防萬一有人能想出來。 如果我們終於不能完成throgh SQL,宏和'shell_exec'聽起來像個好主意。但是宏應該在不同的Access文件中。 –

+0

將宏放在不同的文件中對其複雜性沒有多大影響,所以這是一種有效的方法 –

+0

@RubénAguado - Erik是對的:您不能使用ODBC插入附件。但是,您不需要使用COM自動化或shell_exec;您只需使用Access數據庫引擎組件附帶的Access DAO。詳情請參閱我的回答。 –

相關問題