Perl et DBI Sybase - Perl - Programmation
Marsh Posté le 02-08-2005 à 23:40:33
la method finish n'est normalement pas utile: elle n'as d'utiliser que pour abandonner une requete non terminée (par exemple si il reste des rows).
Marsh Posté le 03-08-2005 à 12:24:16
Donc comment annulé un prepare d'une requete sans fermer la connexion.
Marsh Posté le 03-08-2005 à 12:55:05
comment ca annuler un prepare?
Tu veut dire que tu n'a plus besoin du $sth?
Et bien tu peux le réassigner ou le rendre egal à undef, et il sera detruit automatiquement (garbage collection).
Marsh Posté le 03-08-2005 à 14:14:47
ben je le pensai aussi mais apparement il y a eu des changement raissement car le code que je mis au dessus marchait avant et ne marche plus avec la derniere version Sybase 12 et DBI 1.05
Marsh Posté le 03-08-2005 à 15:26:00
dans le release note ils disent:
Citation : BEHAVIOR CHANGE - $dbh->{LongReadLen} must now be called |
ca pourrait avoir un rapport avec ton probleme?
je ne connais pas du tout cette base la, donc si c'est pas un probleme generic de DBI je pourrais pas t'aider
Marsh Posté le 03-08-2005 à 15:26:58
dans tous les cas si ca marchait avec une ancienne version retrouve le numero de cette version et regarde ce qui aurait pu changer: http://search.cpan.org/src/MEWP/DB [...] 05/CHANGES
Marsh Posté le 03-08-2005 à 16:32:14
Merci pour l'info. Mais moi je n'ai jamais utiliser l'insturction: $dbh->{LongReadLen}
Marsh Posté le 02-08-2005 à 16:46:00
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();