Visual Basic - Recordset & manipulacion

Life is soft - evento anual de software empresarial
   
Vista:

Recordset & manipulacion

Publicado por Lorien (15 intervenciones) el 04/05/2015 09:25:02
Hola, de nuevo en el hospital de practicas; y como no, con una nueva duda.

El recordset, el cual ya de base manejo mal me esta dando un error raro, voy a dejar parte del codigo por aqui a ver que os parece; no entiendo como me puede dar error de tipos si basicamente estoy recogiendo el mismo tipo de datos (y para mas inri dire que el mismo dato)

Ahora vereis:

==========
sql = "select cod_episodio from EPISODIO_INGRESO where historia = " & [filtrohistoria].Value & " and fecha_alta = Null "
Set rs = CurrentDb.OpenRecordset(sql)
If Not IsNull(rs) Then
' Si no es nulo, esta ingresado (o lo estaba cuando se tomaron los datos a introducir en esta BBDD)
sql = "select fecha_ingreso from EPISODIO_INGRESO where cod_episodio = " & rs & ""
==========

O sea, recogo en rs un cod_episodio (hay que decir que en mi BBDD solo hay un registro y coincide)

Entra en el bucle porque ha recogido un codigo y no es nulo

Igualo el rs a un cod_episodio y el tipo de datos ya no coincide... ¿que esta pasando?

DATO EXTRA:
cod_episodio es un autonumerico creado en el excel 2003
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Recordset & manipulacion

Publicado por Lorien (15 intervenciones) el 04/05/2015 11:43:54
¿Puede que tenga algo que ver el hecho de que yo sepa que esa consulta sql me va a devolver un unico valor pero que en verdad pueda devolver varios segun la logica del programa?

O dicho de otro modo:

=> mi consulta SQL me puede devolver entre 0 y 1 valor para cada numero de historia del paciente

=> segun la logica pura podria devolver mas valores (aun no esta implementado el trozo donde te impide guardar dos episodios de ingreso para el mismo paciente sin haberle dado de alta en el mas antiguo, un paciente no puede estar dos veces dado de alta en el hospital)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recordset & manipulacion

Publicado por Horroroso (10 intervenciones) el 04/05/2015 23:44:46
de entrada.. rs es un objeto, no un valor.

deberias agregar algo como:

rs.moveFirst

sql="SELECT fecha_ingreso FROM EPISODIO_INGRESO WHERE cod_episodio = '" & rs(0).value & "'"

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recordset & manipulacion

Publicado por Lorien (15 intervenciones) el 05/05/2015 09:44:01
Hola! Muchas gracias, no lo he `probado porque arregle mi problema ayer; pero intente hacer lo que me pusiste de otra manera (porque no tenia un manual de VB)

La cosa quedo asi:

sql = "SELECT cod_episodio FROM EPISODIO_INGRESO WHERE historia = " & [historia].Value & " And cod_alta Not In (1,2,3,4,5,6);"
Set rs = CurrentDb.OpenRecordset(sql)
rs.MoveFirst
codep = rs!cod_episodio

Esta forma me gusta mucho, y si le añadimos que puedo seleccionar como si fuera un array de valores, se podria decir que es muy funcional.
Gracias por enseñarmelo y aparte resolver mi duda (que ya me lo imaginaba) de que en VB el primer valor de un array se apunta con el 0 y no con el 1.

CORRIGEME SI ME EQUIVOCO
========================

Al poner el rs(0).value estas apuntando al valor 0 de un array de valores y no al primer valor de una lista en la cual te has posicionado al hacer el rs.moveFirst

Dicho de otro modo: si una consulta devolviera esto

dato1, dato2, dato3, dato4
dato1B, dato2B, dato3B, dato4B

con rs(0).value apuntarias a esto: dato1, dato2, dato3, dato4
O a esto: dato1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recordset & manipulacion

Publicado por Horroroso (10 intervenciones) el 05/05/2015 23:55:33
en unta tabla tienes columnas y tienes registros, digamoslo asi:
1
2
3
4
Nombre     Apellido    Edad
R1   Jose        Perez       23
R2   Juan        Ruiz        25
R3   Raul        Saenz       30
rs.MoveFirst, hace que se mueva el recordset al primer registro, es decir a la Fila R1.
rs(0), indica que va a seleccionar la primer columna en este caso es "Nombre"
asi rs(0).value devolvera el valor: Jose

si usara rs.MoveNext entonces el recordset pasaria a ser R2 por lo tanto rs(0).value devolvera: Juan

Tambien podria haber usado:
rs.moveFirst()
y rs("Edad").value me retornara: 23.

Espero que quedara Claro.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recordset & manipulacion

Publicado por Juan Gilberto (278 intervenciones) el 06/05/2015 17:19:13
rs(0).value te regresa el primer campo del recordset

Si tu recordset tuviera digamos 5 campos y te da flojera utilizar el nombre de los campos puedes referenciarlos por su posicion
rs(0).value ---> el primer campo
rs(1).value ---> el segundo campo
y asi sucesivamente

A veces lo usamos cuando el recordset lo fomamos con una query parecida a "SELECT * FROM XXXX"
y asi podemos ver los campos sin saber sus nombres... cosa no muy practica que digamos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar