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

时间:2009-10-30 18:39:45

标签: database perl ms-access odbc dbi

我的本​​地计算机上有一个.accdb文件,我正在尝试连接它,并从数据库中的3个表中读取一些数据。如何使用Perl建立连接?

到目前为止,我已经为MS Access拼凑了这么多,但我收到错误,说我没有使用正确的驱动程序。有什么想法吗?

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

谢谢!

编辑:只是为了澄清,我在这里没有真正的要求。我只需要从这个MS Access DB中做2或3个选择,然后我将完成它。所以任何有关连接和选择的帮助都会很棒。再次感谢。

4 个答案:

答案 0 :(得分:4)

根据您的连接字符串,它看起来像是(a)在Win32上,(b)连接到本地计算机上的数据库。如果我是正确的,当你可以直接连接Jet时,为什么还要烦扰ODBC呢?请参阅以下内容:

#!/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

答案 1 :(得分:3)

我猜测驱动程序与DSN的驱动程序不匹配,或者导致问题的另一个原因是你将64位Perl与32位ODBC驱动程序或32位Perl混合使用使用64位驱动程序。真正的问题是错误信息,它非常模糊 - 您认为他们可能会告诉您数据源或驱动程序是否是问题?在一个完美的世界......

无论如何,如果您的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的更多信息。

答案 2 :(得分:2)

答案 3 :(得分:1)

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