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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.

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
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