Bug

Signaler
Messages postés
3
Date d'inscription
mercredi 11 avril 2007
Statut
Membre
Dernière intervention
25 avril 2007
-
Messages postés
3
Date d'inscription
mercredi 11 avril 2007
Statut
Membre
Dernière intervention
25 avril 2007
-
Bonjour à tous,
je suis debutant et je doit corriger une erreur,
l'application bug sur cette petite partie en m'affichant l'erreur qui est dans ce sprintf,quelqu'un pourais t-il m'expliqué ce qui se passe dans ce bout de programme?et m'aider?help

res = table2( num_dossier );
    if ( res ) {
        sprintf( message, "erreur sur %d\n", num_dossier);
        msg( SOURCE, 3, NUM_SEQ++, "W", message );
        EXEC SQL COMMIT WORK RELEASE;
        return (ERREUR);
merci de votre aide.

5 réponses

Messages postés
15012
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
12 avril 2021
94
Ah bah là, comme ça, on ne pas trop t'aider.
D'après le code, la fonction table2 retourne un code non nul. Faudrait voir le code de la fonction...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
178
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
25 août 2010
1
Bon, apparament tu fais du proc*c Oracle...

sprintf plante si num_dossier n'est pas un int ou si message n'est pas un char * valide (pointeur nul ,buffer trop petit, ..)...

Poste plus de code...
Messages postés
3
Date d'inscription
mercredi 11 avril 2007
Statut
Membre
Dernière intervention
25 avril 2007

Bonjou à tous
tout d'abord merci;

voici plus de code,help

char  message[120];

 

int main (int argc, char
**argv)

 

{

      shortnum_dossier;

      int         num_demande;     

      int         res;

res = table2(
num_dossier );

      if ( res )
{

            sprintf( message, "erreur sur %d\n",
num_dossier);

            msg( SOURCE, 3, NUM_SEQ++, "W",
message );

            /* EXEC SQL COMMIT WORK RELEASE; */

  

            return
(ERREUR);

Et  pour table2:

short table2( short num_dossier )

{

      EXEC
SQL BEGIN DECLARE SECTION;

            shorti5;

            char  table_element[8+1];

            char
requete[512];

      EXEC
SQL END DECLARE SECTION;

 

 

      i5
= num_dossier;

 

      EXEC
SQL

            select
p99

            into
:table_element

            from
table99

            where
i99fmo71 =

                  (select
e50fmo71

                   from table50

                   where i5 = :i5)

            and
i99std99 =

                  (select
e50std99

                   from table50

                   where i5 = :i5);

 

      if
( sqlca.sqlcode ) {

            if
( sqlca.sqlcode == 100 ) {

                  EXEC
SQL rollback;

                  sprintf(
message, "Nom de la table des elements du dossier %d introuvable",
num_dossier );

                  msg( SOURCE, 1, NUM_SEQ++, "E", message );

            }

            else
{

                  sql_msg(SOURCE,2);

      }

            return(
ERREUR );

      }

 

      strcpy(TAB_ELEMENT,
table_element);/* Mise a jour de la var
globale */

 

 

      sprintf( requete, "delete %s where i41 = %d
", table_element, num_dossier);

 

      EXEC
SQL EXECUTE IMMEDIATE :requete;

     

      if
( sqlca.sqlcode && (sqlca.sqlcode != 100)) {

            sql_msg(SOURCE,3);

            return(
ERREUR );

      }

 

 

      EXEC SQL

            delete
pegt0040

            where
i40 = :i5;

 

      if
( sqlca.sqlcode  &&
(sqlca.sqlcode != 100)) {

            sql_msg(SOURCE,4);

            return(
ERREUR );

      }

 

      return(SUCCES);

 

}
Messages postés
178
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
25 août 2010
1
  la variable  'num_dossier' n'est pas initialisée
 
Messages postés
3
Date d'inscription
mercredi 11 avril 2007
Statut
Membre
Dernière intervention
25 avril 2007

bonsoir,
je ne comprend pas trop car j'ai pas large connaissance en prog:
mais ces lignes:
     i5 = num_dossier; et short num_dossier;? ne suffisent pas?
et pourtant dans l'appli,j'ai un nouveau numero de dossier à chaque manipulation .il me renvoi par exemble <erreur sur 35 >. dois je faire un : num_dossier = 0 par exemple?
 et puis une chose me trouble;quand je fait une precompilation de proc oracle mon fichier exe est généré par proc oracle ou visual car en essayant de modifier et de précompiler j'ai aucun fichier exe qui bouge?dois je encor compiler en visualc++ pour enfin avoir un exe?
j'avoue que j'ai du mal.help