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

C Discussion :

Segmentation fault : comment lire le résultat du débug ?


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Par défaut Segmentation fault : comment lire le résultat du débug ?
    Bonjour,

    je travaille sur un AIX 5.3 64 bits et utilise le compilateur C xlc..

    j'ai un programme C nommé BONJOUR.c qui compile !!

    Mais quand je l'exécute j'ai cette erreur qui apparaît :
    Segmentation fault(coredump)
    Heureusement j'avais compilé avec l'option -g et donc je peux utiliser dbx.

    Je fais donc :

    j'obtiens :

    dbx BONJOUR
    Type 'help' for help.
    Core file "core" is older than current program (ignored)
    reading symbolic information ...
    je lance :
    L’erreur d’exécution du programme C apparaît alors :

    Segmentation fault in sqlglmt at 0x90000000439d828 ($t1)
    0x90000000439d828 (sqlglmt+0x94) 9c030001 stbu r0,0x1(r3)
    Mais je n'arrive à comprendre...que signifie sqlglmt ? quel fichier est concerné ?

    S'il vous plaît aidez-moi

  2. #2
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    Peux tu poster le code de ton fichier .c?

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 778
    Par défaut
    et la sortie 'bt' de dbx?

    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Par défaut
    voici le code :

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
     
     
    /* Includes files */
    /******************/
     
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    #include <time.h>
    #include <stdlib.h>
    #include <ss10_common.h>
    #include <ss10_common_db.h>
    #include <ss10_SAP_extract.h>
     
    /* Constants */
    /*************/
     
    #define fANALYZE(iErr) \
    if(iError)\
       {\
       iError = iErr;\
       fTraceLog(iError, acErrOra);\
    \
       /* Disconnet from databases */\
       fExitProg(iError);\
       }
     
    /* Globals variables */
    /*********************/
     
    static FILE *gfResult;
    static char *gpcResult;
     
    static char *gpcDebug;
     
    /****************************************************************/
    /*                                                              */
    /* Function : fExitProg                                         */
    /*                                                              */
    /* Description    : Free memory and exit program                */
    /*                                                              */
    /****************************************************************/
     
    void fExitProg(iErr)
    int iErr;
    {
    int iRang;
    char acMessage[200];
    time_t sDate;
     
    if(iErr)
       {
       /* Deconnexion local */
       fRollbackEnd(NULL);
       time(&sDate);
       sprintf(acMessage, "ACMM extraction for SAP aborted at %s",ctime(&sDate));
       fTraceLog(0, acMessage);
       }
    else
       {
       /* Deconnexion local */
       fCommitEnd(NULL);
       time(&sDate);
       sprintf(acMessage, "ACMM extraction for SAP terminated at %s",ctime(&sDate));
       fTraceLog(0, acMessage);
       }
     
    /* Close Files */
    if(gpcResult) fclose(gfResult);
     
    exit(iErr);
    }
     
    /****************************************************************/
    /*                                                              */
    /* Function : fTraceLog                                         */
    /*                                                              */
    /* Description    :                                             */
    /*                                                              */
    /****************************************************************/
     
    void fTraceLog(iCase, pcErr)
    int iCase;
    char *pcErr;
    {
    /* Error case */
    switch (iCase) {
       case 0 :
          printf("%s\n", pcErr);
          break;
       case 2 :
          printf("Error, impossible to open the File <%s>!\n", pcErr);
          break;
       case 6 :
          printf("\nERR: %s\n", pcErr);
          break;
       default : break;
       }
    }
     
    /****************************************************************/
    /*                                                              */
    /* Function : main                                              */
    /*                                                              */
    /* Description    : main function                               */
    /*                                                              */
    /****************************************************************/
     
    int main(argc, argv)
    int argc;            /* IN : arguments number */
    char *argv[];        /* IN : values */
    {
    int iError;                   /* Num of the error return by the functions */
    int iRang;
    int iLine;
     
    time_t sDate;
     
    char acErrOra[kiERRORA + 1];
     
    char *pcUser = NULL;
    char *pcPwd = NULL;
     
    gpcDebug = getenv("DEBUGZEF");
    if(gpcDebug) printf("=>MODE DEBUG\n");
     
    /*####                                             */
    /*#### CONTROL ARGUMENTS                           */
    /*####                                             */
     
    iError = 2;           /* obligatory parameters */
     
    for(iRang = 1; iRang < argc; iRang++)
       {
       /* Acquisition of parameters */
       if(argv[iRang][0] == '-')
          {
          switch(argv[iRang][1])
             {
             case 'o' :
             case 'O' : gpcResult = &argv[iRang][2]; break;
             case 'v' :
             case 'V' : if(!gpcDebug)
                           {
                           gpcDebug = "TRUE";
                           time(&sDate);;
                           printf("=>MODE DEBUG               at %s", ctime(&sDate));
                           }
                        break;
             default : iError++; break;
             }
          continue;
          }
     
       if(!pcUser)
          {
          pcUser = argv[iRang];
          iError--;
          continue;
          }
     
       if(!pcPwd)
          {
          pcPwd = argv[iRang];
          iError--;
          continue;
          }
     
       /* If No found => error */
       iError++;
       }
     
    if (iError)
       {
       printf("ss10_SAP_extract <User> <Pwd> [-o'result file']\n");
       exit(1);
       }
     
    if(gpcResult)
       {
       /* Control the result file for writting */
       if ((gfResult = fopen(gpcResult, "w")) == NULL)
          {
          fTraceLog(2, gpcResult);
          fExitProg(1);
          }
       if(gpcDebug) printf("=>Result file opened\n");
       }
    else
       {
       /* Standard output */
       gfResult = stdout;
       }
     
    /*####                                             */
    /*#### CONNEXION DATABASES                         */
    /*####                                             */
     
    /* Connect local database */
    if(gpcDebug) printf("=>Trying to connect to local database\n");
    iError = fConnect(acErrOra, pcUser, pcPwd, NULL, NULL);
    fANALYZE(6);
    if(gpcDebug) printf("=>Connected!\n");
     
    /*####                                             */
    /*#### INITIALIZATION                              */
    /*####                                             */
     
    /*####                                             */
    /*#### MAIN BODY                                   */
    /*####                                             */
     
    /* Extract        */
    iError = fExtractSAP(acErrOra, gfResult, gpcDebug);
    fANALYZE(6);
     
    /*####                                             */
    /*#### END                                         */
    /*####                                             */
     
    fExitProg(0);
    }

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Par défaut
    et la sortie 'bt' de dbx?

    -W

    --> dsl je n'arrive pas à utiliser cette option, quand faut-il la mettre ?

    Merci d'avoir répondu en tout cas ;-)

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 778
    Par défaut
    Citation Envoyé par Cathy Voir le message
    et la sortie 'bt' de dbx?

    -W

    --> dsl je n'arrive pas à utiliser cette option, quand faut-il la mettre ?

    Merci d'avoir répondu en tout cas ;-)
    Ce n'est pas une option.
    Votre programme plante dans l'exécution de la librarie "sqlglmt at 0x90000000439d828 ($t1)"
    Quelle est la ligne de votre programme qui appelle 'indirectement' cette libraries?
    bt après le plantage de votre programme devrait vous donner la liste des points de retours et donc des 'appelants'.
    Mais dbx n'est peut être pas dbx et dans votre cas, il faut peut être taper autre chose que bt.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Par défaut
    mon pb c'est que je n'arrive justement pas à interpréter le
    at 0x90000000439d828 ($t1)
    , pourquoi est-ce que j'ai de l'hexadécimal? ne devrais-je pas avoir le nom d'une fonction après le "at"?

    et ($t1), à quoi celà conrrespond-il?

    le truc c'est que ce code fonctionnait sous aix 4.3 en mode 32 bits, hors là nous avons migré en aix 5.3 64 bits !!

    comment savoir s'il me faut toucher au code ou s'il ne s'agit que d'un pb de lirairie ou de LIBPATH mal défini?

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 778
    Par défaut
    Citation Envoyé par Cathy Voir le message
    mon pb c'est que je n'arrive justement pas à interpréter le , pourquoi est-ce que j'ai de l'hexadécimal? ne devrais-je pas avoir le nom d'une fonction après le "at"?

    et ($t1), à quoi celà conrrespond-il?
    Vu de très très loin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Segmentation fault in sqlglmt at 0x90000000439d828 ($t1)
    0x90000000439d828 (sqlglmt+0x94) 9c030001 stbu r0,0x1(r3)
    Dit qu'il bugue dans la DLL sqlglmt.
    Je ne sais pas avec quelles options sont compilées vos programmes mais une DLL se livre en général sans table de symboles.

    A vous de trouver l'appelant et questionner les paramètres passés: c'est là qu'il serait intéressant d'avoir la pile d'appel

    Citation Envoyé par Cathy Voir le message
    le truc c'est que ce code fonctionnait sous aix 4.3 en mode 32 bits, hors là nous avons migré en aix 5.3 64 bits !!

    comment savoir s'il me faut toucher au code ou s'il ne s'agit que d'un pb de lirairie ou de LIBPATH mal défini?
    => recompilez le code sous 4.3 pour vous assurer que çà 'fonctionne' encore.

    Tant que vous ne connaîtrez pas la routine de votre code qui appelle cette librairie, il sera difficile de faire la part des choses.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Cathy Voir le message
    le truc c'est que ce code fonctionnait sous aix 4.3 en mode 32 bits, hors là nous avons migré en aix 5.3 64 bits !!
    J'ai vécu/subi quelques changement de tailles de bus (passage 8 vers 16 vers 32 vers 64) et je n'en ai jamais vu un qui se passe sans problème. Il faut toujours retoquer un peu le code.

    Ton voeux de ne pas retoucher au code, je n'y crois pas ou alors reste en 32 bits.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  10. #10
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Par défaut un peu plus d'info...
    voilà en faisant un j'obtiens d'autres infos sur mon erreur :

    Date/Time: Mon Jul 21 16:37:05 CDT 2008
    Sequence Number: 616
    Machine Id: 0057246A4C00
    Node Id: tls03
    Class: S
    Type: PERM
    Resource Name: SYSPROC

    Description
    SOFTWARE PROGRAM ABNORMALLY TERMINATED

    Probable Causes
    SOFTWARE PROGRAM

    User Causes
    USER GENERATED SIGNAL

    Recommended Actions
    CORRECT THEN RETRY

    Failure Causes
    SOFTWARE PROGRAM

    Recommended Actions
    RERUN THE APPLICATION PROGRAM
    IF PROBLEM PERSISTS THEN DO THE FOLLOWING
    CONTACT APPROPRIATE SERVICE REPRESENTATIVE

    Detail Data
    SIGNAL NUMBER
    11
    USER'S PROCESS ID:
    385276
    FILE SYSTEM SERIAL NUMBER
    14
    INODE NUMBER
    2048
    PROCESSOR ID
    0
    CORE FILE NAME
    /u001/appli/ss10_dev/sh/core
    PROGRAM NAME
    ss10_SAP_extract
    STACK EXECUTION DISABLED
    0
    ADDITIONAL INFORMATION
    sqlglmt 94
    sqlglmt 28
    sqlglm 20
    fGetOraEr 70
    fConnect 434
    main 200
    ??

    Symptom Data
    REPORTABLE
    1
    Donc là si je comprends bien j'ai une erreur dans sqlglmt, mais que signifie le 94? est-ce le numéro de ligne?
    comment interpréter ce report?? est-ce que le STACK EXECUTION DISABLED est normal ??

    voici ma fonction fConnect :
    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
     
    int fGetOraErr(pcErrOra, iLongMax, pcMsg)
    char *pcErrOra;                /* OUT */
    int iLongMax;
    char *pcMsg;
    {
    int iErr = 0;
    int iCodeErr = 0;
    int iLongString = 0;
     
    char *pcErrOraOri = pcErrOra;
     
    iLongMax -= 2;        /* NL + NULL */
    if(iLongMax < 1) return(1);
     
    /* Message d'erreur */
    iErr = sqlglm(pcErrOra, &iLongMax, &iLongString);
    pcErrOra += iLongString;
    iLongMax -= iLongString;
    *pcErrOra = '\n';
    *(++pcErrOra) = '\0';
     
     
    /* Requete */
    iLongMax -= 2;     /* ';' + NL */
    if(iLongMax < 1) return(1);
     
    iLongString = iLongMax;
     
    iErr = sqlgls(pcErrOra, &iLongString, &iCodeErr);
    pcErrOra += iLongString;
    iLongMax -= iLongString;
    *pcErrOra = ';';
    *(++pcErrOra) = '\n';
    *(++pcErrOra) = '\0';
     
    /* Pointeur */
    iLongString = sqlca.sqlerrd[4] + 1 + 1;     /* Offset + '^' + NL */
    iLongMax -= iLongString;
    if(iLongMax < 1) return(1);
     
    sprintf(pcErrOra, "%*s\n", sqlca.sqlerrd[4] + 1, "^");
    pcErrOra += iLongString;
     
    /* File and Line */
    iLongString = strlen(pcMsg) + 5 + oraca.orasfnm.orasfnml + 14;
    iLongMax -= iLongString;
    if(iLongMax < 1) return(1);
     
    sprintf(pcErrOra, "%s\non line %.5d of %.*s\n",
                       pcMsg,
                       oraca.oraslnr,
                       oraca.orasfnm.orasfnml, oraca.orasfnm.orasfnmc);
     
    return(0);
    }
    je retrouve bien sqlglm mais pas sqlglmt :'(

    Merci bcp à tous ceux qui m'ont aidé, je suis débutant en pro*C donc dsl si mes questions sont évidentes

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 778
    Par défaut
    En supposant que l'information ci dessous reflète la pile d'appels (et que les nombres soient l'offset du PC, ie l'adresse de retour qui a été poussée dans la pile):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ADDITIONAL INFORMATION
    sqlglmt 94
    sqlglmt 28
    sqlglm 20         <- etc...
    fGetOraEr 70    <- dans fGetOraEr, appel de sqlglm
    fConnect 434   <- dans fconnect, appel de fGetOraEr
    main       200   <- dans "main" appel de fConnect
    Ca semble dire que le retour de l'opération appelée par "fConnect+434" s'est mal passée et qu'on appelle fGetOraEr pour afficher le message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /* Message d'erreur */
    int fGetOraErr(pcErrOra, iLongMax, pcMsg)
    ...
    iErr = sqlglm(pcErrOra, &iLongMax, &iLongString);
    pcErrOra += iLongString;
    iLongMax -= iLongString;
    *pcErrOra = '\n';
    *(++pcErrOra) = '\0';
    et l'appel a sqlglm pour récupérer le message d'erreur semble se vautrer lamentablement, probablement parce qu'on lui passe en paramètre des insanités qu'il ne digère pas.

    • La cause de la cause reste à déterminer: ce qui s'est mal passé mal dans fConnect,
    • Faire que la routine qui affiche le pourquoi aiderait sans doute

    => vérifier qu'on lui passe de bons paramètres?

    ? Un breakpoint sous le debugger ou des printfs a vous de voir...
    Pour l'instant, je ne peux pas en dire plus.
    Bon courage
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Par défaut
    merci bcp wiztricks l'explication est parfaite...

    j'ai compris que le pb venait du user et pwd de connection.

    J'ai donc remplacé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    EXEC SQL CONNECT :username IDENTIFIED BY :password;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char userpwd[]="usertoto/pwdtoto@dbtoto";
    EXEC SQL CONNECT :userpwd;
    Mon souci c'est que c'est écrit en dur...

    comment concaténer mes deux variables
    username
    et
    password
    déjà existantes avec au milieu un / de séparation ??

    peut-être en utilisant la commande sprintf?? mais comme je ne sais pas l'utiliser...j'ai quand même testé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char userpwd[];
    sprintf(userpwd, "%d"\"%d\n",:username,:password);
    mais bien sûr ça ne fonctionne pas !!

  13. #13
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 778
    Par défaut
    En supposant les déclarations:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char* username;
    char* password;
    char* dbname;
    on doit pouvoir concaténer cela dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char buffer[assez_grand];
    sprintf(buffer,"%s/%s@%s",username, password, dbname);
    puis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    EXEC SQL CONNECT :buffer
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  14. #14
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 126
    Par défaut
    Excellent !! ça fonctionne, encore merci

  15. #15
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 778
    Par défaut
    Super!
    Profitez en pour corriger la routine fGetOraEr ou vérifier que les paramètres d'appel à celle ci depuis fConnect sont corrects.
    Et n'oubliez pas de marqué la dicussion "résolue"
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/04/2009, 20h42
  2. Comment lire le résultat d'une requête SQL?
    Par cmako dans le forum JDBC
    Réponses: 2
    Dernier message: 22/05/2007, 17h36
  3. Réponses: 2
    Dernier message: 08/04/2007, 17h23
  4. Comment contrer la "segmentation fault" ?
    Par guillaume_pfr dans le forum C
    Réponses: 15
    Dernier message: 08/08/2003, 13h43
  5. Réponses: 5
    Dernier message: 20/08/2002, 18h01

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