Urgente CRecordset...

12/09/2003 - 23:52 por bcc | Informe spam
Buenas tardes...

Alguno de ustedes sabe como puedo realizar una consulta dentro de otra, me
refiero a lo siguiente :

//Declaro dos variables de tipo CRecordset con la misma conexion
CRecordset Registro( &Conexion);
CRecordset Registro2( &Conexion);
//Hago la primer consulta
Registro.Open(CRecordset::forwardOnly,"select * from
tabla1",CRecordset::readOnly);
while( !Registro.IsEOF() )
{
// Quiero hacer otra consulta
Registro2.Open(CRecordset::forwardOnly,"select * from tabla2 where
",CRecordset::readOnly);
Registro2.GetFieldValue((short)0,varValue);
// Realizo cosas con ambos valores
Registro.MoveNext();
}

Pero me da error cuando llega a hacer el open de Registro2 me sale que la
conexion esta ocupada :

Connection is busy with another hstmt...

Alguien podria ayudarme con este error...
Gracias...
 

Leer las respuestas

#1 Ignacio Nicolás Rodríguez
16/09/2003 - 02:12 | Informe spam
Efectivamente. La forma más fácil (evidentemente no la más prolija) sería
crear dos conexiones.

Otras posibles soluciones pueden ser:
* Crear un stored procedure que trae los datos de una sola vez
* Utilizar una consulta con un join que traiga todo de una sola vez
* Guardar los datos obtenidos en primera instancia dentro de una lista
(std::list) e iterar post-mortem

No puedo dejar de lado insistir en que la tecnología que estás utilizando es
recontra antigua. Es comprensible que en muchos casos no conviene cambiar,
pero si se trata de un proyecto nuevo, vale la pena ver al menos las clases
ATL para OLE-DB (que dan la mejor performance), como para acercarse unos
años más a la actualidad.

Saludos y suerte. Ignacio Nicolás Rodríguez, MCSD.Net/MCT.


"bcc" escribió en el mensaje
news:
Buenas tardes...

Alguno de ustedes sabe como puedo realizar una consulta dentro de otra, me
refiero a lo siguiente :

//Declaro dos variables de tipo CRecordset con la misma conexion
CRecordset Registro( &Conexion);
CRecordset Registro2( &Conexion);
//Hago la primer consulta
Registro.Open(CRecordset::forwardOnly,"select * from
tabla1",CRecordset::readOnly);
while( !Registro.IsEOF() )
{
// Quiero hacer otra consulta
Registro2.Open(CRecordset::forwardOnly,"select * from tabla2 where
",CRecordset::readOnly);
Registro2.GetFieldValue((short)0,varValue);
// Realizo cosas con ambos valores
Registro.MoveNext();
}

Pero me da error cuando llega a hacer el open de Registro2 me sale que la
conexion esta ocupada :

Connection is busy with another hstmt...

Alguien podria ayudarme con este error...
Gracias...


Preguntas similares