Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con el RecordSet (https://www.clubdelphi.com/foros/showthread.php?t=77193)

juliannemiro 01-01-2012 18:55:46

Problema con el RecordSet
 
Hola a Todos.
Antes que nada 2 cosas. Primero, muy feliz 2012 y segundo gracias por entrar a leer mi problema.

Les cuento que tengo un problema con el recordset.
Estoy haciendo algo tan simple como recorrer una tabla filtrando informacion con un where. Pero tengo un problema con los resultados, evidentemente algo estoy haciendo mal.
Ejecuto el programa mostrando -mientras no sea EOF- un showmessage con el resultado que va obteniendo. El problema es que en vez de mostrarme los 7 registros que debería, me muestra el primero, y luego 6 veces el último registro.
No se si me explico. En vez de mostrarme por ejemplo 1,2,3,4,5,6,7 me muestra 1,7,7,7,7,7,7

El objetivo de lo que deseo hacer es recorrer una tabla y mientras el id_curso = 3, me traiga todos los alumnos para yo después poder asignarles una fecha y la asistencia dando de alta un nuevo registro. (esto lo hago en un segundo paso, que esta comentado y todavía no fue probado.)

-Trabajo con Delphi 7 y SQL Server 2000
-Tengo el adoable, adoquery y datasource de la tabla con la que tengo este problema (Alumnos_Cursos)
-La tabla alumnos_cursos tiene solamente los campos id_alumno e id_curso.

Les dejo el código que estoy utilizando.

Saludos y gracias por llegar leyendo hasta esta altura del post!

Código Delphi [-]
procedure TFormAsistencia.BitBtn2Click(Sender: TObject);
var
w_id_curso, w_id_alumno: string;
// w_id_alumno : integer;
begin
  w_id_curso:= EditCursoId.text;

  with ADOQueryAlumnos_Cursos do
  begin
    Close;
    SQL.Clear;
    SQL.add('select * from Alumnos_Cursos where id_curso = 3 order by id_alumno ');     //''' + w_id_curso + ''' order by id_alumno ');
    showmessage(ADOQueryAlumnos_Cursos.sql.text);
    Open;
    Active;
      if (ADOQueryAlumnos_Cursos.RecordCount > 0 ) then
      begin
        while not ADOQueryAlumnos_Cursos.Recordset.EOF do
        begin
          showmessage(ADOQueryAlumnos_Cursos.Recordset.Fields['id_alumno'].value);
          w_id_alumno :=intToStr(ADOQueryAlumnos_Cursos.Recordset.Fields['id_alumno'].value);
          showmessage('variable: '+ w_id_alumno );
          next;
        {
          self.ADOTableAsistencias.Open;
          self.ADOTableAsistencias.Insert;
          self.ADOTableAsistencias.FieldByName('id_alumno').AsInteger:=StrToInt(w_id_alumno);
          self.ADOTableAsistencias.FieldByName('fecha').AsDateTime:=DateTimePicker1.datetime;
          self.ADOTableAsistencias.FieldByName('n_anioLectivo').AsInteger:= StrToInt(EditCursoAnioLect.text);
          self.ADOTableAsistencias.FieldByName('id_asistencias_tipo').AsInteger:= 1;
          self.ADOTableAsistencias.FieldByName('b_justificado').AsString:= 'S' ;
          self.ADOTableAsistencias.FieldByName('b_computa').AsString:= 'S';
          self.ADOTableAsistencias.Post;
          self.ADOTableAsistencias.Close;
          }
          //next;
          end;
      end;

Caral 01-01-2012 19:15:18

Hola
Código Delphi [-]
procedure TFormAsistencia.BitBtn2Click(Sender: TObject);
var
w_id_curso, w_id_alumno: string;
// w_id_alumno : integer;
begin
   w_id_curso:= EditCursoId.text;

   with ADOQueryAlumnos_Cursos do
   begin
   Close;
   SQL.Text:= 'select * from Alumnos_Cursos where id_curso = 3 order by id_alumno ';     //''' + w_id_curso + ''' order by id_alumno ');
   Active:= True;
   if (ADOQueryAlumnos_Cursos.RecordCount > 0 ) then
   begin
   while not ADOQueryAlumnos_Cursos.Recordset.EOF do
   begin
   showmessage(ADOQueryAlumnos_Cursos.sql.text); //muestra el contenido en el ciclo
   showmessage(ADOQueryAlumnos_Cursos.Recordset.Fields['id_alumno'].value);
   w_id_alumno := intToStr(ADOQueryAlumnos_Cursos.Recordset.Fields['id_alumno'].value);
   showmessage('variable: '+ w_id_alumno );
   ADOQueryAlumnos_Cursos.next;
   end;
   end;
end;
Saludos

juliannemiro 01-01-2012 20:33:50

Gracias por contestar!
Probé tu código y en un principio tampoco anduvo, asique me puse a recorrer todo lo que había hecho y el problema finalmente era el adoquery.
Ya pude resolverlo.

Muchas gracias!


La franja horaria es GMT +2. Ahora son las 15:09:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi