Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

hey everyone, as you can plainly see. Im having problems with this script. Here is the generated error that i am recieving

Can't call method "execute" on an undefined value at c:\foxserv\apache\cgi-bin\access.pl line 8.
and heres the code
#!C:/Perl/bin/perl.exe use CGI qw(:standard); use CGI; use CGI::Carp "fatalsToBrowser"; use DBI; $dbh=DBI->connect("dbi:ODBC:'driver=Microsoft Access Driver (*.mdb); d +bq=test.mdb'",'',''); $sth=$dbh->prepare("SELECT * FROM table1"); $sth->execute(); print header(); @information = $sth->fetchrow_array; foreach $test (@information){ print $test; print "\n<br>\n"; } $sth->finish; $dbh->disconnect;
can someone please point me in the right direction??

Replies are listed 'Best First'.
Re: problems with ODBC...
by dws (Chancellor) on Jan 29, 2002 at 02:53 UTC
    can someone please point me in the right direction??

    The first stop along the right direction is Check Return Values and Error Codes. At the surface level, prepare() has failed to produce a statement handle object. But you won't know why until you ask DBI. DBI is very willing to tell you, if you'll only ask it. Consult the DBI documentation for the various ways to do this.

    I'm not giving a direct answer based on the belief that Reading the Fine Documentation will benefit you more in the long run.

Re: problems with ODBC...
by Chmrr (Vicar) on Jan 29, 2002 at 02:56 UTC

    Your prepare statement is failing for some reason, and hence returning an undef $sth Make your connect line the following, and it'll tell you what's wrong:

    $dbh=DBI->connect("dbi:ODBC:'driver=Microsoft Access Driver (*.mdb); d +bq=test.mdb'", '', '', {RaiseError=>1} );

    perl -pe '"I lo*`+$^X$\"$]!$/"=~m%(.*)%s;$_=$1;y^`+*^e v^#$&V"+@( NO CARRIER'

      now im getting this error
      DBI->connect('driver=Microsoft Access Driver (*.mdb); dbq=test.mdb') f +ailed: [Microsoft][ODBC Driver Manager] Invalid string or buffer leng +th (SQL-S1090)(DBD: db_login/SQLConnect err=-1) at c:\foxserv\apache\ +cgi-bin\access.pl line 7
      i still dont know what this means
        Sounds like your connect string isn't correct. I found  $dbh = DBI->connect("DBI:ODBC:$odbc", $user, $pass); where $odbc is the name given to a system DSN that you set through the control panel. $user = username $pass = password - recommended in a reply elsewhere (credit to Ian Summers). If that doesn't work I'd suggest looking up docs on DBI on the connect string.

        'Fect
      well, ive modified my code slightly, and this is the error that im getting now
      Can't locate object method "execute" via package "DBI::db" (perhaps yo +u forgot to load "DBI::db"?) at c:\foxserv\apache\cgi-bin\access2.pl +l +ine 12.
      and heres what my code looks like
      #!C:/Perl/bin/perl.exe use CGI::Carp "fatalsToBrowser"; use CGI qw(:standard); use DBI; print header(); my $DSN = 'driver=Microsoft Access Driver (*.mdb);dbq=C:/FoxServ/Apach +e/cgi-bin/test.mdb'; my $dbh = DBI->connect("dbi:ODBC:$DSN", '','') or die "$DBI::errstr\n"; $dbh->execute(); @information = $dbh->fetchrow_array; foreach $test (@information){ print $test; print "\n<br>\n"; } $dbh->disconnect; $dbh->finish;
      perhaps someone could email me? ryan@lonegamers.com what do i do?