繁体   English   中英

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

[英]How do I connect to an MS Access database using Perl?

我在本地计算机上有一个.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个选择,然后我将完成它。 所以任何有关连接和选择的帮助都会很棒。 再次感谢。

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

我猜测驱动程序与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的更多信息,请访问此处

你需要连接字符串

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM