Ayuda con ADO y recordset

Cuestiones y dudas acerca de lenguajes de programación diversos.

Moderador: Moderadores

Avatar de Usuario
tx0ni

Ayuda con ADO y recordset

Mensaje por tx0ni » Jue Abr 07, 2005 11:40 am

hola!
Tengo una aplicacion que recoje datos de una BD de acces y lo presenta en listbox, lo que pasa esque cunado saco el primer reg me dice que ya no ha mas. Os paso el codigo, puede ser que el recorset este mas o yo que se

Dim conn As ADODB.Connection
Dim record As ADODB.Recordset

Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=D:\Proyecto SIMAcv\VB\CP_Sima CV\Procesos_1.mdb"
conn.Open

Set record = New ADODB.Recordset
record.Open "Materiales", conn, adOpenKeyset, adLockReadOnly
record.MoveFirst
List1.AddItem record("nombre")

Avatar de Usuario
Herna Henao

El error...

Mensaje por Herna Henao » Vie Abr 08, 2005 5:57 am

Hola segun su codigo veo que le hace falta:

record.Open "Materiales", conn, adOpenKeyset, adLockReadOnly
record.MoveFirst ' puede sobrar o escribir refresh
do while not record.eof 'fin del archivo
List1.AddItem record("nombre")
record.move next
loop

si algo estoy en hernanhenao@caliescali.com

tx0ni
Junior
Mensajes: 8
Registrado: Jue Abr 07, 2005 11:51 am
Contactar:

Mensaje por tx0ni » Vie Abr 08, 2005 8:22 am

El problema no es ese. La tabla de la base de datos consta de mas de 1 reg, pero el ado piensa que solo hay uno. En cuanto saco el primer reg pone que esta en EOF ¿? No es raro. Creo que puede ser la forma de abrir el recorset..... NECESITO AYUDA

Avatar de Usuario
Alvarc

Problemas con RS

Mensaje por Alvarc » Vie Abr 08, 2005 7:11 pm

Amigo, creo que no notaste donde esta diferencia.
Primero, si el código que utilizas para extraer los registros de la base de datos, es como lo indicaste:

Set record = New ADODB.Recordset
record.Open "Materiales", conn, adOpenKeyset, adLockReadOnly
record.MoveFirst
List1.AddItem record("nombre")

Solo estas extrayendo un solo registro... le estas diciendo al ADO que se situe en el primer registro y lo cargue. EOF es lógico que se coloque a TRUE porque la última lectura llegó al final de registro.... la solucion la plantea el amigo Herna Henao con el siguiente código:

record.Open "Materiales", conn, adOpenKeyset, adLockReadOnly
record.MoveFirst 'Mueve el puntero al primer registro para mostrarlo, etc.
DO WHILE NOT record.eof 'Mientras no llegue al final del RS seguir.
List1.AddItem record("nombre")
record.Movenext 'Mueve al siguiente registro.
LOOP 'termina cuando sea TRUE

Por último comprueba la propiedad: record.Recordcount algo asi:
record.Open "Materiales", conn, adOpenKeyset, adLockReadOnly
debug.print record.recordcount
con eso podras determinar cuantos registros efectivos esta leyendo el recordset de tu bd.

alvarc_consulting@hotpop.com

tx0ni
Junior
Mensajes: 8
Registrado: Jue Abr 07, 2005 11:51 am
Contactar:

Mensaje por tx0ni » Lun Abr 11, 2005 8:44 am

Yo no se si me esplico bien:

Me da igual hacer el bucle para que me saque todos los reg, poner cun boton que me avance de reg, solo me saca uno!!!Pero no poque solo haga un "movefirst" o"next", sino porque el recorset solo me recupera UNO SOLO REGISTRO!!!!!!
No quiero parecer borde, pero llevo 2 dias haciendo el tonto en el curro y me van a colgar.
Lo intente con el codigo de henao... pero tampoco.

tx0ni
Junior
Mensajes: 8
Registrado: Jue Abr 07, 2005 11:51 am
Contactar:

Mensaje por tx0ni » Mar Abr 12, 2005 9:04 am

Option Explicit
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset


Private Sub Form_Load()
Const path As String = "D:\Proyecto SIMAcv\BD\Procesos_1.mdb"
Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset
With cnn
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=D:\Proyecto SIMAcv\VB\CP_Sima CV\Procesos_1.mdb"
.Open
End With

rs.Open "select nombre from materiales", cnn, adOpenDynamic, adLockOptimistic
rs.MoveFirst
Do While Not rs.EOF
Combo1.AddItem rs.Fields(0)
rs.MoveNext
Loop
Label1.Caption = rs.RecordCount
End Sub

tx0ni
Junior
Mensajes: 8
Registrado: Jue Abr 07, 2005 11:51 am
Contactar:

Mensaje por tx0ni » Jue Abr 14, 2005 11:46 am

No quiero ser pesado, pero mi jefe se quiere hacer una corbato con mis pelotas :-?
Hos he pasado el codigo, exarle un vistazo

Responder