[OLE DB] pourquoi ca marche pas ??
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:
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:
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... :D :D :D
[OLE DB] pourquoi ca marche pas ??
Personne n'a d'idees ????
:(
[OLE DB] pourquoi ca marche pas ??
Merci pour l'info, Philippe V,
Mais cela ne fait strictement rien...
Par contre, j'ai modifie mon accesseur pour qu'il prenne en compte tous les champs des deux tables, j'ai modifie egalement la commande SQl par :
select * from T1,T2 where T1.MS_TYPE=T2.MS_TYPE
et la ca fonctionne !!! :(
Malheureusement, l'ensemble des champs des tables T1 et T2 ne m'interresse pas : trop de données inutilisees => pas tres propre et ralentit l'application...
Quelqu'un aurait-il LA solution ????
Merci !!! :D :D :D