【问题标题】:How do I connect to an MS Access database using Perl?如何使用 Perl 连接到 MS Access 数据库?
【发布时间】:2009-10-30 18:39:44
【问题描述】:

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

【问题讨论】:

  • 使用 ODBC 而不是 OLEDB 是否有一些要求?
  • 没有要求,我只需要弄清楚如何从这个愚蠢的 MS Access DB 中获取一些数据。

标签: database perl ms-access odbc dbi


【解决方案1】:

根据您的连接字符串,您似乎 (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

【讨论】:

  • 这就是在评论行上写着“选择合适的版本”。
  • 好吧,这似乎可行,我现在向您提出的问题是如何使用此方法将选择保存到数组中?
【解决方案2】:

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

无论如何,如果您的 DSN 正确,并且您的 Perl 和 ODBC 驱动程序属于同一个位系列,那么您尝试的方法确实有效。

DSN 中的驱动程序引用必须与 管理工具 > 数据源 (ODBC) > 驱动程序 选项卡下列出的内容完全匹配。我的被​​列为 Microsoft Access Driver (.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的信息。

【讨论】:

    【解决方案3】:

    【讨论】:

    • DBI->connect("dbi:ODBC:$connection_string");
    • 所以是这样的:我的 $MSACCESS_DSN ='Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\database\databasefile.accdb;Persist Security Info=False; ';我的 $msaccess_dbh = DBI->connect("dbi:ODBC:$MSACCESS_DSN");因为那会抛出一个错误,说找不到数据源名称并且没有指定默认驱动程序。对不起,我有点像 MS db noob。
    【解决方案4】:

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

    【讨论】:

    • 我将它转换为 *.mdb 但它仍然拒绝工作。我可能不得不考虑换一个司机。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2016-08-17
    • 2013-02-12
    • 1970-01-01
    相关资源
    最近更新 更多