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::DoCreateWithData(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
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