PDA

View Full Version : MS Access with Perl


Precision
08-13-2003, 12:54 AM
Does anyone know how I can connect to a MS Access database using PERL? I'm not sure if i have the connection string correct or not, I have set up my ODBC Tool like this:

DSN: precisionse_Articles
Path: \database\Lightscatter.mdb

and the PERL script:

my $dbfile = "e:\web\precisionse\htdocs\database\Lightscatter.md b";
$DBIConn = "dbi:ODBC:precisionse_Articles";
my $dbh = DBI->connect($DBIConn) or die "$DBI::errstr\n";

If anyone could help I would really appreciate it! Thanks for your time!

Simon

Precision
08-14-2003, 06:41 AM
Ok, so now I can connect to the database [:)]. Now, how can I get my SQL Statement to work. I have this:

# Prepare SQL Statement
$sqlstatement = "SELECT * FROM Articles $where ORDER BY Article";

$sth = $dbh->prepare($sqlstatement);</font id="blue">

but the problem is the $dbh is from my old connection way:
my $dbh = DBI->connect("$DBIConn") or die "Opps, $DBI::errstr\n";

what am I supposed to do with the $dbh? What I am supposed to allocate it with? Thanks very much for your time and I hope I make some sense here! If not please tell me and I'll reword this. Thank you very much again!

bruce
08-14-2003, 11:18 AM
This is the test code i use to test if perl can connect to access


use Win32::ODBC;

#-- Depending on your version of Win32::ODBC, you may need to do
#-- something like the following to suppress -w warnings.
$Win32::ODBC::ODBCPackage = $Win32::ODBC::ODBCPackage;
$ODBCPackage::Version = $ODBCPackage::Version;

my $Message = '';
my $Column = '';
my $Value = '';
my %HashRow = ();
my $db = '';
my $Source = 'DSN=<dsnname>;';

if ($db = new Win32::ODBC($Source)) {
print STDERR "\nODBC connection successful for data source $Source.\n\n";
} else {
$Message = Win32::ODBC::Error(); #-- use when no $db object ref.
print STDERR "\nMessage: $Message\n";
print STDERR "ERROR: ODBC error during connection\n";
exit;
}

my $Sql = "SELECT * FROM sometable";

if ( $db->Sql($Sql) ) {
#-- Error on Sql call returns error code else UNDEF for success.
#-- Note reverse of error handling on "new" method.
$Message = $db->Error();
print STDERR "\nERROR: $Message\n";
exit;
}

#-- Establish loop to process each row in the result set for the SELECT.
while ($db->FetchRow()) {
#-- Get one row from result set for SELECT statement and
#-- then store that row's columns as one hash. Hash key is
#-- column name and hash value is the column value.
%HashRow = $db->DataHash();

#-- Process each column in a row. In this case, just print them.
while ( ($Column, $Value) = each(%HashRow) ) {
print STDERR "Column '$Column' = '$Value'\n";
}
print STDERR "\n";
}

$db->Close() || die Win32::ODBC::Error();

exit;</font id="Courier New">

Hope this help


[b]quote:Originally posted by Precision

Does anyone know how I can connect to a MS Access database using PERL? I'm not sure if i have the connection string correct or not, I have set up my ODBC Tool like this:

DSN: precisionse_Articles
Path: \database\Lightscatter.mdb

and the PERL script:

my $dbfile = "e:\web\precisionse\htdocs\database\Lightscatter.md b";
$DBIConn = "dbi:ODBC:precisionse_Articles";
my $dbh = DBI->connect($DBIConn) or die "$DBI::errstr\n";

If anyone could help I would really appreciate it! Thanks for your time!

Simon

</blockquote id="quote"></font id="quote">