RE:Recorrer varios registros
Y que tal algo de (aunque no mucho de) orientación a objetos?
Si defines una estructura con los campos de tu tabla y esta la asignas a una coleccion, puedes navegar la colección y no los registros, cargándolos una vez. Incluso si creas banderas de modificación e inserción, puedes manejar todos los registros y al final guardar los cambios, con el mínimo de acceso a base de datos.
Para entender un poco más de estructuras y colecciones, dirígete a estas páginas:
http://msdn.microsoft.com/es-es/library/ms229031.aspx
http://msdn.microsoft.com/es-es/library/ms132397(VS.95).aspx
Puede ser algo como esto (aunque no necesariamente como esto, por que estoy codificando directo en la página):
Imports System.Collections.ObjectModel
Imports System.Data.OleDb
Public Structure Registro
Public Id as Integer
Public Nombre as String
...
...
'y así para todos los campos en la tabla
End Structure
Public Tabla as Collection(Of Registro)
Public _Cual as Integer 'Será el índice del registro actual
Private Sub CargarTabla()
Dim vtRegistro as Registro
'Creas la conexion
'Creas un comando (voCommand)
'Creas un lector (voReader)
'Conectas y asignas la conexion al comando
'Asignas un query como: select * from tabla
voReader = voCommand.ExecuteReader()
if voReader.HasRows then
while voReader.Read()
vtRegistro = New Registro()
vtRegistro.Id = Lector.GetInt32(0)
vtRegistro.Nombre = Lector.GetString(1)
...
'y así para cada registro
Tabla.Add(vtRegistro)
end while
'desconectas y destruyes todos los objetos creados en este procedimiento
End Sub
Protected Sub Form_Load(...)
Tabla = New Collection(Of Registro)
CargarTabla()
Mostrar(0)
end sub
Private Sub Mostrar(ByVal pCual as Integer)
'asumo que son textbox donde van los datos.
'pCual es el índice o registro que vas a mostrar, cuando inicias, es el registro 0
txtId.Text = Tabla(pCual).Id
txtNombre.Text = Tabla(pCual).Nombre
...
'y así para todos
_Cual = pCual
end sub
'para cada botón de navegación, sucede algo similar:
Protected Sub btnPrimero_Click(...)
Mostrar(0)
end sub
Protected Sub btnAnterior_Click(...)
if _Cual > 0 then Mostrar(_Cual - 1)
end sub
Protected Sub btnSiguiente_Click(...)
if _Cual < Tabla.Count - 1 then Mostrar(_Cual + 1)
end sub
Protected Sub btnUltimo_Click(...)
Mostrar(Tabla.Count - 1)
end sub
'fin del código
Todo esto serviría (con sus adecuaciones, por que no he puesto todo, obviamente), para tablas (o queries) que si tengan registros.
Para controlar modificaciones e inserciones, basta poner dos campos booleanos en tu estructura (uno para modificaciones y otro para inserciones) y comenzarlos en false. Al momento de guardar, basta con recorrer la coleccion buscando estos booleanos como verdaderos, para insertar y modificar, mediante un ExcecuteNonQuery.
Espero que te sirva.
Saludos.