Hi all,
I have a strange problem. I have a script that runs a series of queries &
writes the results to files. The core part of this script looks like:
for (my $i = 1; $i < 7; $i++) {
process(635, 'T', $i);
process(635, 'C', $i);
process(635, 'A', $i);
process(532, 'T', $i);
process(532, 'C', $i);
process(532, 'A', $i);
}
Now, that sub function, process($$$) checks the input parameters and
chooses the correct statement-handle based on that. For instance:
if ($_[0] == 532) {
if ($_[1] eq 'A') {
$sth = $sth_crosstab_all;
}
else {
$sth = $sth_crosstab;
}
}
The sub then goes ahead and does gets the data from $sth.
I should mention here that the queries being run are all crosstab queries
(MS-Access queries that aggregate data by two variables, much like a pivot
table in Excel).
The strange part is this:
- all queries work individually
- if I set the program running, it works for one full loop and then dies
midway through the second loop
As a result, to accomplish my for loop 6 times, I have to run the program
six different times!
The error message is:
DBD::ODBC::st execute failed: [Microsoft][ODBC Microsoft Access Driver]
Operation is not supported for this type of object. (SQL-S1000)(DBD:
st_execute/SQLExecute err=-1) at get_all_mm_data.pl line 204.
DBD::ODBC::st execute failed: [Microsoft][ODBC Microsoft Access Driver]
Operation is not supported for this type of object. (SQL-S1000)(DBD:
st_execute/SQLExecute err=-1) at get_all_mm_data.pl line 204.
And to further add to my confusion, lines 204-206 are:
if ($_[1] eq 'T') {
$sth->execute($_[2], 0);
}
And the error is coming on line 204 -- at the start of the if-statement.
Finally, let me repeat -- each query works perfectly individually.
Further, if the entire program will successfully run through one complete
iteration of the for {} loop each time, before crashing during the second
iteration.
Any suggestions, ideas, or guidance on this would be extremely welcome!
One confused programmer,
Paul