Newsgroup: it.comp.programmare.win32
Titolo: Visual C 6.0 e ODBC con Oracle 8.0.5 (problemi)

Mi accade una cosa davvero molto strana. Ho impostato una
origine dati ODBC che si collega ad un database Oracle 8.0.5.
Voglio estrapolare dati attraverso una query con JOIN
utilizzando il dato membro m_strFilter della classe CRecordset.
Lanciando la query con l'istruzione CRecordset::Open() appare
il seguente errore: "Impossibile utilizzare cursori basati su
keyset nelle operazioni di join, con condizioni distinct,
union, intersect o minus o su set di risultati di sola
lettura". Perchè??
Allora ho provato a creare un database identico ma con
MS-Access 2000 e a consultarlo tramite una origine dati ODBC e
tutto funziona con la stessa stringa SQL di prima!!
Perchè con Oracle no? Grazie mille, Sergio

Perchč con Oracle no? Grazie mille, Sergio
Perche' Oracle non permette quelle query aggiornabili su result set
creati con join. Prova a mettere da qualche parte (non conosco la
classe odbc di mfc) il settaggio per la sola lettura e a quel punto
riprova la query su oracle.
Stefano "HappyMan" (Lago Maggiore - NO)
--
Personal Web 
http://www.sgr.info
Email happyman69 (at) 
libero.it

 riprova la query su oracle.
Innanzitutto grazie per la tua risposta...ma non ho ben capito.
La classe MFC che utilizzo per la connessione ad Oracle è
	CRecordset. Se provo con SQL Worksheet di Oracle la query
funziona perfettamente...riesco a fare JOIN con quattro tabelle
contemporaneamente ma se riporto la stessa query all'interno
del dato membro m_strFilter mi da l'errore.Dammi, per piacere,
ulteriori informazioni. Grazie, Sergio					

ulteriori informazioni. Grazie, Sergio					
Dunque immagino che la tua query serva per aprire un result set con il
quale ci puoi fare diverse cose. Se lo usi in sola lettura (cosa che
presumo faccia un qualunque sql editor) chiaramente non hai problemi,
il result set ti si carica e poi lo scorri/visualizzi.
Se pero' lo apri in modifica ecco che potresti avere problemi.
Ci sono gia' passato perche' in Visual Basic utilizzando l'oggetto RDO
(che incapsula ODBC) se apro una query con join varie con un attributo
diverso da rdConcurReadOnly (da msdn "Cursor is read-only. No updates
are allowed.") ho un errore. In C++ non cambia la sostanza, cerca solo
la proprieta' da settare e le relative costanti.


 are allowed.") ho un errore. In C   non cambia la sostanza,


Sono disperato! Sergio
Usare qualcosa di diverso dal dynaset ?
Per gli update mi sa che devi proprio legarti alla singola tabella,
considerando che in Oracle 8 gli  update nella forma (sparo li in
fretta) "update A set A.CAMPO=X from TABELLA_A A,TABELLA_B B where
A.ID
=
B.ID
" non vanno (in MS SQL si)


>						
Problema risolto: in effetti, quando si esegue una
interrogazione SQL con JOIN fra più tabelle il risultato sarà
un recordset di dati in sola lettura, pertanto la classe che lo
rappresenta sarà del tipo snapshot e non dynaset (ecco dove
sbagliavo). Al contrario, in una classica interrogazione SQL ad
una sola tabella il risultato può essere benissimo un dynaset
con la possibilità di modificare (eventualmente) i dati in
esso contenuti. Non mi spiego, però, come mai in Access 2000
tutto funziona!
Sergio