Incluso ahora no te explicas lo suficiente.
Me parece entender que puedes querer esto otro...
Un método que describa como guardar los datos relevqntes de modo que puedas luego obtener un conjunto de ellos filtrando por año.
Bien si fuera esto, como tampoco indicas el método para guardar los datos (asumo que es una base de datos), entonces lo adecuado es
que tengas un campo Año en tu base de datos.
Supongamos que los campos que contiene una tabla son (esta tabla podría llamarse DatosCurso):
IdAlumno: un identificador único autoincrementable enlazado a otra tabla que contiene datos específicos del alumno, (nombre apellidos,fecha nacimiento, teléfono, localidad, calle...)
Grado: el que está cursando actualmente, 1º, 2º, 3,º.... sean en semestres o anualidades...
Materia: El curso que realiza... Psicología, Medicina...
Por tanto sería acorde introducir un campo más llamado año:
Año: año en que el alumno referenciado cursa tal materia y tal grado....
Por tanto tú luego puedes hacer varias funciones para obtener datos de esta tabla (DatosCurso) (o de la tabla DatosAlumno) las más lógicas serían...
(en el código de más abajo se muestra un ejemplo para que todas estas funciones por separado sean 1 sola).
Filtrar por materia:
01º Obtener todos los alumnos que cursan una materia (por ejemplo que estudien psicología)
05º Obtener todos los alumnos que cursan una materia filtrado por grado (por ejemplo que estudian psicología de 5º grado).
03º Obtener todos los alumnos que cursan una materia filtrado por año (por ejemplo que estudian psicología, en 2010)
07º Obtener todos los alumnos que cursan una materia filtrado por grado y año (por ejemplo que estudian psicologia de 5º grado en 2010)
Filtrar por grado:
04º Obtener todos los alumnos que tienen tal grado (por ejmplo todos los que acaban de iniciar (no han cursado 2º grado aún)
06º Obtener todos los alumnos que tienen tal grado filtrado por fecha (por ejmplo todos los que acaban de iniciar (no han cursado 2º grado aún), en 2010)
- el filtrado por grado, fecha y materia sería lo mismo que el 3º caso
Filtrar por fecha:
02º Obtener todos los alumnos que cursaron el año x (por ejmplo que estuvieron matriculados en 2008)
- Filtrar por año y grado es igual 6º
- filtrar por año y materia es igual que 3º
- filtrar por año, grado y materia es igual que 7º
Por tanto la base de estas querys podría ser obtener un recordset a partir de unas cadenas que podrían ser en su base constantes y donde cada vez lo que cambia son los parámetros.
El siguiente código sería un ejemplo de como obtener un recordset sin necesidad de crear tantas funciones explícitamente... para ello primero habría de llamarse a una función que crea una query en base a usar o no cualquiera de los 3 parámetros de filtrado, luego con dicha query pedimos el recordset, queda a tu esfuerzo (aparte de corregir algún fallo en el código, está hecho directamente) volcar el recordset al control/les tal como tengas diseñada la interfaz...
' Prepara una query en base a los parámetros que utilicemos, sean estos cuales sean... si se omiten todos los parámetros, se recogerían todos los registros de dicha tabla.
public function PreparaQuery(byref optional Materia as vaiant, byref optional Fecha as variant, byref optional Grado as variant, optional Cuantos as variant) as string
dim b as string, w as string, m as string, g as string, f as string
if isMissing(cuantos) then
if isNumeric(cuantos) then
b = " TOP " & cstr(cuantos) 'seleccionará los x primeros, esto lo puedes modificar a tu gusto, se expone sólo como ejemplo de sugerencia
else
b= " *" ' seleccionará todos
end if
else
b= " *" ' seleccionará todos
end if
' se usan los 3 campos (siempre que no se haya omitido alguno), se prepara esta parte en base a este hecho
m= Subwhere(Materia, "Materia")
f= Subwhere(Fecha, "Fecha")
g= Subwhere(Grado, "Grado")
' Si materia no fue omitido
if m <>"" then w = " WHERE " & m
if w <>"" then
if f <>"" then w = w " AND " & f ' si fecha no fue omitido
else ' materia fue omitido
if f <>"" then w = " WHERE " & f ' si fecha no fue omitido
end if
' si al menos materia o fecha no fueron omitidos
if w <>"" then
if g <>"" then w = w " AND " & g ' si grado no fue omitido
else ' materia y fecha fueron omitidos
if g <>"" then w = " WHERE " & g ' si grado no fue omitido
end if
PreparaQuery = "Select" & b & " FROM tblDatosCurso" & iif( w<>"", w,"")
end function
' compone parte de los campos para el filtro.
private function Subwhere( byref Valor as variant, byval Campo as string) as string
dim w as string
on local error goto SaleWhere
if not ismissing(Valor ) then
w = ucase$(trim$((Valor ))
end if
if w <> "" then
w = " " & chr(34) & Campo & chr(34) & " = " & w
end if
Subwhere=w
exit function
SaleWhere:
Subwhere=""
end function
' supongamos que utilizamos por debajo un control adodc...
public function GetDatosCurso(byval query as string) as ADODB.recordset
Dim Cmd As ADODB.Command, Conex As ADODB.Connection
if query <> "" then
Set Conex = New ADODB.Connection
Conex.Open Adodc1.ConnectionString ' utilizamos la conexión establecida con el objeto Adodc1
Set Cmd = New ADODB.Command
With Cmd
Set .ActiveConnection = Conex
.CommandType = adCmdText
.CommandText = query
set GetDatosCurso = .Execute(, , adCmdText)
End With
end if
end function
NOTA: el código está puesto 'al vuelo' de modo que a lo mejor necesitas hacer alguna corrección, (en la query sobretodo)
Luego de obtenido el recorset si se quiere obtener datos del alumno, fuerza a seleccionar una fila (del control donde exhibas los datos) y en conjunto con un botón (o sin él, directamente al cambiar de fila), obtén los datos del alumno a través de su id alumno:
"SELECT * FROM tblDatosAlumno WHERE idalumno = fila(idseleccionado)" ' fila(idseleccionado) recoge el dato idAlumno correspondiente al registro seleccionado.
y vuelcas dicho contenido , sobre unos controles al efecto...
En fin no sé si esto lo que querías, porque no has sido lo suficientemente claro... o por lo menos yo no he terminado de comprender lo que reclamas.