in reply to accessing MS Access databases

Warning: This is completely untested. I don't have MS Access, and I never use Win32:OLE, but at least I know what it is.

I found the VBA script (emdeded in POD in the program below), to do this here, and I've made an attempt to convert is to Perl/OLE to give you a starting point. (But don't ask me questions cos I won't know the answers. Well, you can try, but you've been warned:)

use strict; use warnings; use Win32::OLE; =VBA Dim accessApp as Access.Application Dim strDB as string Dim strImport as string set accessApp = new Access.Application strDB = "C:\Test\MyDatabase.mdb" strImport = "R:\Download\ImportFile.txt" accessApp.OpenCurrentDatabase strDB accessApp.DoCmd.TransferText acImportDelim, , "TableX", strImport, -1 accessApp.CloseCurrentDatabase =cut ## connect to Access my $access = Win32::OLE->new 'Access.Application' ) or die "Cannot create Access object:$!\n"; ## connect to the database $access->OpenCurrentDatabase( 'x:\The\path\to\your\database.mdb'); ## run the import command $access->DoCmd->TransferText( ',', ## The delimiter 0, ## First line contains field names. (1 if yes) 'YourTableName', ## The name of the table to import to 'x:/the/path/to/the/file.csv', ## file to import -1 ########### Haven't a clue what this is, ## but you should be able to work it out by looking at the ## Text Transfer menu ) or die $^E; ## and done $access->Quit();

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
RIP an inspiration; A true Folk's Guy

Replies are listed 'Best First'.
Re^2: accessing MS Access databases
by Jim (Curate) on Oct 16, 2010 at 05:19 UTC

    I tested this script and — surprise! — it works.

    #!perl use strict; use warnings; use Win32::OLE; use Win32::OLE::Const 'Microsoft Access'; my $database = 'D:\Database.accdb'; my $csv_file = 'D:\Data.csv'; my $tbl_name = 'Data'; my $db = Win32::OLE->new('Access.Application') or die "Cannot create Microsoft Access object\n"; $db->OpenCurrentDatabase($database); $db->DoCmd->TransferText(acImportDelim, '', $tbl_name, $csv_file, -1); $db->Quit(); exit 0;

    It's remarkably fast, too.

    The fifth argument to DoCmd->TransferText is the HasFieldNames parameter. -1 is True, which means the first line of the CSV file is a header.

    The missing error checking is on-account-of-because I haven't figured it out yet. But I swear this script is slurping data into an Access database — quickly!

Re^2: accessing MS Access databases
by Jim (Curate) on Oct 16, 2010 at 01:35 UTC

    ++BrowserUk doesn't have to get on a plane like I do.