Visual Basic - adOpenDynamic y demas

Life is soft - evento anual de software empresarial
 
Vista:

adOpenDynamic y demas

Publicado por Adrian (4 intervenciones) el 06/05/2002 16:24:58
Estoy intentando hacer un ABM sin objetos data (o sea, con conexion, recordset, etc por codigo), y tenia el problema de la propiedad .recordcount q siempre daba -1, y lei (y comprobe) q era pq al momento de abrir el recordset ponia esta instruccion:

rs.Open consulta, conexion, adOpenDynamic, adLockOptimistic, adCmdText

probe cambiando el adOpenDynamic por adOpenStatic y funciona bien, pero quisiera saber la diferencia entre adOpenDynamic, adOpenForwardOnly, adOpenKeyset y adOpenStatic. Por lo q se, creo q el Dynamic sirve cdo se van a actualizar datos de varias tablas, y q en el ForwardOnly solo se puede desplazar por los registros hacia adelante, por lo q a mi ese no me serviria, pero no se que restricciones tienen el Static y el Keyset...
alguien me podria aclarar esto? Pq en todos los tutoriales q consigo abren los recordset de otras maneras sin usar estas constantes, y tendria q cambiar mucho codigo para abrirlas como esta en los ejemplos, y no vale la pena (creo) solo por no saber q significa cada constante...

desde ya muchas gracias.
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

RE:adOpenDynamic y demas

Publicado por Jorge Esposito (29 intervenciones) el 07/05/2002 22:01:04
Cuando va abrir un recordset que te permita actualizar dinámicamente los registros, te puedas mover hacia adelante, hacia atrás y de modo optimista, es decir que las modificaciones que hagan otros usuarios las puedes ver y no restringes a los demás, la puedes hacer asi:

'Primero verificas si hay registro en la base de datos sin utilizar el obsoleto recordcount

rs.Open "SELECT COUNT(*) FROM Tutabla, conexion, adOpenDynamic, adLockOptimistic

'Luego preguntas si existe o no
If rs(0) > 0 then
rs.Close
rs.Open "SELECT * FROM Tutabla", conexion, adOpenDynamic,
Mostrar registros
Else
Msgbox "No hay registros por favor ingrese información ahora"
rs.Close
rs.Open "SELECT * FROM Tutabla", conexion, adOpenDynamic, adLockOptimistic
End If
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

RE:adOpenDynamic y demas

Publicado por Adrian (4 intervenciones) el 07/05/2002 22:16:32
muchas gracias, ahora viendo tu codigo me surgio otra duda...
¿no es muy ineficiente abrir y cerrar un recordset solo para comprobar la cantidad de registros q cumplen una condicion? sinceramente me parece la solucion apropiada, pero me imagino un sistema funcionando con muchos registros y me surge esa inquietud (disculpame si te parece una tontera, pero no me gusta quedarme con dudas).

otra vez, gracias
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

RE:adOpenDynamic y demas

Publicado por Jorge Espósito (29 intervenciones) el 08/05/2002 15:20:15
No amigo Adrián,
te voy a explicar como funcionan los recordsets:

cuando uno abre un recordset con esta instrucción Select:
"SELECT COUNT(*) FROM XXXXX"
No hay condiciones, solamente se guarda en el recordsets
el total de registros que hay en la tabla XXXXX
es decir si hay 50 registros entonces
Mirecordset(0) = 50
Cerramos la tabla
Mirecordset.Close
Ahora bien, si quieres ponerle condiciones:
"SELECT COUNT(*) FROM XXXXX WHERE XXXXX!Sexo=" & chr(34) & "F" & chr(34)

Donde en la tabla solo hay 23 mujeres de 50 personas
Entonces tu recordset solo tendrá
Mirecordset(0)=23

Otro ejemplo:
"SELECT * FROM XXXXX WHERE XXXXX!Cedula=" & 14555555

Si encontró el registro, entonces el recordset lo que va a tener es tan solo 1 registro, que es la persona de la Cedula 14.555.555

Entiendes...

CONCLUSION:

Un recordset no tiene todo el contenido de la tabla de la base de datos
a menos que uno quiera, sólo va a contener aquellos registros que uno desee manipular.
Por eso es más eficiente.
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