Página 1 de 1

Ayuda con ADO y recordset

Publicado: Jue Abr 07, 2005 11:40 am
por tx0ni
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")

El error...

Publicado: Vie Abr 08, 2005 5:57 am
por Herna Henao
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

Publicado: Vie Abr 08, 2005 8:22 am
por tx0ni
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

Problemas con RS

Publicado: Vie Abr 08, 2005 7:11 pm
por Alvarc
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

Publicado: Lun Abr 11, 2005 8:44 am
por tx0ni
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.

Publicado: Mar Abr 12, 2005 9:04 am
por tx0ni
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

Publicado: Jue Abr 14, 2005 11:46 am
por tx0ni
No quiero ser pesado, pero mi jefe se quiere hacer una corbato con mis pelotas :-?
Hos he pasado el codigo, exarle un vistazo