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!
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.