Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Un recordset dentro de otro

Estas en el tema de Un recordset dentro de otro en el foro de Visual Basic clásico en Foros del Web. Hola a todo/as. Comento mi problema Necresitaria cargar un recordset dentro de otro. Como lo podria hacer?...
  #1 (permalink)  
Antiguo 26/03/2011, 05:03
 
Fecha de Ingreso: agosto-2007
Mensajes: 77
Antigüedad: 16 años, 8 meses
Puntos: 0
Un recordset dentro de otro

Hola a todo/as.

Comento mi problema

Necresitaria cargar un recordset dentro de otro.

Como lo podria hacer?
  #2 (permalink)  
Antiguo 26/03/2011, 07:05
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 20 años, 5 meses
Puntos: 19
Respuesta: Un recordset dentro de otro

Cita:
Iniciado por shashas Ver Mensaje
Hola a todo/as.

Comento mi problema

Necresitaria cargar un recordset dentro de otro.

Como lo podria hacer?
Explica mejor...

Asi como lo planteas te diria un select dentro de otro en la misma consulta
  #3 (permalink)  
Antiguo 26/03/2011, 14:31
Avatar de Gakex  
Fecha de Ingreso: enero-2009
Mensajes: 137
Antigüedad: 15 años, 3 meses
Puntos: 4
Respuesta: Un recordset dentro de otro

Bueno tal vez no lo sepas pero un recorset es una tabla temporal creada por el SGBD utilizando una cadena SQL, una sentencia, y es posible anidar las sentencias para crear un recordset mas especifico, dependiendo del tamaño y la cantidad de registros, se pueden anidar tantas sentencias, hasta un limite de 32 en el msSQLserver.

Existen muchos SGBD y dependiendo de la estructura de la base de datos hay diferentes formas de anidar una sentencia, asi que deberías ser mas especifico de que quieres hacer y que S.G. de base de datos estas utilizando.

otra cosa, aunque el SQL es un estandar, no todos los SGBD pueden soportar todas las caracteristicas de este lenguaje.
  #4 (permalink)  
Antiguo 08/04/2011, 11:22
 
Fecha de Ingreso: agosto-2007
Mensajes: 77
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Un recordset dentro de otro

Buenas voy a poner el código que hago servir y me explicare

Public Sub actualitzarLlista()
On Error GoTo ErrorSub
FEnvioEditorial.connectar
LvEscriptors.ListItems.Clear
While Not rs.EOF
Set ObjItem = LvEscriptors.ListItems.add(, , rs(0))

ObjItem.SubItems(1) = rs!titulo & ""
ObjItem.SubItems(2) = rs!Nombre & ""
ObjItem.SubItems(3) = rs!NomEdi & ""
ObjItem.SubItems(5) = rs!País & ""
ObjItem.SubItems(6) = rs!Contacto & ""
ObjItem.SubItems(7) = rs!FechaEnv & ""
ObjItem.SubItems(8) = rs!FechaReb & ""
ObjItem.SubItems(9) = rs!FechaCon & ""
ObjItem.SubItems(10) = rs!FechaCa & ""
ObjItem.SubItems(11) = rs!anticipo & ""
ObjItem.SubItems(12) = rs!Observaciones & ""
rs.MoveNext
Wend
rs.Close
Exit Sub

ErrorSub:
If Err.Number = 94 Then
Resume Next
End If
End Sub

Bien yo lo que quiero es hacer un recordset dentro de este que estoy recorriendo en este bucle para hacer una consulta con uno de los valores que me da el resultado de la consulta.

Lo que querría hacer seria algo así

ObjItem.SubItems(6) = rs!Contacto & ""
rs2.source = "SELECT Nombre FROM Tabla WHERE Fecha = " & rs!FechaEnv & "
ObjItem.SubItems(7) = rs2!Nombre& ""

Pero siempre me da error de que el objeto es cerrado.

Espero haberme explicado bien.

Muchasd gracias
  #5 (permalink)  
Antiguo 08/04/2011, 14:39
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: Un recordset dentro de otro

Hola!!
Porque terminas las asignaciones con [ & "" ] ? No es necesario....

La linea [ rs2.source = "SELECT Nombre FROM Tabla WHERE Fecha = " & rs!FechaEnv & "] te da error, porque el RS2 no le das SET ni OPEN, ademas de que terminas la instruccion con [ & " ], creo que de esta forma si te funcionaria:

Código vb:
Ver original
  1. 'En las declaraciones
  2. Dim rs2 as Adodb.recordset
  3. Set rs2 = New Adodb.Recordset
  4.  
  5. '...
  6. '...
  7. ObjItem.SubItems(6) = rs!Contacto
  8. If rs2.state=1 then rs2.close ' Primero validamos si está abierto, si lo está lo cerramos
  9. rs2.source = "SELECT Nombre FROM Tabla WHERE Fecha = ' "  & rs!FechaEnv & " ' " '--> Si el campo fecha no es caracter, quita las comillas simples y el [  & "" ]  al final
  10. rs2.Open , CONEXION, STATIC, LOCKTYPE '-->Completa la sentencia
  11. If rs2.EOF=false then
  12.    'HAY DATOS
  13. Else
  14.    'NO HAY DATOS
  15. End if
  16. ObjItem.SubItems(7) = rs2!Nombre& ""
  17. '...
  18. '...

Última edición por lokoman; 08/04/2011 a las 14:47
  #6 (permalink)  
Antiguo 11/04/2011, 11:13
 
Fecha de Ingreso: agosto-2007
Mensajes: 77
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Un recordset dentro de otro

Lo acabo de esta manera, porque cuando hay algun regitro vació, no se por que ve fallaba.

Provaré esta solución que me has dado, a ver que tal i lo comento en el foro.

Muchas gracias por tu ayuda!!
  #7 (permalink)  
Antiguo 13/04/2011, 09:14
 
Fecha de Ingreso: agosto-2007
Mensajes: 77
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Un recordset dentro de otro

Hola. Probé el código que me pasaste y no funciona me dice

'La operación no está permitida si el objeto está abierto"

Te pongo el código tal y como lo he hecho servir:

Dim rs2 As ADODB.Recordset
Set rs2 = New ADODB.Recordset

On Error GoTo ErrorSub
FEnvioEditorial.connectar
LVEscriptors.ListItems.Clear
While Not rs.EOF
Set ObjItem = LVEscriptors.ListItems.add(, , rs(0))

ObjItem.SubItems(1) = rs!titulo & ""
ObjItem.SubItems(2) = rs!Nombre & ""
ObjItem.SubItems(3) = rs!NomEdi & ""
If IsNull(rs!idSello) = True Then
ObjItem.SubItems(4) = "Sin sello" & ""
Else
If rs2.State = 1 Then rs2.Close
rs2.Source = "SELECT Nombre FROM Sellos WHERE IdSello = " & rs!idSello & ""
FEnvioEditorial.connectar
ObjItem.SubItems(4) = rs2!Nombre & ""
End If
ObjItem.SubItems(4) = rs!NomSello & ""
End If
ObjItem.SubItems(5) = rs!País & ""
ObjItem.SubItems(6) = rs!Contacto & ""
ObjItem.SubItems(7) = rs!FechaEnv & ""
ObjItem.SubItems(8) = rs!FechaReb & ""
ObjItem.SubItems(9) = rs!FechaCon & ""
ObjItem.SubItems(10) = rs!FechaCa & ""
ObjItem.SubItems(11) = rs!anticipo & ""
ObjItem.SubItems(12) = rs!Observaciones & ""
rs.MoveNext
Wend
rs.Close
Exit Sub

ErrorSub:
If Err.Number = 94 Then
Resume Next
End If

Etiquetas: recordset
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:43.