我的本地计算机上有一个.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个选择,然后我将完成它。所以任何有关连接和选择的帮助都会很棒。再次感谢。
答案 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')
答案 2 :(得分:2)
答案 3 :(得分:1)
我过去曾成功使用过该格式的连接字符串,但那是旧的* .mdb格式。您的ODBC驱动程序可能不支持Access 2007中较新的* .accdb格式。