4

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

4 回答 4

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
于 2009-10-31T08:55:28.263 回答
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')

有关在 Windows 7 上使用 Perl 的 MS Access 的更多信息,请点击此处。

于 2012-12-14T00:13:04.433 回答
2

您需要连接字符串

于 2009-10-30T19:09:57.027 回答
1

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

于 2009-10-30T19:44:57.410 回答