Bonjour,
J'ai une base Oracle 9.2i que je dois accéder via le driver ODBC du client Oracle 8i mais impossible de mettre à jour ma table. J'ai systématiquement l'erreur :
ODBC -- Echec de mise à jour sur une table '???' attachée.
J'utilise :
VC++ 2008
Base Oracle 9.2
Client Oracle 8 (Pour info, j'ai le même problème avec les clients en version 9 et 10)
Ma table TASK est composé des champs suivants :
IDTASK => NUMBER(11, 1) clé primaire
IDPERSON => NUMBER(11, 1)
TITLE => NVARCHAR2(2000)
En résumé, j'ai le code suivant qui fonctionne très bien avec SQL Server mais qui échoue avec Oracle. Je ne trouve pas ce que j'ai pu oublier, c'est pourtant simple.
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
|
CString strConnection = _T("ODBC;DRIVER={ORACLE ODBC DRIVER};SERVER=ORACLESVR;UID=SA;PWD=SA;DBQ=ORACLESVR;");
CDaoDatabase *_DbPortal;
_DbPortal=new CDaoDatabase();
CDaoRecordset _Rs;
CString strSQL;
try
{
_DbPortal->Open(NULL,FALSE,FALSE,strConnection);
try
{
_Rs.m_pDatabase=_DbPortal;
strSQL.Format(_T("SELECT * FROM TASK"));
if(_Rs.IsOpen()) {
_Rs.Close(); }
_Rs.Open(dbOpenDynaset, strSQL, dbSeeChanges );
//_Rs.Requery();
// GetRecordCount me donne 1, je m'attendais à 16 (nb d'enregistrements)
if(_Rs.IsOpen() && _Rs.GetRecordCount()>0)
{
_Rs.MoveFirst();
_Rs.Edit();
_Rs.SetFieldValue(L"TITLE", L"mon titre");
_Rs.SetFieldValue(L"IDPERSON", L"123");
if(_Rs.CanUpdate()) {
_Rs.Update(); } // l'Update échoue
if(_Rs.IsOpen()) {
_Rs.Close(); }
}
}
catch (CDaoException *e)
{
e->ReportError(); // Je sors ici
e->Delete();
}
if(_DbPortal->IsOpen()) {
_DbPortal->Close(); }
}
catch (CDaoException *e)
{
e->ReportError();
e->Delete();
} |
J'ai épuisé toute la lecture que j'ai trouvé à ce sujet : enregistrement verrouillé, pb de driver ODBC, etc ...
Je sèche, j'ai besoin d'aide.
Merci
Partager