Here's two snippets of code to get you started, as well. I've been working on this very issue recently! The first connects using DBI::ADO, but works the same for DBI::ODBC with one caveat, as noted below. Also, I'm doing something fairly complex, with making a array of hashs holding the data. The docs for both modules can tell you how to get simpler forms of the data, if you wish:
use strict;
use DBI;
$| =1;
my @sites;
#This below can be changed to 'dbi:ODBC:<name>'
#provided you have DBI::ODBC installed
#I'm testing both, and have both installed
#They "feel" fairly interchangable
my $dbh = DBI->connect('dbi:ADO:Name', undef, undef, {PrintError => 1,
+ RaiseError => 1});
#The two lines below are for use with DBI::ODBC
#with BLOB, aka MEMO fields with large amounts of data.
#Look in the docs for the modules for more on them
#$dbh->{LongReadLen} = 65534;
#$dbh->{LongTruncOk} = 1;
my $sth = $dbh->prepare('SELECT * FROM tbldata');
$sth->execute;
#dump_results is very good for testing,
#and even for simple apps -- you don't need to
#loop the results, just print out $results
#my $results = DBI::dump_results($sth);
#One of the nice things about DBI is the wide
#variety in gives you in retrieving data
while (my $results = $sth->fetchrow_hashref) {
push @sites, $results;
}
Now for the Win32::ODBC version -- less commentary, as it's a little less flexible, but more obvious (IMHO):
use Win32::ODBC;
my @rows;
my $DSN = "Name";
if (!($db = new Win32::ODBC($DSN))){
print "error connecting to $DSN\n";
print "error: " . Win32::ODBC::Error() . "\n";
exit;
}
die qq(SQL failed: ), $db->Error(), qq(\n) if ($db->Sql("SELECT * FROM
+ tbldata"));
while ($db->FetchRow()) {
my %data = $db->DataHash();
push @rows, {%data};
}
In general, I'd use DBI unless you have need of Win32::ODBC's features, but please look over both.
----Asim
Edited by footpad, ~Sun Jan 6 04:48:47 2002 (GMT): Added <CODE> and <P> tags. |