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

Windows Discussion :

C++ et ODBC, recuperation d'un Id


Sujet :

Windows

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 6
    Points : 3
    Points
    3
    Par défaut C++ et ODBC, recuperation d'un Id
    Bonjour,

    je travaille sur un code et je fais un update dans une table qui met l'ID elle même en incrémentant le champ, moi je souhaiterais récupérer cet ID: Il y a des classes entre les acces odbc et mes classes ... je comprends que ca ne paraisse pas simple mais je demande à tout hasard, voici ma fonction dans laquelle je souhaite faire ça:
    /************************************************************************
    * Methode DoCreateWithData
    ************************************************************************/
    unsigned int ExtDemandInfoDatabaseAccess:oCreateWithData(GenericDbRecord* record) {
    unsigned int codret = CR_DATA_BASE_OK;
    __int64 iD =0;
    CString strCRLID;

    ExtDemandInfoSet* baseRecordSet = NULL;
    ExtDemandInfoRecord* baseRecord = NULL;

    if(m_recordSet == NULL) {
    AllocateRecordSet();
    }

    baseRecordSet = dynamic_cast<ExtDemandInfoSet*> (m_recordSet);
    baseRecord = dynamic_cast<ExtDemandInfoRecord*> (record);

    ASSERT(baseRecordSet != NULL);
    ASSERT(baseRecord != NULL);

    do {

    if((baseRecordSet == NULL) || (baseRecord == NULL)) {
    codret = CR_DATA_BASE_ERROR;
    break;

    }


    // ASSERT(baseRecord->m_module.GetLength() <= 10);
    // ASSERT(baseRecord->m_type.GetLength() <= 20);

    // On regarde si on peut ajouter
    if(baseRecordSet->CanAppend() == FALSE) {
    codret = CR_DATA_BASE_DENIED;
    break;
    }

    // Maintenant, on essaye d'ajouter un nouvel enregistrement.
    baseRecordSet->AddNew();

    // On renseigne le nouvel enregistrement.
    baseRecordSet->m_ID = 0;
    baseRecordSet->m_SYNC = baseRecord->m_sync;
    baseRecordSet->m_BADTRY = baseRecord->m_badtry;
    baseRecordSet->m_CODELIM = baseRecord->m_codelim;
    baseRecordSet->m_DEBLOCK = baseRecord->m_deblock;
    ConvertBuffer2LongArray(baseRecord->m_data, baseRecordSet->m_DATA);
    baseRecordSet->SetFieldNull(&(baseRecordSet->m_DATA),FALSE);
    baseRecordSet->SetFieldDirty(&(baseRecordSet->m_DATA),TRUE);

    // On met à jour le nouvel enregistrement

    if(baseRecordSet->Update() == FALSE) {
    codret = CR_DATA_BASE_DENIED;
    }else {
    baseRecord->m_id = (__int64) baseRecordSet->m_ID;
    }



    }
    while(0);

    return codret;
    }




    -------------------------------------------------------------

    Pour l'instant j'obtiens 0 comme Id à chaque fois.
    Si quelqu'un à une piste je suis preneuse, quit à executer une procédure stockée.

    Merci

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Salut,

    Si tu obtiens 0 à chaque fois, c'est peut-être à cause de cette ligne ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    baseRecordSet->m_ID = 0;
    A+
    K

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Probléme récupération d'un ID
    Salut ,

    Merci,
    J'ai réussi à régler une grosse partie de mes problèmes.
    Néanmoins j'ai maintenant une erreur ORACLE :
    Je fais :
    try
    {
    odbc.AddStringParam (CFieldExchange::outputParam);

    odbc.PrepareEx((unsigned char*)"SACRE_PACK#INSERT_RECORD( ?)");

    odbc.Execute();

    strCRLID = odbc[0].AsString();
    CDatabaseUtils::convertStringToInt64(strCRLID, lCRLID);
    }
    catch(CDBException* e) {
    GenericDatabaseAccess::TraceAndDisplayBaseError(e, "SACRE_PACK#INSERT_RECORD", false);
    createRet = -1;
    lCRLID = -1;
    }

    et je remonte l'erreur suivante :
    {"ORA-06550: Ligne 1, colonne 7 :
    PLS-00201: l'identificateur 'SACRE_PACK.INSERT_RECORD' doit être déclaré
    ORA-06550: Ligne 1, colonne 7 :
    PL/SQL: Statement ignored

    "}

    J'ai pourtant bien inséré ce package à ma base de données, il apparaît sous toad sans erreur.
    Quelqu'un sait si il y a une déclaration à ajouter pour cette procédure ?
    Par avance merci,

    Emilie Pertuiset

Discussions similaires

  1. Recuperer des donnees de Sage Driver ODBC
    Par pepitoluna dans le forum QlikView
    Réponses: 1
    Dernier message: 14/03/2012, 14h23
  2. [AC-2007] Recuperer la version du pilote ODBC MySQL
    Par jj4822 dans le forum VBA Access
    Réponses: 5
    Dernier message: 07/02/2011, 13h24
  3. Recuperer la valeur de retour de Sources de données (ODBC)
    Par zaynabe dans le forum Général Java
    Réponses: 3
    Dernier message: 03/12/2008, 17h56
  4. [ODBC/Interbase] Comment récupérer les données d'une table ?
    Par etiennegaloup dans le forum Accès aux données
    Réponses: 3
    Dernier message: 27/09/2006, 08h55
  5. Réponses: 8
    Dernier message: 21/02/2005, 16h16

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