http://qs321.pair.com?node_id=1001041


in reply to Re: Ms Access and win32 ole
in thread Ms Access and win32 ole

Hi Sinistral

I am now trying to open using this code
$oDatabase = $oAccess->DBEngine->OpenCurrentDatabase($filename);
It says invalid argument.Do we need to provide other arguments also.

With this code $oDatabase = $oAccess->DBEngine->OpenDatabase($filename);

It opens fine but the custom properties doesnot get added to the file's custom tab in the database properties.
Is there any difference between OpenDatabase and OpenCurrentDatabase.
my $filename = 'C:\Documents and Settings\551970\Desktop\database.accd +b'; # $ARGV[0]; print $filename."\n"; $oAccess = Win32::OLE->new('Access.Application') or die qq{Couldn't st +art new Access instance!}; # Open Access File $oDatabase = $oAccess->DBEngine->OpenDatabase($filename); my $new_property = $oDatabase->Containers->Databases->Documents->User +Defined->CreateProperty("Test1",12,"Test"); $oDatabase->Containers->Databases->Documents->UserDefined->Propertie +s->Append($new_property); foreach (in $oDatabase->Containers->Databases->Documents->UserDefined- +>Properties) { #print Dumper($_); print "prop ".$_->Name."\n"; } undef $oDatabase; #undef $oAccess; $oAccess->Quit();

Replies are listed 'Best First'.
Re^3: Ms Access and win32 ole
by Sinistral (Monsignor) on Oct 26, 2012 at 13:50 UTC

    Most of my Win32::OLE experience has been with Excel, not Access, but a little Googling found this link: http://msdn.microsoft.com/en-us/library/office/bb238012(v=office.12).aspx which specifically says that OpenCurrenDatabase is for manipulating Access and opening files, while OpenDatabase returns a Database variable but doesn't actually open the file in the Access window. So for you, you want OpenCurrentDatabse. Beyond that, the best thing I can offer is to check out the documents I linked to, which are the Automation docs for Access 2007 (switch to 2010 if that's what you're using).

    The other tip I've seen is to record a macro of the task you're trying to achieve and examine the VBA code that Access creates. It looks like you're on your way already to knowing the Perl Win32::OLE to VBA equivalent