use strict;
use warnings;
use DBI;
#MS Access 2003
#DBI->installed_versions;
# Perl : 5.008008 (MSWin32-x86-multi-thread)
# OS : MSWin32 (5.0)
# DBI : 1.59
# DBD::ODBC : 1.13
# Connect to the db
my $dbpathfile = 'C:\testdb.mdb';
my $db_driver = 'Microsoft Access Driver (*.mdb)';
my $dsn = "DBI:ODBC:DRIVER=$db_driver;DBQ=$dbpathfile";
my $dbh = DBI->connect( $dsn, '', '', { RaiseError => 1, AutoCommit =>
+ 1 } )
or die $DBI::errstr;
# Create table for test data
my $tblname = 'test_table';
my $tbl_sql = join( ' ', 'CREATE TABLE', $tblname,
'(ID AUTOINCREMENT, field1 TEXT,',
'CONSTRAINT', $tblname . '_pk', 'PRIMARY KEY
+(ID))' );
$dbh->do( $tbl_sql );
# Insert test data
my $insert_sql = join( ' ', 'INSERT INTO', $tblname, '( field1 ) VALUE
+S ( ? )' );
my $sth = $dbh->prepare( $insert_sql );
$sth->execute( 'test data' );
# Use @@IDENTITY to get the last insert ID
# See http://support.microsoft.com/kb/815629
my $id_sql = 'SELECT @@IDENTITY';
$sth = $dbh->prepare( $id_sql );
$sth->execute;
my $id = $sth->fetchrow_array;
print "Last insert ID is: $id\n";
Thanks to james2vegas and his post for seeding this approach. Thanks also to mje for considering adding this example to the docs for DBD::ODBC.
|