Jez <[EMAIL PROTECTED]> wrote:

> My perl code looks like this;
> 
> use DBI;
> use warnings;

You should probably "use strict;" aswell and
declare your variables before/when you use them
with "my".

> #open connection to Access database
> $dbh = DBI->connect('dbi:ODBC:Deliveries');
> 
> #construct SQL statement
> $sqlstatement=
> "SELECT DestinationAddress,CustomerContactNumber
> FROM DeliveryScheule
> WHERE DeliveryID = \"6636\"\n";

This is ugly. When you want quotes withing quotes,
you should use the qq operator like

my $string = qq( Look Ma! No "backslash"! );

In any case, DeliveryID seems to be a number - so
unless you're certain it's defined as a string,
you should probably get rid of the quotes.

> print "SQL:"."\n".$sqlstatement."\n";

Strings with double quotes will do interpolation,
so you don't have to piece it together.

print "SQL:\n$sqlstatement\n";

> #prepare and execute SQL statement
> $sth = $dbh->prepare($sqlstatement);
> $sth->execute ||
> die "Could not execute SQL statement, maybe invalid?";
> 
> #Put the results in an array
> [EMAIL PROTECTED]>fetchrow_array;
> ($DestinationAddress,$CustomerContactNumber)=$sth->fetchrow_array;

I suggest using the all-in-one commands:

if( my $ref = $dbh->fetchall_arrayref( $sqlstatement ) ){
  foreach my $r (@$ref){
    my($DestinationAddress,$CustomerContactNumber) = @$r;
    # do something
  }
} else {
  die "DBI error: " . $dbh->errstr;
}

> When I take my printed SQL statement (from the print 
> "SQL:"."\n".$sqlstatement."\n"; line) then Copy and Paste 
> into MS Access as a SQL query - all is fine - I get my 
> expected result. What's going on?

The Access SQl parser is maybe a bit more forgiving than
the SQL parser in the ODBC module?

HTH,
Thomas

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to