IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

4D Discussion :

4D OCI - Problème avec OCIBindByName


Sujet :

4D

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut 4D OCI - Problème avec OCIBindByName
    Bonjour,

    J'ai un problème quand même assez important avec les OCI, pour une raison que j’ignore complètement, les « OCIBindByName » ont cessé de fonctionner! Du code qui fonctionnait parfaitement la semaine dernière ne fonctionne plus et pourtant rien n’a été changé!

    Plus en détail, pour mettre à jour un enregistrement Oracle, je construis une requête comme celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $vlRequeteSql:="UPDATE INT_FICHES_INSP SET CD_STATUT_FICHE=:StatutFiche"
    $vlRequeteSql:=$vlRequeteSql+", DT_STATUT_FICHE=:DateStatut, REM_STATUT_FICHE=:RemarqStatut"
    $vlRequeteSql:=$vlRequeteSql+", SMI_NO_FICHE=:NoFicheSMI"
    $vlRequeteSql:=$vlRequeteSql+" WHERE ID = "+[Fiche_Bloc_00]B00_Code_Externe
    $vlRequeteSql:=$vlRequeteSql+" AND SEF_DT_VIGUEUR = '"+Chaine([Fiche_Bloc_00]Portable_Date_Prise_Effet_Debut;Format court )+"'"
    Les « Bind » sont créés de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $vlStatut:=OCIBindByName (vpstmthp;vpbind;vperrhp;":StatutFiche";->vpTabStatutFiche;SQLT_STR ;->vpnull_ind1;->vpnull_ind2;->vpnull_ind3;OCI_DEFAULT ;BIND_IN )
    $vlStatut:=OCIBindByName (vpstmthp;vpbind;vperrhp;":DateStatut";->vpTabDateStatut;SQLT_ODT ;->vpnull_ind1;->vpnull_ind2;->vpnull_ind3;OCI_DEFAULT ;BIND_IN )
    $vlStatut:=OCIBindByName (vpstmthp;vpbind;vperrhp;":RemarqStatut";->vpTabRemarqueStatut;SQLT_STR ;->vpnull_ind1;->vpnull_ind2;->vpnull_ind3;OCI_DEFAULT ;BIND_IN )
    $vlStatut:=OCIBindByName (vpstmthp;vpbind;vperrhp;":NoFicheSMI";->[Fiche_Bloc_00]Numero_Fiche;SQLT_INT ;->vpnull_ind1;->vpnull_ind2;->vpnull_ind3;OCI_DEFAULT ;BIND_IN )
    Tout est déclaré et contient une valeur et les types sont corrects. J'ai déjà lu plusieurs fois la note technique sur l'introduction aux OCI et les commendent sont supposées correspondre.

    Lorsque la requête est exécutée (avec OCIStmtExecute), l’enregistrement est trouvé mais n’est pas mis à jour avec les valeurs des variables qui sont dans les « Bind »… et si l’un des champs avait déjà une valeur avant l’exécution de la requête, il devient vide ! Le problème devrait donc venir du OCIBindByName puisque le lien entre les variables de la requête et celles du « Bind » ne se fait pas. J'ai également essayé avec OCIBindByPos et ça ne fonctionne pas non plus.

    Avez-vous déjà connu un problème semblable ?

    De quelle façon régler le problème ??

    L'environnement utilisé : 4D 2003.8 (client/serveur) sous Windows et Oracle 10g


    Des fois que les exemples plus haut ne suffisent pas, voici une méthode un peu plus simple que j’utilise pour faire des tests. Elle crée un enregistrement et ensuite va essayer de le modifier… la création fonctionne mais pas la modification.

    Merci à l'avance pour votre aide!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    C_TEXTE($vlRequeteSql;$vlMsgErreur)
    C_ENTIER LONG($vlTableTraitee)
    C_ENTIER LONG($vlStatus;vperrhp;$vlstmthp;vpbind)
    C_ENTIER LONG(vpnull_ind1;vpnull_ind2;vpnull_ind3)
     
    TABLEAU ALPHA(10;vpTabStatutFiche;1)
     
    $vlMsgErreur:=Oracle_Connexion_OCI `Méthode utilisée pour la connexion à Oracle
     
     
    $vlRequeteSql:="INSERT INTO INT_FICHES_INSP (ID) VALUES (120)"
     
     
    $vlStatus:=OCIHandleAlloc (<>envhp;$vlstmthp;OCI_HTYPE_STMT )
    $vlStatus:=OCIHandleAlloc (<>envhp;vperrhp;OCI_HTYPE_ERROR )
     
    $vlStatus:=OCIStmtPrepare ($vlstmthp;vperrhp;$vlRequeteSql;OCI_DEFAULT )
    $vlErreur:=OCIErrorGet (vperrhp;1;$Numer;$Contents)
     
    $vlStatus:=OCIStmtExecute (<>svchp;$vlstmthp;vperrhp;1;0;0;0;OCI_DEFAULT )
    $vlErreur:=OCIErrorGet (vperrhp;1;$Numer;$Contents)
     
    $vlStatus:=OCITransCommit (<>svchp;vperrhp;0)
    $vlErreur:=OCIErrorGet (vperrhp;1;$Numer;$Contents)
     
    $vlStatus:=OCIHandleFree ($vlstmthp)
    $vlStatus:=OCIHandleFree (vperrhp)
     
     
     
    Si (($vlStatus#0)*|*($Contents#""))
    	ALERTE("Erreur prepare 1 - statut "+Chaine($vlStatus)+" : "+$Contents)
     
    Sinon 
     
    	TABLEAU ALPHA(10;vpTabStatutFiche;1)
    	vpTabStatutFiche{1}:="TEST3"
     
    	$vlRequeteSql:="UPDATE INT_FICHES_INSP SET CD_STATUT_FICHE=:StatutFiche WHERE ID = 120"
     
    	$vlStatus:=OCIHandleAlloc (<>envhp;$vlstmthp;OCI_HTYPE_STMT )
    	$vlStatus:=OCIHandleAlloc (<>envhp;vperrhp;OCI_HTYPE_ERROR )
     
    	$vlStatus:=OCIStmtPrepare ($vlstmthp;vperrhp;$vlRequeteSql;OCI_DEFAULT )
    	$vlErreur:=OCIErrorGet (vperrhp;1;$Numer;$Contents)
     
     
    	$vlStatut:=OCIBindByName ($vlstmthp;vpbind;vperrhp;":StatutFiche";->vpTabStatutFiche;SQLT_STR ;->vpnull_ind1;->vpnull_ind2;->vpnull_ind3;OCI_DEFAULT ;BIND_IN )
     
     
    	$vlStatus:=OCIStmtExecute (<>svchp;$vlstmthp;vperrhp;1;0;0;0;OCI_DEFAULT )
    	$vlErreur:=OCIErrorGet (vperrhp;1;$Numer;$Contents)
     
    	$vlStatus:=OCITransCommit (<>svchp;vperrhp;0)
    	$vlErreur:=OCIErrorGet (vperrhp;1;$Numer;$Contents)
     
    	$vlStatus:=OCIHandleFree ($vlstmthp)
    	$vlStatus:=OCIHandleFree (vperrhp)
     
    Fin de si 
     
    $vlMsgErreur:=Oracle_Deconnexion_OCI `Méthode utilisée pour la déconnexion

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    359
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 359
    Points : 613
    Points
    613
    Par défaut
    Bonjour,

    essayez ceci :

    Remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C_LONGINT(vpnull_ind1;vpnull_ind2;vpnull_ind3)
    $vlStatut:=OCIBindByName ($vlstmthp;vpbind;vperrhp;":StatutFiche";->vpTabStatutFiche;SQLT_STR ;->vpnull_ind1;->vpnull_ind2;->vpnull_ind3;OCI_DEFAULT ;BIND_IN )
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C_POINTER(pnull1;pnull2;pnull3)
    $vlStatut:=OCIBindByName ($vlstmthp;vpbind;vperrhp;":StatutFiche";->vpTabStatutFiche;SQLT_STR ;pnull1;pnull2;pnull3;OCI_DEFAULT ;BIND_IN )
    pour tous les bind.
    --Steph4D

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Le problème venait vraiment de là, après avoir fait la modification suggérée, ça fonctionne à nouveau

    Je me questionne tout de même sur les raisons qui faisaient que ça fonctionnait la semaine dernière mais bon... au moins ça fonctionne maintenant.

    Merci!!!!!!!!!!!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [tomcat] [jsp] Problème avec driver OCI pour oracle
    Par nanardcompanie dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 01/07/2004, 09h54
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo