如何使用Perl连接到MS Access数据库?

问题描述:

我在本地机器上有一个.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

根据您的连接字符串,它看起来像您是(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

+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

我已经成功地使用的连接字符串与过去那个格式,但那是旧*的.mdb格式。有可能您的ODBC驱动程序不支持Access 2007中较新的* .accdb格式。

+0

我将它转换为* .mdb,但它仍然拒绝工作。我可能需要考虑获得不同的驱动程序。 – samandmoore 2009-10-30 19:48:36

我猜司机不匹配,你有什么样的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