Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1274 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Perl et DBI Sybase

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Perl et DBI Sybase

n°1168084
mandracke7​6
Posté le 02-08-2005 à 16:46:00  profilanswer
 

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();

mood
Publicité
Posté le 02-08-2005 à 16:46:00  profilanswer
 

n°1168390
pospos
Posté le 02-08-2005 à 23:40:33  profilanswer
 

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).

n°1168776
mandracke7​6
Posté le 03-08-2005 à 12:24:16  profilanswer
 

Donc comment annulé un prepare d'une requete sans fermer la connexion.

n°1168805
pospos
Posté le 03-08-2005 à 12:55:05  profilanswer
 

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).

n°1168881
mandracke7​6
Posté le 03-08-2005 à 14:14:47  profilanswer
 

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

n°1168998
pospos
Posté le 03-08-2005 à 15:26:00  profilanswer
 

dans le release note ils disent:

Citation :

BEHAVIOR CHANGE - $dbh->{LongReadLen} must now be called
 before $dbh->prepare(). Previously you could call this after
 the $dbh->prepare() but before the $sth->execute().


 
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

n°1169000
pospos
Posté le 03-08-2005 à 15:26:58  profilanswer
 

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

n°1169066
mandracke7​6
Posté le 03-08-2005 à 16:32:14  profilanswer
 

Merci pour l'info. Mais moi je n'ai jamais utiliser l'insturction: $dbh->{LongReadLen}


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Perl et DBI Sybase

 

Sujets relatifs
Appel d'un JS en PerlSent items en Perl
SYBASE: comment convertir une date en un autre format date?[perl]tableaux dynamiques
sha-bang : #!perlPERL VS C,C++,...
[perl] lire un fichier à l'envers[Perl] Timeout sur socket
SIGPIPE, perl et Win32perl avec sql server 2000
Plus de sujets relatifs à : Perl et DBI Sybase


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR