Ayuda con ADO y recordset
Moderador: Moderadores
Ayuda con ADO y recordset
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")
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")
El error...
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
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
Problemas con RS
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
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
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.
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.
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
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