Bonjour,

Je suis a la quete d'une reponse au probleme suivant :

Comment, sous ole db recuperer les enregistrements generes a la suite de la commande suivante :

select T1.ID_MS, T2.VAR_NAME,T2.VAR_TYPE, T2.VAR_GROUP from T1,T2 where T1.MS_TYPE=T2.MS_TYPE

Pour info, voila comment je procede actuellement -ce qui ne fonctionne pas-:

Un accesseur :
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
class CMsAccessor
{
public:
    LONG m_ID_MS;
    TCHAR m_VAR_TYPE[10];
    TCHAR m_VAR_NAME[50];
    TCHAR m_VAR_GROUP[5];
 
 
BEGIN_COLUMN_MAP(CMsAccessor)
    COLUMN_ENTRY(1, m_ID_MS)
    COLUMN_ENTRY(2, m_VAR_TYPE)
    COLUMN_ENTRY(3, m_VAR_NAME)
	COLUMN_ENTRY(4, m_VAR_GROUP)
END_COLUMN_MAP()
};
Et, dans la classe qui effectue la requete SQL precedente :
(code a l'arrache pour les tests...)
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
 
void COracleDb::GetList()
{
  HRESULT hr;
 
  char* pFileName = "test.txt";
  CStdioFile f1;
  if( !f1.Open( pFileName, CFile::modeCreate
		   | CFile::modeWrite | CFile::typeText ) ) {
   #ifdef _DEBUG
     afxDump << "Unable to open file" << "\n";
   #endif
   exit( 1 );
  }
 
    if( OpenOraDb("db","user","passwd") ) {
 
     hr = m_dbSession.Open(m_ds);
 
      if(SUCCEEDED(hr)) {
        // The session is now open
        CCommand<CAccessor<CMsAccessor>, CRowset> dbCommand;
 
        // DBPROPSET_ROWSET : Properties for rowset 
        CDBPropSet propset(DBPROPSET_ROWSET);
        propset.AddProperty(DBPROP_CANHOLDROWS, true);
 
        // Select all records from selected table
        CString sCommand;
        sCommand = "select T1.ID_MS, T2.VAR_NAME,T2.VAR_TYPE, T2.VAR_GROUP from T1,T2 where T1.MS_TYPE=T2.MS_TYPE";
 
        hr = dbCommand.Create(m_dbSession, (LPCTSTR)sCommand);
        if(SUCCEEDED(hr)) {
           hr = dbCommand.Open(&propset, NULL, true);
           if(SUCCEEDED(hr)) {
              // Use the rowset
              CString csStr;
              CMsAccessor data;
 
              while (dbCommand.MoveNext() == S_OK) {
                 dbCommand.GetDataHere(&data);
                 csStr.Format("\n +%d | %s | %s | %s",data.m_MS_TYPE,data.m_VAR_GROUP,data.m_VAR_NAME,data.m_VAR_TYPE);
                 TRACE(csStr);
                 f1.WriteString(csStr);
              }
           }
      }
      m_dbSession.Close();
    }
    m_ds.Close();
  }
 
  f1.Close();
 
}

En faisant comme precedemment, il n'y a aucun enreistrements de disponibles (le while sort de suite) alors que si copie la requete SQL et que je l'execute avec un outil oracle, ce dernier me renvoie des enregistrements!!!!

Merci de vos indications...