Update:Added DBI method, much simpler way to create the tables!

You don't mention what version of Access you are using, so the two examples may need tweaking based on the version of JET you have. I'll let you parse the '|' delimited data ;)

Methods 2 and 3 create a database called 'new.mdb' in the current directory and add a table. Both methods were tested on Win2K with Access 97 (I know, old stuff ;)

Method 1 - Create the db either way (or just copy an empty mdb file), then use DBI to add the tables and populate the data

use DBI; my $datasource = "driver=Microsoft Access Driver (*.mdb);dbq=new.mdb"; my $username = 'admin'; my $password = ''; my $dbh = DBI->connect("dbi:ODBC:$datasource", $username, $password) || die "Error connecting: $!"; my $sql = "CREATE TABLE DBITable (FirstName TEXT, LastName TEXT)"; my $sth = $dbh->prepare($sql); $sth->execute;

Method 2 - Use ADOX (requires MDAC)

use strict; use warnings; use Win32::OLE; use Win32::OLE::Const 'Microsoft ADO Ext. 2.5 for DDL and Security'; # The "catalog" is the db my $cat = Win32::OLE->new('ADOX.Catalog'); # Tweak the following line for your JetDB $cat->Create('Provider=Microsoft.Jet.OLEDB.3.51;Data Source=new.mdb'); #first create the table, modify it, then append it to the #tables collection my $table = Win32::OLE->new('ADOX.Table'); $table->{Name} = 'MyADOTable'; $table->Columns->Append('ID', adInteger); $table->Columns->Append('Desc', adVarChar); $cat->Tables->Append($table);

Method 3 - Use DAO

use strict; use warnings; use Win32::OLE; # The next two lines would need to be tweaked # Off the top of my head, I think DAO 3.6 (or 4.0?)is for Access 2000 # Look in HKEY_CLASSES_ROOT for DAO for the actual numbers use Win32::OLE::Const 'Microsoft DAO 3.51 Object Library'; my $acc = Win32::OLE->new("DAO.DBEngine.35", 'quit'); my $db = $acc->CreateDatabase('new.mdb', dbLangGeneral); my $tab = $db->CreateTableDef('MyDAOTable'); my $fld = $tab->CreateField('ID', dbInteger); $tab->Fields->Append($fld); $fld = $tab->CreateField('Desc', dbText); $tab->Fields->Append($fld); $db->TableDefs->Append($tab); $db->TableDefs->Refresh;

Activestate's OLE browser will give you some clues as to available objects, methods and constants. The help files that came with Access will documents the object model in detail, with VBA examples.

Good luck!


In reply to Re: Create a MS Access database programmatically in perl by jsprat
in thread Create a MS Access database programmatically in perl by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.