2014-02-20 14 views
1

Я новичок в perl. Я попросил выполнить макрос в базе данных доступа ms, используя perl. Это код, который я использовалметоды, подобные opencurrentdatabase в perl

$oAccess = Win32::OLE->GetActiveObject('Access.Application'); 
$oAccess ->OpenCurrentDatabase($path); 
$oAccess ->{DoCmd}->RunMacro("DO ALL"); 

Сегодня, когда я выполнял программу я обнаружил, что только если доступ к базе данных открыт код отлично работает иначе он возвращает следующую ошибку

Can't call method "OpenCurrentDatabase" on an undefined value at auto.pl line 30 

Так что я был интересно, могу ли я найти какой-либо другой код, который будет служить цели без открытой базы данных доступа ms.

+0

http://search.cpan.org/~jdb/Win32-OLE-0.1711/lib/Win32/OLE.pm#EXAMPLES –

ответ

2
my $MSAccess; 
eval {$MSAccess = Win32::OLE->GetActiveObject('Access.Application')}; 
die "Access not installed" if [email protected]; 
unless (defined $MSAccess) { 
    $MSAccess = Win32::OLE->new('Access.Application','Quit') 
    or die "Unable to start Access"; 
} 
$MSAccess->{visible} = 0; 
+0

я думаю, это будет принудительно открыть доступ, но я хочу программу, чтобы выполнить без открытия доступа (т. е. только драйвер, который будет выполнять макрос). – Programmer

+0

@Programmer, если вы имеете в виду, что вы не хотите, чтобы Access был видимым, что выполнимо, иначе ваш запрос не имеет для меня большого смысла. –

+0

Да, я не хочу, чтобы доступ был видимым, как мы делаем для '$ dbh = DBI-> connect (" dbi: ODBC: driver = Microsoft Access Driver (* .mdb); dbq = xyz.mdb ", $ username, $ password) || die "Ошибка подключения: $!"; ' – Programmer

Смежные вопросы