J'ai un soucis avec l'utilisation de l'instruction $sth->finish() et du coup je voudrais connaitre l'exacte action de cette derniere.
Pour moi quand je fais un finish de ma variable $sth, je libere la variable et je peux l'utiliser pour preparer une nouvelle requête. Malheureusement dans mon programe voila se qui se passe:
DEBUG1:Sybase Client-Library/12.0/P/hpux/HP-UX 11.00/1/OPT/Mon Oct 4 12:45:27 1999
Panic: Can't have multiple statement handles on a single database handle when AutoCommit is OFF at /appli/arbaop1/arbor91/tools/perl-5.8.3/lib/site_perl/5.8.3/9000/800-hpux/DBD/Sybase.pm line 133.
Je peux resoudre le problème en utilisant l'autocommit mais je voudrai que cela fonctionne dans tout les cas.
Quelqu'un peut il m'eclairer sur mon problème?
Merci d'avance.
Je suis sous:
perl v5.8.3
DBI 1.05
DBD 1.48
Adaptive Server Enterprise/12.0.0.8/P/EBF 12448 ESD4/HP9000-879/HP-UX 11.0/2079/64bit/FBO/
Voici un programme simplifier qui resume mon problème:
#!/usr/bin/env perl
use DBI;
use DBD::Sybase;
$p_login = "toto";
$p_password = "tutu";
$p_server = "myserv";
$p_database = "mydatabase";
$dbh1 = DBI->connect("dbi:Sybase:server=$p_server;database=$p_database;charset=iso_1", $p_login, $p_password, { AutoCommit => 0 });
if ( !$dbh1 )
{
printf "ERROR: pb de connection a la base 1: $p_server,$p_database,$p_login,$p_password\n";
exit(1);
}
print "DEBUG1:$dbh1->{syb_oc_version}\n";
$query1 = "SELECT * FROM my_table";
$sth1 = $dbh1->prepare($query1);
if (!$sth1)
{
print "prepare statement error 1:".$dbh->errstr."\n";
$dbh1->disconnect();
exit(1);
}
$sth1->finish();
$sth1 = $dbh1->prepare($query1);
if (!$sth1)
{
print "prepare statement error 1:".$dbh->errstr."\n";
$dbh1->disconnect();
exit(1);
}
if (!$sth1->execute())
{
print "execute statement error 1".$dbh->errstr."\n";
$dbh1->disconnect();
exit(1);
}
$sth1->finish();
$dbh1->disconnect();