Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema Al Llenar Sort (https://www.clubdelphi.com/foros/showthread.php?t=84465)

monfa 21-10-2013 23:26:42

Problema Al Llenar Sort
 
AYUDA LLENADO DE GRILLA
Hola buenos dias me pueden ayudar,
Estoy haciendo una agenda de citas con un SortGrid
Tengo un error por que me muestra asi

7:00 1 53456765 OSCAR PALACIOS
7:45 1
7:45 2
7:45 3
8:30 1
8:30 2
8:30 3

y deberia mostar


7:00 1 53456765 OSCAR PALACIOS
7:00 2
7:00 3
7:45 1
7:45 2
7:45 3
8:30 1
8:30 2
8:30 3
9:15 1
9:15 2
9:15 3

Donde el interval = intervalo del dia que en este caso son 45

Código Delphi [-]
procedure TF_ag.llena;
var
  hora : TTime;
  fila, interval, cam : Integer;
  mensaje : String;
  i, j, k, l: Integer;
begin
  fila        := 1;
  interval    := intervalo(MC1.Date);
  if not(Pro.fieldValues['HORA_INICIAL'] = NULL) then
  begin
      hora    := Pro.fieldValues['HORA_INICIAL'];
        cam     := Pro.fieldValues['CAMILLA'];
        Spro.RowCount  := 2;
        if intervalo(MC1.Date) > 0 then
         begin
                ZQagenda.Close;
                  ZQagenda.SQL.Clear;
                  ZQagenda.SQL.Add('SELECT P.NOMBRE,. A* FROM PACIENTES P, AGENDA A  WHERE P.CEDULA = A.CEDULA AND 
                                                                 A.COD_P ='+QuotedStr(Pro.fieldValues['COD_P'])  AND A.FECHA = '+QuotedStr(DateToStr(MC1.Date)) ORDER BY A.HORA ASC');
                 ZQagenda.Open;
                 If not(Pro.fieldValues['HORA_INICIAL'] = Pro.fieldValues['HORA_FINAL']) then
        begin
                     while (CompareTime(hora, Pro.fieldValues['HORA_INI']) >= 0) and
                                                             (CompareTime(hora, Pro.fieldValues['HORA_FIN']) < 0) do  //
                      begin
                          if ZQagenda.RecordCount > 0 then
                            begin
                    ZQagenda.First;
                                  with SGag do
                                  begin
                                        for j:= 0 to ZQagenda.RecordCount - 1 do
                        begin
                            if ((CompareTime(ZQagenda.FieldValues['HORA'],hora) < 0) and
                                                                (CompareTime(ZQagenda.FieldValues['HORA'],hora-(interval)) > 0)) or
                                                                (CompareTime(ZQagenda.FieldValues['HORA'],hora) = 0)  then
                                              begin
                                                Cells[0, fila]  := FormatDateTime('hh:nn am/pm',ZQagenda.FieldValues['HORA_INI']);
                                                 if not(ZQagenda.FieldValues['CEDULA']= NULL) then
                                                begin
                                                      if not(ZQagenda.FieldValues['CEDULA'] = '0') then
                                                            Cells[2, fila]  := ZQagenda.FieldValues['CEDULA']
                                                      else
                                                            Cells[2, fila]  := '';
                                                end;
                                                if not(ZQagenda.FieldValues['NOMBRE'] = NULL) then
                                                begin
                                                      if not(ZQagenda.FieldValues['CEDULA'] = '0') then
                                                            Cells[3, fila]  := ZQagenda.FieldValues['NOMBRE']
                                                      else
                                                            Cells[3, fila]  := '';
                                               end;
                                                SGag .RowCount  := SGag .RowCount + 1;
                                                fila := fila + 1;
                                          end else
                                          begin
                                              for l := 1 to cam do 
                                            begin
                                                  SGag .Cells[0, fila]  := FormatDateTime('hh:nn am/pm',hora);
                                                  SGag .Cells[1, fila]  := IntToStr(l);
                                                  SGag .Cells[2, fila]  := '';
                                                  SGag .Cells[3, fila]  := '';
                                SGag .RowCount        := SGag .RowCount + 1;
                                                  fila := fila + 1;
                                            end; 
                                          end; 
                                          ZQagenda.Next;
                                    end; 
                            end else
                            begin
                               for i := 1 to cam 
                                 begin
                                     SGag .Cells[0, fila]  := FormatDateTime('hh:nn am/pm',hora);
                                      SGag .Cells[1, fila]  := IntToStr(i);
                                      SGag .Cells[2, fila]  := '';
                                      SGag .Cells[3, fila]  := '';
                                     SGag .RowCount        := SGag .RowCount + 1;
                                      fila  := fila + 1;
                                 end;
                            end;  
                            hora:= hora+(interval);
                      end; 
                 end; 
          end;
 end;
end;

ecfisa 22-10-2013 00:54:05

Hola monfa y bienvenido a Club Delphi :)

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

Por favor cuando incluyas código en tus mensaje utiliza TAG's para darle más legibilidad, como explica la imágen:


(Esta vez ya las agregué en tu mensaje ;))

Saludos :)

Neftali [Germán.Estévez] 22-10-2013 08:43:49

Es difícil seguir el código que has colocado, pues faltan muchos componentes para poder reproducirlo.
Lo que se me ocurre es que tal vez estés "machacando" algunos valores. Es decir, que los estés pintando todos, pero unos encima de otros, por lo tanto quedan los últimos.

Lo más sencillo es que coloques unos breakpoints y ejecutes "paso a paso".
Uno en el FOR, para asegurarte de cuantas veces pasa, y otro el los diferentes lugares donde rellenas celdas, para ver lo que estás escribiendo.

Otra opción si con eso no te aclaras es utilizar un pequeño LOG. Coloca un Memo en el formulario (de forma temporal) y cada vez que pintas una celda añade una línea como esta:

Código Delphi [-]
  // ATexto lo que se rellena en la celda y fila y columna enteros
  Memo1.Lines.Add(Format('(%d,%d) = %s',[ATexto, fila, columna]));

De esta forma al acabar tendrás una lista de lo que has guardado en cada celda.


La franja horaria es GMT +2. Ahora son las 18:37:09.

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