4

ローカルマシンに.accdbファイルがあり、それに接続してDB内の3つのテーブルからいくつかのデータを読み取ろうとしています。Perlを使用して接続を確立するにはどうすればよいですか?

これまでのところ、MS Accessのためにこれだけまとめましたが、正しいドライバーを使用していないというエラーが表示されます。何か案は?

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

ありがとう!

編集:明確にするために、私はここに実際の要件はありません。このMSAccessDBから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ビットのPerlを混在させている場合に問題が発生します。 -ビットドライバー。本当の問題はそのエラーメッセージです、それはひどく曖昧です-あなたは多分彼らがデータソースまたはドライバーが問題であったかどうかあなたに言うことができると思いますか?完璧な世界で...

とにかく、DSNが正しい場合、およびPerlとODBCドライバーが同じビットファミリーにある場合、その方法は機能します。

DSNのドライバー参照は、[管理ツール] > [データソース(ODBC) ] >[ドライバー]タブにリストされているものと完全に一致する必要があります。MineはMicrosoftAccessDriver( .mdb、.accdb)としてリストされているため、以前のものとは少し異なります。Perlでは、接続する行は次のとおりです。

my $dbh = DBI->connect('dbi:ODBC:driver=Microsoft Access Driver (*.mdb, *.accdb);dbq=X:\Path\To\Your\Database.mdb')

Windows7でのPerlを使用したMSAccessの詳細については、こちらをご覧ください。

于 2012-12-14T00:13:04.433 に答える
2

接続文字列が必要です

于 2009-10-30T19:09:57.027 に答える
1

私は過去にその形式の接続文字列を正常に使用しましたが、それは古い*.mdb形式の場合でした。ODBCドライバがAccess2007の新しい*.accdb形式をサポートしていない可能性があります。

于 2009-10-30T19:44:57.410 に答える