Как мне подключиться к базе данных MS Access с помощью Perl? - PullRequest
4 голосов
/ 30 октября 2009

У меня есть файл .accdb на моей локальной машине, и я пытаюсь подключиться к нему и прочитать некоторые данные из 3 таблиц в БД. Как мне установить соединение с помощью Perl?

Пока что я так много собрал для MS Access, но я получаю ошибки, говорящие о том, что я не использую правильный драйвер. Есть идеи?

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

Спасибо!

РЕДАКТИРОВАТЬ: Просто чтобы уточнить, у меня нет реальных требований здесь. Мне просто нужно сделать 2 или 3 выбора из этой БД MS Access, и тогда я буду делать с этим. Так что любая помощь с подключением и выбором будет отличной. Еще раз спасибо.

Ответы [ 4 ]

4 голосов
/ 31 октября 2009

Исходя из вашей строки подключения, похоже, что вы (а) используете Win32 и (б) подключаетесь к базе данных на своем локальном компьютере. Если я прав, зачем беспокоиться о ODBC, если вы можете напрямую подключиться к Jet? См. Ниже:

#!/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
3 голосов
/ 14 декабря 2012

Я предполагаю, что драйвер не соответствовал тому, что вы использовали для 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')

Подробнее о MS Access с Perl в Windows 7 находится здесь .

2 голосов
/ 30 октября 2009
1 голос
/ 30 октября 2009

Я успешно использовал строки подключения с этим форматом в прошлом, но это было для старого формата * .mdb. Возможно, ваш драйвер ODBC не поддерживает более новый формат * .accdb в Access 2007.

...