RecordSet y Sql Server

¿Es posible hacer más de 1 consulta de una tabla y alamacenarlas en un mismo recorset?..

1 Respuesta

Respuesta
1
No, lo que puedes hacer es incluir las dos consultas en un UNION ALL siempre que tengan la misma distribución de campos, por ejemplo:
SELECT CODIGO,NOMBRE FROM Clientes WHERE PAIS='ESPAÑA' UNION ALL
SELECT CODIGO,NOMBRE FROM Clientes
WHERE PAIS='FRANCIA'
Con este SQL puedes abrir un Recordset que tendrá los dos grupos de clientes seleccionados en los dos SELECT.
Gracias por la respuesta. Ahora tengo otra duda, desde un recorset cargado desde una tabla en sql server, puedo usarlo para otra consulta, es decir.
selec * from Recorset where Recorset.id='xxx'..?
La verdad es que a lo que me preguntas no le veo mucho la utilidad, si me pusieras un ejemplo concreto tal vez podría decirte... en principio lo que me preguntas se me parece a buscar en recordset ya abierto por un determinado campo o criterio, lo cual puedes hacerlo de varias formas:
1- Usando Find cuando se trata de un campo, en el ejemplo que me pones seria:
rs.Find "ID='xxx'"
2- Usando Filter, cuando se trate de varios campos, por ejemplo:
rs.Filter ="ID='xxxx' AND FECHA >'03/03/03'"
3- Abriendo nuevamente el recordset con la nueva condición (es lo que yo haría si tuviera muchos datos)
De todas maneras si lo que quieres es una condición compuesta siempre puedes abrir un recordset como este:
SELECT * FROM tabla WHERE ID IN (SELECT ID FROM tabla WHERE la_condicion_que_sea)
El problema es que un recordset es para devolver un solo resultset, no se pueden "sumar" recordsets, porque no tendría sentido... por eso te digo que si me pones un ejemplo concreto quizá podría ver por donde va la cosa...
Ok. La cuestión es la siguiente: En Sql Server tengo 2 tablas, pej. tab1 y tab2, con tab2 aprox 20.000 registros y tab1 con aprox 15 registros, pues bien yo cargo en un recorset Rs1 la tabla tab1. Dependiendo de la información que tenga en Rs1, yo tengo que cargar otro recorset Rs2 de tab2. Al recorrer rs1 dada ciertas condiciones de los campos yo tengo que armar el rs2 de tab2. Y este rs2 debe ser único. No se si me explico. Gracias de antemano
Por lo que he podido entender más o menos, la tabla 1 es una especie de indice o selector dentro de la tabla 2 (i.e. Tab2 son documentos y tab1 son clientes) Según puedo ver te interesa recorrer la tabla 1 y con alguna condición en cada iteración armar un recordset solo con los datos que la cumplen. Asumiendo eso, una forma de hacerlo es la siguiente (asumiendo que el campo de selección se llama campo_sel y es numérico):
Rs1. Open "SELECT * FROM tab1 WHERE la-condicion-que-sea"
while not rs1.EOF
rs2.Open "SELECT * FROM tab2 WHERE campo_sel="+CStr(rs1("campo_sel")
' Ahora puedes recorrer la otra tabla
rs2.Close
'
' siguiente selector
'
Rs1. MoveNext
Wend
Rs1. Close
Si esta no es la interpretación correcta, cuéntame más detalles para aclararme un poco, aunque por lo que me has dicho creo que eso es lo que quieres hacer...
OK.Muchas gracias, ahora me surge una duda, segun el algoritmo que mandaste, al ejecutar rs2.close ,luego ejecutar "siguiente selector" cuando vuelva a hacer rs2.Open "SELECT * FROM tab2 WHERE campo_sel="+CStr(rs1("campo_sel").. voy a parder lo que se habia almacenado en rs2 en la iteración anterior?.
No vas a "perderlo" desde el punto de vista de que seguirá en la base de datos, simplemente que no estará disponible en la siguiente iteración. Si lo que quieres es un solo resultset con el filtro de todas las iteraciones, puedes hacer algo como esto:
Rs1. Open "SELECT * FROM tab1 WHERE la-condicion-que-sea"
st =""
while not rs1.EOF
if st <>"" then st =st +" UNION ALL "
st =st + "SELECT * FROM tab2 WHERE campo_sel="+CStr(rs1("campo_sel")
'
' siguiente selector
'
rs1.MoveNext
wend
rs1.Close
'
' Ahora tienes un gran UNION
' en st y puedes usarlo todo
' de una vez
'
rs2.Open st
' y recorrerlo
'
Rs. Close
Esta variante es más o menos la misma, solo que tienes todos los datos de una vez en un solo recordset...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas