I have a query that returns '3' (the correct answer) when I paste
the SQL into an Access Query and run it. However, the same query
returns '0' when I run it using DBD::ODBC. Can anyone please
help me find why?
Here is the simple test script:
_________________________________________________
use warnings;
use strict;
use DBI;
$| = 1;
DBI->trace(3,'trace.log');
my $DSN = 'driver=Microsoft Access Driver (*.mdb);dbq=BLAH.mdb';
my $dbh = DBI->connect("dbi:ODBC:$DSN", '', '', {RaiseError =>
1})
or die "Couldn't connect!";
my $count = $dbh->selectrow_array(<<"");
SELECT Count(YOQsScheduledCode)
FROM (
SMSMaster INNER JOIN tblYOQsScheduled
ON SMSMaster.AccountNum =
tblYOQsScheduled.SMSAccountNum
) INNER JOIN tlkpSiteIDNurseStation
ON SMSMaster.NurseStation =
tlkpSiteIDNurseStation.NurseStation
WHERE tlkpSiteIDNurseStation.Identifier = '1018'
AND ScheduledDate >= #2001-01-01#
AND ScheduledDate <= #2001-03-25#
AND ScheduledRespondents LIKE '*4*'
print "count: $count\n";
$dbh->disconnect;
_________________________________________________
Here is the trace:
_________________________________________________
DBI 1.14-nothread dispatch trace level set to 3
-> DBI->connect(dbi:ODBC:driver=Microsoft Access Driver
(*.mdb);dbq=BLAH.mdb, , ****, HASH(0x176f010))
-> DBI->install_driver(ODBC) for perl=5.006 pid=673689 ruid=0
euid=0
install_driver: DBD::ODBC loaded (version 0.28)
New DBI::dr (for DBD::ODBC::dr, parent=, id=)
dbih_setup_handle(DBI::dr=HASH(0x18328f8)=>DBI::dr=HASH(0x17f1080
), DBD::ODBC::dr, 0, Null!)
dbih_make_com(Null!, DBD::ODBC::dr, 92)
<- install_driver= DBI::dr=HASH(0x18328f8)
-> connect for DBD::ODBC::dr
(DBI::dr=HASH(0x18328f8)~0x17f1080 'driver=Microsoft Access
Driver (*.mdb);dbq=BLAH.mdb' '' **** HASH(0x17650d0))
New DBI::db (for DBD::ODBC::db,
parent=DBI::dr=HASH(0x17f1080), id=)
dbih_setup_handle(DBI::db=HASH(0x17f1020)=>DBI::db=HASH(0x17f1044
), DBD::ODBC::db, 183264c, Null!)
dbih_make_com(DBI::dr=HASH(0x17f1080), DBD::ODBC::db, 92)
Driver connect 'driver=Microsoft Access Driver
(*.mdb);dbq=BLAH.mdb', '', ''
<- connect= DBI::db=HASH(0x17f1020) at DBI.pm line 408.
-> STORE for DBD::ODBC::db (DBI::db=HASH(0x17f1044)~INNER
'RaiseError' 1)
STORE DBI::db=HASH(0x17f1044) 'RaiseError' => 1
<- STORE= 1 at DBI.pm line 433.
-> STORE for DBD::ODBC::db (DBI::db=HASH(0x17f1044)~INNER
'PrintError' 1)
STORE DBI::db=HASH(0x17f1044) 'PrintError' => 1
<- STORE= 1 at DBI.pm line 433.
-> STORE for DBD::ODBC::db (DBI::db=HASH(0x17f1044)~INNER
'AutoCommit' 1)
<- STORE= 1 at DBI.pm line 433.
<- connect= DBI::db=HASH(0x17f1020)
-> selectrow_array in DBD::_::db for DBD::ODBC::db
(DBI::db=HASH(0x17f1020)~0x17f1044 ' SELECT
Count(YOQsScheduledCode)
FROM (
SMSMaster INNER JOIN tblYOQsScheduled
ON SMSMaster.AccountNum =
tblYOQsScheduled.SMSAccountNum
) INNER JOIN tlkpSiteIDNurseStation
ON SMSMaster.NurseStation =
tlkpSiteIDNurseStation.NurseStation
WHERE tlkpSiteIDNurseStation.Identifier = '1018'
AND ScheduledDate >= #2001-01-01#
...')
2 -> prepare for DBD::ODBC::db (DBI::db=HASH(0x17f1044)~INNER '
SELECT Count(YOQsScheduledCode)
FROM (
SMSMaster INNER JOIN tblYOQsScheduled
ON SMSMaster.AccountNum =
tblYOQsScheduled.SMSAccountNum
) INNER JOIN tlkpSiteIDNurseStation
ON SMSMaster.NurseStation =
tlkpSiteIDNurseStation.NurseStation
WHERE tlkpSiteIDNurseStation.Identifier = '1018'
AND ScheduledDate >= #2001-01-01#
...' undef)
New DBI::st (for DBD::ODBC::st,
parent=DBI::db=HASH(0x17f1044), id=)
dbih_setup_handle(DBI::st=HASH(0x17f0ff0)=>DBI::st=HASH(0x17650b8
), DBD::ODBC::st, 17f1014, Null!)
dbih_make_com(DBI::db=HASH(0x17f1044), DBD::ODBC::st, 164)
dbd_st_prepare'd sql f27918464
SELECT Count(YOQsScheduledCode)
FROM (
SMSMaster INNER JOIN tblYOQsScheduled
ON SMSMaster.AccountNum =
tblYOQsScheduled.SMSAccountNum
) INNER JOIN tlkpSiteIDNurseStation
ON SMSMaster.NurseStation =
tlkpSiteIDNurseStation.NurseStation
WHERE tlkpSiteIDNurseStation.Identifier = '1018'
AND ScheduledDate >= #2001-01-01#
AND ScheduledDate <= #2001-03-25#
AND ScheduledRespondents LIKE '*4*'
2 <- prepare= DBI::st=HASH(0x17f0ff0) at DBI.pm line 938.
-> execute for DBD::ODBC::st
(DBI::st=HASH(0x17f0ff0)~0x17650b8)
dbd_st_execute (for sql f27918464 after)...
dbd_describe sql 27918464: num_fields=1
col 1: INTEGER len= 4 disp= 12, prec= 10 scale=0
col 1: 'Expr1000' sqltype=INTEGER, ctype=SQL_C_CHAR,
maxlen=12
<- execute= -1 at DBI.pm line 941.
-> fetchrow_array for DBD::ODBC::st
(DBI::st=HASH(0x17f0ff0)~0x17650b8)
SQLFetch rc 0
dbih_setup_fbav for 1 fields => 0x176f0f4
fetch num_fields=1
<- fetchrow_array= ( '0' ) [1 items] at DBI.pm line 942.
-> finish for DBD::ODBC::st
(DBI::st=HASH(0x17f0ff0)~0x17650b8)
<- finish= 1 at DBI.pm line 943.
<- selectrow_array= '0' at test.pl line 12.
<> DESTROY ignored for outer handle DBI::st=HASH(0x17f0ff0)
(inner DBI::st=HASH(0x17650b8))
-> DESTROY for DBD::ODBC::st (DBI::st=HASH(0x17650b8)~INNER)
<- DESTROY= undef at test.pl line 24.
-> disconnect for DBD::ODBC::db
(DBI::db=HASH(0x17f1020)~0x17f1044)
<- disconnect= 1 at test.pl line 25.
<> DESTROY ignored for outer handle DBI::db=HASH(0x17f1020)
(inner DBI::db=HASH(0x17f1044))
-> DESTROY for DBD::ODBC::db (DBI::db=HASH(0x17f1044)~INNER)
<- DESTROY= undef at unknown location!
-- DBI::END
-> disconnect_all for DBD::ODBC::dr
(DBI::dr=HASH(0x18328f8)~0x17f1080)
<- disconnect_all= '' at DBI.pm line 450.
-> DESTROY in DBD::_::common for DBD::ODBC::dr
(DBI::dr=HASH(0x17f1080)~INNER)
<- DESTROY= undef during global destruction.
<> DESTROY for DBI::dr=HASH(0x18328f8) ignored (inner handle
gone)
_________________________________________________
If I cut and paste the "prepared" SQL from the trace log into an
Access Query the result is '3'. This is the correct result.
Thank You for any help!
Phil R Lawrence