2009-10-30 123 views
4

我在本地機器上有一個.accdb文件,我試圖連接到它並從數據庫中的3個表中讀取一些數據。我如何使用Perl建立連接?如何使用Perl連接到MS Access數據庫?

到目前爲止,我已經爲MS Access一起颳了這麼多,但我得到錯誤,說我沒有使用正確的驅動程序。有任何想法嗎?

my $msaccess_dbh = DBI->connect(
    'dbi:ODBC:driver=microsoft access driver (*.accdb);' . 
    'dbq=C:\path\to\database\databasefile.accdb' 
); 

謝謝!

編輯:只是爲了澄清,我沒有真正的要求在這裏。我只需要從這個MS Access數據庫中做2或3個選擇,然後我將完成它。所以任何連接和選擇的幫助都很好。再次感謝。

+0

''dbi:ADO:....'也許? – 2009-10-30 19:08:29

+0

是否有一些使用ODBC而不是OLEDB的要求? – 2009-10-30 23:24:11

+0

沒有要求,我只需要弄清楚如何從這個愚蠢的MS Access數據庫中獲取一些數據。 – samandmoore 2009-11-02 19:30:17

回答

4

根據您的連接字符串,它看起來像您是(a)在Win32上和(b)連接到本地數據庫機。如果我正確的話,爲什麼要用ODBC直接連接Jet呢?下面請參閱:

#!/usr/bin/perl 
use strict;use warnings; 

use Win32::OLE; 

my $DBFile = qw(X:\Path\To\Your\Database.mdb); # 
#Choose appropriate version of Jet for your system 
my $Jet = Win32::OLE->CreateObject('DAO.DBEngine.36') or die "Can't create Jet database engine."; 
my $DB = $Jet->OpenDatabase($DBFile); 

my $SQLquery = "DELETE * FROM Test_Table"; 
$DB->Execute($SQLquery, 128); #128=DBFailOnError 
+0

DAO版本3.6無法讀取ACCDB。 – 2009-11-01 22:40:14

+0

這就是說,它在評論欄中說「選擇適當的版本」。 – heferav 2009-11-02 07:57:31

+0

好吧,這似乎工作,我現在對你的問題是如何將選擇保存到使用此方法的數組? – samandmoore 2009-11-02 19:24:03

2
+0

DBI-> connect(「dbi:ODBC:$ connection_string」); – spoulson 2009-10-30 19:16:00

+0

所以像這樣: my $ MSACCESS_DSN ='Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\ path \ to \ database \ databasefile.accdb; Persist Security Info = False;'; my $ msaccess_dbh = DBI-> connect(「dbi:ODBC:$ MSACCESS_DSN」); 因爲這是拋出一個錯誤,說沒有找到數據源名稱,沒有指定默認驅動程序。對不起,我有些MS db noob。 – samandmoore 2009-10-30 19:34:23

1

我已經成功地使用的連接字符串與過去那個格式,但那是舊*的.mdb格式。有可能您的ODBC驅動程序不支持Access 2007中較新的* .accdb格式。

+0

我將它轉換爲* .mdb,但它仍然拒絕工作。我可能需要考慮獲得不同的驅動程序。 – samandmoore 2009-10-30 19:48:36

3

我猜司機不匹配,你有什麼樣的DSN,或導致問題的另一件事是,如果你混合64位的Perl有32位ODBC驅動程序或帶有64位驅動程序的32位Perl。真正的問題是錯誤消息,它非常模糊 - 你認爲他們可能會告訴你數據源或驅動程序是否是問題?在一個完美的世界...

無論如何,如果你的DSN是正確的,你正在嘗試的方法確實有效,如果你的Perl & ODBC驅動程序位於同一位系列中,則爲&。

在DSN司機參考必須匹配到底發生了下智優工具>數據源(ODBC)>驅動程序選項卡中列出。礦被列爲Microsoft Access驅動程序( .mdb,.accdb)因此,這與您所擁有的略有不同。在Perl中,要連接的線路是:

my $dbh = DBI->connect('dbi:ODBC:driver=Microsoft Access Driver (*.mdb, *.accdb);dbq=X:\Path\To\Your\Database.mdb') 

有關MS Access with Perl on Windows 7 is here的更多信息。

+1

偉大的關於32位和64位的問題! – 2013-10-29 08:51:56

相關問題