Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Movelast en un objeto recordset - vb6.0

Estas en el tema de Movelast en un objeto recordset - vb6.0 en el foro de Visual Basic clásico en Foros del Web. Tengo un matriz de controles para buscar registros de esta manera Private Sub cmdSubmenu_Click(Index As Integer) Select Case Index Case 0 'Primero rsCargo.MoveFirst Case 1 ...
  #1 (permalink)  
Antiguo 21/02/2008, 14:34
 
Fecha de Ingreso: enero-2008
Ubicación: Lima - Perú
Mensajes: 1.127
Antigüedad: 16 años, 3 meses
Puntos: 10
Movelast en un objeto recordset - vb6.0

Tengo un matriz de controles para buscar registros de esta manera

Private Sub cmdSubmenu_Click(Index As Integer)
Select Case Index
Case 0 'Primero
rsCargo.MoveFirst
Case 1 'Siguiente
rsCargo.MovePrevious
If rsCargo.BOF Then rsCargo.MoveFirst
Case 2 'Anterior
rsCargo.MoveNext
If rsCargo.EOF Then rsCargo.MoveLast
Case 3 'Ultimo
rsCargo.MoveLast
End Select
End Sub

El problema es que al pulsar cualquiera de los 4 botones la grilla se visualiza de esta manera
http://img.tomatone.net/big/0011241.JPG pero yo quiero que se visualize de esta forma
http://img.tomatone.net/big/0011242.JPG
Que propiedad o que codigo necesito para lograrlo

saludos
  #2 (permalink)  
Antiguo 21/02/2008, 15:05
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Re: Movelast en un objeto recordset - vb6.0

Bueno, eso es una propiedad del control DataGrid que no está disponible en diseño, así que lo tendrás que poner en ejecución al cargar el DataGrid

DataGrid1.MarqueeStyle = dbgHighlightRow
  #3 (permalink)  
Antiguo 21/02/2008, 18:32
 
Fecha de Ingreso: enero-2008
Ubicación: Lima - Perú
Mensajes: 1.127
Antigüedad: 16 años, 3 meses
Puntos: 10
Re: Movelast en un objeto recordset - vb6.0

Gracias por responder Avellaneda, disculpa que insista y ahonde mas en la pregunta coloque la propiedad MarqueeStyle al cargar el formulario pero presenta un problema, al ejecutarse las lineas de color rojo

Case 1 'Siguiente
rsCargo.MovePrevious
If rsCargo.BOF Then rsCargo.MoveFirst
Case 2 'Anterior
rsCargo.MoveNext
If rsCargo.EOF Then rsCargo.MoveLast
No se si me expreso bien pero se pierde el enfoque del datagrid y solo se vuelve a activar al selecionar una fila y pulsando las teclas arriba o abajo

saludos
  #4 (permalink)  
Antiguo 22/02/2008, 02:37
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Re: Movelast en un objeto recordset - vb6.0

Al salir del "Select" dale el foco al Grid:

Código:
...
End Select
DataGrid.SetFocus
Por cierto, veo que lo tienes al revés (Pasar al siguiente registro es MoveNext y al anterior, MovePrevious)
  #5 (permalink)  
Antiguo 22/02/2008, 10:33
 
Fecha de Ingreso: enero-2008
Ubicación: Lima - Perú
Mensajes: 1.127
Antigüedad: 16 años, 3 meses
Puntos: 10
Re: Movelast en un objeto recordset - vb6.0

Me exprese mal, el problema no es la perdida del enfoque que se soluciona con el .setfocus me explico mejor.Por ejemplo al llegar a la ultima fila del datagrid se
muestra de esta manera
http://img.tomatone.net/big/0011232.jpg
al estar en la ultima fila y precionar el boton siguiente se ejecuta esta linea de codigo
rsCargo.MoveNext
If rsCargo.EOF Then rsCargo.MoveLast
Y el datagrid se muestra de esta manera
http://img.tomatone.net/big/0011244.jpg
Es decir pierde el valor de la propiedad MarqueeStyle intente hacer esto
rsCargo.MoveNext
If rsCargo.EOF Then rsCargo.MoveLast
DataGrid1.MarqueeStyle = dbgHighlightRow
tambien colocando la linea despues del end select y nada la unica forma de volver a activar la propiedad MarqueeStyle es haciendo click en una fila del datagrid y precionado una tecla que puede ser arriba o abajo, creo que tiene algon que ver con los eventos lostfocus, rowcolchange,keydown,keyup pero no se como hacerlo

espero me puedas ayudar estare esperando tu respuesta y espero no ser muy pesado al hacer este tipo de pregunta

saludos
  #6 (permalink)  
Antiguo 22/02/2008, 13:51
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Re: Movelast en un objeto recordset - vb6.0

Bueno, lo primero que tienes que tener en cuenta es que la propiedad EOF es verdadero cuando el registro activo es el siguiente al último del recordset y la instrucción MoveLast lo manda al último, por lo tanto EOF es False. Igual para BOF (anterior al primero).

Debes jugar con la propiedad AbsolutePosition del recordset que dá de valor 1 en el primer registro y RecordCount en el último, activando o desactivando los botones de posición.

Para que funcione tu código, podrías poner algo así:

Código:
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0  ' ir al primer registro
     rs.MoveFirst
Case 1  ' ir al siguiente
    rs.MoveNext
Case 2  ' ir al anterior
   rs.MovePrevious
Case 3  ' ir al último
    rs.MoveLast
End Select
Command1(1).Enabled = IIf(rs.AbsolutePosition = rs.RecordCount, False, True)
Command1(3).Enabled = IIf(rs.AbsolutePosition = rs.RecordCount, False, True)
Command1(0).Enabled = IIf(rs.AbsolutePosition = 1, False, True)
Command1(2).Enabled = IIf(rs.AbsolutePosition = 1, False, True)
End Sub
Por supuesto que tanto en el Command1(0) como el (2), la propiedad Enabled al cargar debe de estar a False (lo puedes hacer en el Load o en diseño)

Espero que así te funcione.
  #7 (permalink)  
Antiguo 22/02/2008, 15:52
 
Fecha de Ingreso: enero-2008
Ubicación: Lima - Perú
Mensajes: 1.127
Antigüedad: 16 años, 3 meses
Puntos: 10
De acuerdo Re: Movelast en un objeto recordset - vb6.0

Excelente respuesta acertada aunque el foco del marqueestyle se pierde al clickear otros botones como añadir, eliminar en fin para cerrar el tema, es posible declarar un control datagrid de solo lectura ya que solo utilizo los eventos click y dobleclick de las fila y si por error se cambia algun dato se generan errores.
Gracias por el interes

saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:36.