Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   FireMonkey (https://www.clubdelphi.com/foros/forumdisplay.php?f=50)
-   -   Consulta con muchos if (https://www.clubdelphi.com/foros/showthread.php?t=96185)

giantonti1801 05-04-2023 00:05:18

Consulta con muchos if
 
amigo tengo una situación: debo hacer una consulta a una tabla de la base de dato sql Server donde puede haber varios resultado y todos pueden ser valido: a ver si logro explicarme bien:
En una tabla tengo una columna la cual se almacena una información: (TRATAMIENTO, EXAMEN, LABORATORIO, FICHA MEDICA) en otra columna de este misma está el número de cliente. Ahora bien: Partimos de un principio que un cliente puede tener un TRATAMIENTO o un EXAMEN, o un LABORATORIO o FICHA MEDICA pero en muchos casos un solo cliente puede tener 3 o incluso todas las condiciones. me problema es que si el cliente tiene un solo caso me funciona perfecto pero cuando tienes varios casos siempre me trae solo uno. Le muestro un ejemplo de la tabla:

Código SQL [-]
CLIENTE       TIPO
    1              Tratamiento
    1              Laboratorio
    1              EXAMEN
    2              Tratamiento

Espero se pueda entender bien y finalmente esta es el codigo que estoy usando:
Código Delphi [-]
var
 Filtro :string;
 begin
      DataModule1.UniQueryFichaDoc.Filtered := False;
      Filtro := 'INSTRUT = '''+DataModule1.InstRut+'''and REGFICHA = '''+label1.Text+'''';
      DataModule1.UniQueryFichaDoc.Filter := Filtro;
      DataModule1.UniQueryFichaDoc.Filtered := True;
      DataModule1.UniQueryFichaDoc.Active := true;
      begin
          if DataModule1.UniQueryFichaDocTIPODOCUMENTO.AsString = 'TRATAMIENTO' then
                begin
                TMSFMXToolBarButton5.Enabled := true;
                TMSFMXToolBarButton5.Opacity := 1;
                end
                else
                begin
                TMSFMXToolBarButton5.Enabled := False;
                TMSFMXToolBarButton5.Opacity := 0.3;
                end;
            if DataModule1.UniQueryFichaDocTIPODOCUMENTO.AsString = 'EXAMEN' then
                begin
                TMSFMXToolBarButton6.Enabled := true;
                TMSFMXToolBarButton6.Opacity := 1;
                end
                else
                begin
                TMSFMXToolBarButton6.Enabled := False;
                TMSFMXToolBarButton6.Opacity := 0.3;
                end;
            if DataModule1.UniQueryFichaDocTIPODOCUMENTO.AsString = 'LABORATORIO' then
                begin
                TMSFMXToolBarButton13.Enabled := true;
                TMSFMXToolBarButton13.Opacity := 1;
                end
                else
                begin
                TMSFMXToolBarButton13.Enabled := False;
                TMSFMXToolBarButton13.Opacity := 0.3;
                end;
            if DataModule1.UniQueryFichaDocTIPODOCUMENTO.AsString = 'FICHA MEDICA' then
                begin
                TMSFMXToolBarButton17.Enabled := true;
                TMSFMXToolBarButton17.Opacity := 1;
                end
                else
                begin
                TMSFMXToolBarButton17.Enabled := False;
                TMSFMXToolBarButton17.Opacity := 0.3;
                end;

          end;


 end;

pgranados 05-04-2023 00:53:14

¿Estas recorriendo tu tabla para verificar los demás registros?

giantonti1801 05-04-2023 01:49:38

Cita:

Empezado por pgranados (Mensaje 550991)
¿Estas recorriendo tu tabla para verificar los demás registros?

almeno eso es lo que quiero hacer pero talvez por novato y desconocimiento no lo estoy haciendo correctamente

mamcx 05-04-2023 04:25:21

No se si entendi, pero esto no es un simple

Código SQL [-]
SELECT * FROM tratamientos WHERE cliente = ?

Neftali [Germán.Estévez] 05-04-2023 10:24:22

Cita:

Empezado por pgranados (Mensaje 550991)
¿Estas recorriendo tu tabla para verificar los demás registros?

Yo creo que es esto.
En tu código sólo estás realizando los cambios sobre el registro actual (que debería ser el primero), pero en ningún momento estás haciendo un recorrido por todos los registros de un cliente.

Una vez hecho el Active, que ejecuta la consulta o abre la tabla, debería haber algo así:

Código Delphi [-]
// Activar el dataset (se posiciona en el primero)
DataModule1.UniQueryFichaDoc.Active := true; 
// mientras haya registros en el dataset...
while not DataModule1.UniQueryFichaDoc.eof do begin

  // hacer lo que sea con el regiustro activo...
  ... 
  // siguiente registro
  DataModule1.UniQueryFichaDoc.Next;
end;

Neftali [Germán.Estévez] 05-04-2023 10:58:09

Cita:

Empezado por giantonti1801 (Mensaje 550990)
Espero se pueda entender bien y finalmente esta es el codigo que estoy usando:

Ese código con tantos IF habría que refactorizarlo para no tener tanto Copy&Paste. ;)

pgranados 05-04-2023 16:55:55

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 551000)
Yo creo que es esto.
En tu código sólo estás realizando los cambios sobre el registro actual (que debería ser el primero), pero en ningún momento estás haciendo un recorrido por todos los registros de un cliente.

Una vez hecho el Active, que ejecuta la consulta o abre la tabla, debería haber algo así:

Código Delphi [-]
// Activar el dataset (se posiciona en el primero)
DataModule1.UniQueryFichaDoc.Active := true; 
// mientras haya registros en el dataset...
while not DataModule1.UniQueryFichaDoc.eof do begin

  // hacer lo que sea con el regiustro activo...
  ... 
  // siguiente registro
  DataModule1.UniQueryFichaDoc.Next;
end;

OFFTopic:

Maestro, usted que todo lo sabe.

¿Por qué mucha gente prefiere utilizar un while en lugar de un For?

Saludos.

Neftali [Germán.Estévez] 05-04-2023 17:20:39

Cita:

Empezado por pgranados (Mensaje 551006)
Maestro, usted que todo lo sabe.

Ni mucho menos, me queda muuuuucho por aprender... :o

Cita:

Empezado por pgranados (Mensaje 551006)
¿Por qué mucha gente prefiere utilizar un while en lugar de un For?

WHILE cuando no sabes el número de elementos a procesar, pero puedes evaluar una condición.
FOR cuando sabes de antemano el número de elementos a procesar.

Es cierto que donde puedes usar un FOR, también puedes usar un WHILE (llevando tú el contador), pero no al contrario.

Y luego supongo que están las preferencias, manías, costumbres de cada uno... :D:D

Casimiro Notevi 05-04-2023 18:44:10

Cita:

Empezado por pgranados (Mensaje 551006)
Maestro, usted que todo lo sabe.

Realmente, [Neftali] es el nombre del bot de la I.A. de clubdelphi, puedes preguntarle lo que quieras porque siempre te dará una respuesta automática y funcional ;)

giantonti1801 06-04-2023 14:10:54

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 551000)
Yo creo que es esto.
En tu código sólo estás realizando los cambios sobre el registro actual (que debería ser el primero), pero en ningún momento estás haciendo un recorrido por todos los registros de un cliente.

Una vez hecho el Active, que ejecuta la consulta o abre la tabla, debería haber algo así:

Código Delphi [-]
// Activar el dataset (se posiciona en el primero)
DataModule1.UniQueryFichaDoc.Active := true; 
// mientras haya registros en el dataset...
while not DataModule1.UniQueryFichaDoc.eof do begin

  // hacer lo que sea con el regiustro activo...
  ... 
  // siguiente registro
  DataModule1.UniQueryFichaDoc.Next;
end;

Hola amigos realice todo tipo de pruebas pero con el mismo resultado solo me trae el primer registro por alguna razón el filtro no esta buscando el siguiente registro para evaluarlo. envio el codigo a ver si ustedes me ayudan a edintificar el porque siempre hace la consulta al primer registro:
Código Delphi [-]
 begin
      //DataModule1.UniQueryFichaDoc.Filtered := False;
      //Filtro := 'INSTRUT = '''+DataModule1.InstRut+'''and REGFICHA = '''+label1.Text+'''';
      //DataModule1.UniQueryFichaDoc.Filter := Filtro;
      //DataModule1.UniQueryFichaDoc.Filtered := True;
      //DataModule1.UniQueryFichaDoc.Active := true;
      //
      DataModule1.UniQueryConsultaDOC.Close;
      DataModule1.UniQueryConsultaDOC.sql.Clear;
      DataModule1.UniQueryConsultaDOC.sql.Add('select REGPAC, TIPODOCUMENTO,REGFICHA, INSTRUT, FICPAC from fichadoc');
      DataModule1.UniQueryConsultaDOC.SQL.Add('where instrut = :INSTRUT and REGFICHA = :REGFICHA');
      DataModule1.UniQueryConsultaDOC.ParamByName('INSTRUT').AsString := datamodule1.InstRut;
      DataModule1.UniQueryConsultaDOC.ParamByName('REGFICHA').AsString := Label1.text;
      //**DataModule1.UniQueryConsultaDOC.ParamByName('TIPODOCUMENTO').AsString := 'TRATAMIENTO';
      //**DataModule1.UniQueryConsultaDOC.ParamByName('TIPODOCUMENTO').AsString := 'EXAMEN';
      //**DataModule1.UniQueryConsultaDOC.ParamByName('TIPODOCUMENTO').AsString := 'LABORATORIO';
      //**DataModule1.UniQueryConsultaDOC.ParamByName('TIPODOCUMENTO').AsString := 'FICHA MEDICA';
      DataModule1.UniQueryConsultaDOC.open;
      DataModule1.UniQueryConsultaDOC.First;
      while not DataModule1.UniQueryConsultaDOC.eof do


         begin
           if DataModule1.UniQueryConsultaDOCTIPODOCUMENTO.AsString = 'TRATAMIENTO' then
                begin
                TMSFMXToolBarButton5.Enabled := true;
                TMSFMXToolBarButton5.Opacity := 1;
                end
                else
                begin
                TMSFMXToolBarButton5.Enabled := False;
                TMSFMXToolBarButton5.Opacity := 0.3;
                end;
         //DataModule1.UniQueryConsultaDOC.Next;
         //end;

         //begin
            if DataModule1.UniQueryConsultaDOCTIPODOCUMENTO.AsString = 'EXAMEN' then
                begin
                TMSFMXToolBarButton6.Enabled := true;
                TMSFMXToolBarButton6.Opacity := 1;
                end
                else
                begin
                TMSFMXToolBarButton6.Enabled := False;
                TMSFMXToolBarButton6.Opacity := 0.3;
                end;
         //       DataModule1.UniQueryConsultaDOC.Next;
         //end;

         //begin
            if DataModule1.UniQueryConsultaDOCTIPODOCUMENTO.AsString = 'LABORATORIO' then
                begin
                TMSFMXToolBarButton13.Enabled := true;
                TMSFMXToolBarButton13.Opacity := 1;
                end
                else
                begin
                TMSFMXToolBarButton13.Enabled := False;
                TMSFMXToolBarButton13.Opacity := 0.3;
                end;
         //       DataModule1.UniQueryConsultaDOC.Next;
         //end;

         //begin
            if DataModule1.UniQueryConsultaDOCTIPODOCUMENTO.AsString = 'FICHA MEDICA' then
                begin
                TMSFMXToolBarButton17.Enabled := true;
                TMSFMXToolBarButton17.Opacity := 1;
                end
                else
                begin
                TMSFMXToolBarButton17.Enabled := False;
                TMSFMXToolBarButton17.Opacity := 0.3;
                end;

            DataModule1.UniQueryConsultaDOC.Next;
         end;
           //
      //end;
         //      DataModule1.UniQueryConsultaDOC.Next;
 end;

Casimiro Notevi 06-04-2023 14:59:44

Según tu código:

Código Delphi [-]
begin 
  DataModule1.UniQueryConsultaDOC.Close; 
  DataModule1.UniQueryConsultaDOC.sql.Clear; 
  DataModule1.UniQueryConsultaDOC.sql.Add('select REGPAC, TIPODOCUMENTO,REGFICHA, INSTRUT, FICPAC from fichadoc'); 
  DataModule1.UniQueryConsultaDOC.SQL.Add('where instrut = :INSTRUT and REGFICHA = :REGFICHA'); 
  DataModule1.UniQueryConsultaDOC.ParamByName('INSTRUT').AsString := datamodule1.InstRut; 
  DataModule1.UniQueryConsultaDOC.ParamByName('REGFICHA').AsString := Label1.text; 
  DataModule1.UniQueryConsultaDOC.open; 
  while not DataModule1.UniQueryConsultaDOC.eof do 
  begin 
    if DataModule1.UniQueryConsultaDOCTIPODOCUMENTO.AsString = 'TRATAMIENTO' then 
    begin 
      TMSFMXToolBarButton5.Enabled := true; 
      TMSFMXToolBarButton5.Opacity := 1; 
    end 
    else 
    begin 
      TMSFMXToolBarButton5.Enabled := False; 
      TMSFMXToolBarButton5.Opacity := 0.3; 
    end; 
          
    if DataModule1.UniQueryConsultaDOCTIPODOCUMENTO.AsString = 'EXAMEN' then 
    begin 
      TMSFMXToolBarButton6.Enabled := true; 
      TMSFMXToolBarButton6.Opacity := 1; 
    end 
    else 
    begin 
      TMSFMXToolBarButton6.Enabled := False; 
      TMSFMXToolBarButton6.Opacity := 0.3; 
    end; 
 
    if DataModule1.UniQueryConsultaDOCTIPODOCUMENTO.AsString = 'LABORATORIO' then 
    begin 
      TMSFMXToolBarButton13.Enabled := true; 
      TMSFMXToolBarButton13.Opacity := 1; 
    end 
    else 
    begin 
      TMSFMXToolBarButton13.Enabled := False; 
      TMSFMXToolBarButton13.Opacity := 0.3; 
    end; 
 
    if DataModule1.UniQueryConsultaDOCTIPODOCUMENTO.AsString = 'FICHA MEDICA' then 
    begin 
      TMSFMXToolBarButton17.Enabled := true; 
      TMSFMXToolBarButton17.Opacity := 1; 
    end 
    else 
    begin 
      TMSFMXToolBarButton17.Enabled := False; 
      TMSFMXToolBarButton17.Opacity := 0.3; 
    end; 
 
    DataModule1.UniQueryConsultaDOC.Next; 
end;

pgranados 06-04-2023 16:32:52

Intenta con:

Código Delphi [-]
var i:integer;
begin 
  DataModule1.UniQueryConsultaDOC.Close; 
  DataModule1.UniQueryConsultaDOC.SQL.Text('select REGPAC, TIPODOCUMENTO,REGFICHA, INSTRUT, FICPAC from fichadoc where instrut = :INSTRUT and REGFICHA = :REGFICHA ');
  DataModule1.UniQueryConsultaDOC.ParamByName('INSTRUT').AsString := datamodule1.InstRut; 
  DataModule1.UniQueryConsultaDOC.ParamByName('REGFICHA').AsString := Label1.text; 
  DataModule1.UniQueryConsultaDOC.Open; 
  DataModule1.UniQueryConsultaDOC.First; 
  for i:= 0 to DataModule1.UniQueryConsultaDOC.RecordCount-1 do 
  begin 
    if DataModule1.UniQueryConsultaDOC.FieldByName('TIPODOCUMENTO').value = 'TRATAMIENTO' then 
    begin 
      TMSFMXToolBarButton5.Enabled := true; 
      TMSFMXToolBarButton5.Opacity := 1; 
    end 
    else 
    begin 
      TMSFMXToolBarButton5.Enabled := False; 
      TMSFMXToolBarButton5.Opacity := 0.3; 
    end; 
          
    if DataModule1.UniQueryConsultaDOC.FieldByName('TIPODOCUMENTO').value = 'EXAMEN' then 
    begin 
      TMSFMXToolBarButton6.Enabled := true; 
      TMSFMXToolBarButton6.Opacity := 1; 
    end 
    else 
    begin 
      TMSFMXToolBarButton6.Enabled := False; 
      TMSFMXToolBarButton6.Opacity := 0.3; 
    end; 
 
    if DataModule1.UniQueryConsultaDOC.FieldByName('TIPODOCUMENTO').value = 'LABORATORIO' then 
    begin 
      TMSFMXToolBarButton13.Enabled := true; 
      TMSFMXToolBarButton13.Opacity := 1; 
    end 
    else 
    begin 
      TMSFMXToolBarButton13.Enabled := False; 
      TMSFMXToolBarButton13.Opacity := 0.3; 
    end; 
 
    if DataModule1.UniQueryConsultaDOC.FieldByName('TIPODOCUMENTO').value = 'FICHA MEDICA' then 
    begin 
      TMSFMXToolBarButton17.Enabled := true; 
      TMSFMXToolBarButton17.Opacity := 1; 
    end 
    else 
    begin 
      TMSFMXToolBarButton17.Enabled := False; 
      TMSFMXToolBarButton17.Opacity := 0.3; 
    end; 
    DataModule1.UniQueryConsultaDOC.Next;
  end;
end;

Casimiro Notevi 06-04-2023 17:31:06

Es que si solamente muestra un registro es porque ¡¡¡sólo hay un registro!!!
Comprueba el select, a ver cuántos registros te devuelve.

giantonti1801 06-04-2023 20:20:51

Cita:

Empezado por Casimiro Notevi (Mensaje 551016)
Es que si solamente muestra un registro es porque ¡¡¡sólo hay un registro!!!
Comprueba el select, a ver cuántos registros te devuelve.

no funciona ahora con la solución propuesta con el programador ahora solo me retorna el ultimo registro, le envio consulta realizada por sql donde me retorna los 3 registros:
Código SQL [-]
select * from FICHADOC where INSTRUT = '27080020-6' and REGFICHA = '5' and REGPAC = '2'

Código SQL [-]
REG         REGPAC                                             TIPODOCUMENTO                                      MEDPRES                                            REGFICHA                                           INSTRUT
----------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------------------------------
56          2                                                  LABORATORIO                                        GIANFRANCO TONTI                                   5                                                  27080020-6
52          2                                                  EXAMEN                                             GIANFRANCO TONTI                                   5                                                  27080020-6
60          2                                                  FICHA MEDICA                                       GIANFRANCO TONTI                                   5                                                  27080020-6

(3 rows affected)


Completion time: 2023-04-06T14:29:05.7620326-04:00

pgranados 06-04-2023 20:29:31

¿Cómo que solo te retorna el ultimo registro?

Vamos a hacer esto, tu sentencia SQL
Código SQL [-]
select * from FICHADOC where INSTRUT = '27080020-6' and REGFICHA = '5' and REGPAC = '2'

Ponla directamente en el código para ver que hace.

giantonti1801 06-04-2023 20:32:10

Cita:

Empezado por pgranados (Mensaje 551018)
¿Cómo que solo te retorna el ultimo registro?

Vamos a hacer esto, tu sentencia SQL
Código SQL [-]
select * from FICHADOC where INSTRUT = '27080020-6' and REGFICHA = '5' and REGPAC = '2'

Ponla directamente en el código para ver que hace.

ya lo hice
Código Delphi [-]
procedure TFormReportes.StringGrid1CellClick(const Column: TColumn;
  const Row: Integer);
 var
 Filtro :string;
 i:integer;
 begin
      //DataModule1.UniQueryFichaDoc.Filtered := False;
      //Filtro := 'INSTRUT = '''+DataModule1.InstRut+'''and REGFICHA = '''+label1.Text+'''';
      //DataModule1.UniQueryFichaDoc.Filter := Filtro;
      //DataModule1.UniQueryFichaDoc.Filtered := True;
      //DataModule1.UniQueryFichaDoc.Active := true;
      //
       DataModule1.UniQueryConsultaDOC.Close;
       DataModule1.UniQueryConsultaDOC.SQL.Text := 'select REGPAC, TIPODOCUMENTO,REGFICHA, INSTRUT, FICPAC from fichadoc where instrut = :INSTRUT and REGFICHA = :REGFICHA and REGPAC = :REGPAC ';
       DataModule1.UniQueryConsultaDOC.ParamByName('INSTRUT').AsString := datamodule1.InstRut;
       DataModule1.UniQueryConsultaDOC.ParamByName('REGFICHA').AsString := '5';
       DataModule1.UniQueryConsultaDOC.ParamByName('REGPAC').AsString := '2';
      DataModule1.UniQueryConsultaDOC.Open;
      DataModule1.UniQueryConsultaDOC.First;
  for i:= 0 to DataModule1.UniQueryConsultaDOC.RecordCount-1 do
  begin
    if DataModule1.UniQueryConsultaDOC.FieldByName('TIPODOCUMENTO').value = 'TRATAMIENTO' then
    begin
      TMSFMXToolBarButton5.Enabled := true;
      TMSFMXToolBarButton5.Opacity := 1;
    end
    else
    begin
      TMSFMXToolBarButton5.Enabled := False;
      TMSFMXToolBarButton5.Opacity := 0.3;
    end;

    if DataModule1.UniQueryConsultaDOC.FieldByName('TIPODOCUMENTO').value = 'EXAMEN' then
    begin
      TMSFMXToolBarButton6.Enabled := true;
      TMSFMXToolBarButton6.Opacity := 1;
    end
    else
    begin
      TMSFMXToolBarButton6.Enabled := False;
      TMSFMXToolBarButton6.Opacity := 0.3;
    end;

    if DataModule1.UniQueryConsultaDOC.FieldByName('TIPODOCUMENTO').value = 'LABORATORIO' then
    begin
      TMSFMXToolBarButton13.Enabled := true;
      TMSFMXToolBarButton13.Opacity := 1;
    end
    else
    begin
      TMSFMXToolBarButton13.Enabled := False;
      TMSFMXToolBarButton13.Opacity := 0.3;
    end;

    if DataModule1.UniQueryConsultaDOC.FieldByName('TIPODOCUMENTO').value = 'FICHA MEDICA' then
    begin
      TMSFMXToolBarButton17.Enabled := true;
      TMSFMXToolBarButton17.Opacity := 1;
    end
    else
    begin
      TMSFMXToolBarButton17.Enabled := False;
      TMSFMXToolBarButton17.Opacity := 0.3;
    end;
   DataModule1.UniQueryConsultaDOC.Next;
  end;
end;

pgranados 06-04-2023 20:34:16

Hazlo directamente así:
Código Delphi [-]
var Query:string;
begin
Query:= 'select * from FICHADOC where INSTRUT = ''27080020-6'' and REGFICHA = ''5'' and REGPAC = ''2'' ' ;
DataModule1.UniQueryConsultaDOC.Open(Query);
end;

Casimiro Notevi 06-04-2023 20:35:51

Usa el código que te he puesto antes, el tuyo no está bien.

Código Delphi [-]
DataModule1.UniQueryConsultaDOC.Open;
DataModule1.UniQueryConsultaDOC.First;   // > sobra esto
for i:= 0 to DataModule1.UniQueryConsultaDOC.RecordCount-1 do    //  Esto dependiendo del tipo de dataset no te devuelve los registros que hay en el select, sino 1 !!!!!!!!!!
Repito, usar el código que te hemos indicado.

giantonti1801 06-04-2023 20:43:37

1 Archivos Adjunto(s)
Cita:

Empezado por Casimiro Notevi (Mensaje 551021)
Usa el código que te he puesto antes, el tuyo no está bien.

Código Delphi [-]
DataModule1.UniQueryConsultaDOC.Open;
DataModule1.UniQueryConsultaDOC.First;   // > sobra esto
for i:= 0 to DataModule1.UniQueryConsultaDOC.RecordCount-1 do    //  Esto dependiendo del tipo de dataset no te devuelve los registros que hay en el select, sino 1 !!!!!!!!!!
Repito, usar el código que te hemos indicado.

es el mismo codigo que estoy usando incluso le estoy colocando los valore manueale
Código Delphi [-]
procedure TFormReportes.StringGrid1CellClick(const Column: TColumn;
  const Row: Integer);
 var
 Filtro :string;
 i:integer;
 begin
      //DataModule1.UniQueryFichaDoc.Filtered := False;
      //Filtro := 'INSTRUT = '''+DataModule1.InstRut+'''and REGFICHA = '''+label1.Text+'''';
      //DataModule1.UniQueryFichaDoc.Filter := Filtro;
      //DataModule1.UniQueryFichaDoc.Filtered := True;
      //DataModule1.UniQueryFichaDoc.Active := true;
      //
       DataModule1.UniQueryConsultaDOC.Close;
       DataModule1.UniQueryConsultaDOC.SQL.Text := 'select REGPAC, TIPODOCUMENTO,REGFICHA, INSTRUT, FICPAC from fichadoc where instrut = :INSTRUT and REGFICHA = :REGFICHA and REGPAC = :REGPAC ';
       DataModule1.UniQueryConsultaDOC.ParamByName('INSTRUT').AsString := datamodule1.InstRut;
       DataModule1.UniQueryConsultaDOC.ParamByName('REGFICHA').AsString := '5';
       DataModule1.UniQueryConsultaDOC.ParamByName('REGPAC').AsString := '2';
      DataModule1.UniQueryConsultaDOC.Open;
//DataModule1.UniQueryConsultaDOC.First;   // > sobra esto
for i:= 0 to DataModule1.UniQueryConsultaDOC.RecordCount-1 do
  begin
    if DataModule1.UniQueryConsultaDOC.FieldByName('TIPODOCUMENTO').value = 'TRATAMIENTO' then
    begin
      TMSFMXToolBarButton5.Enabled := true;
      TMSFMXToolBarButton5.Opacity := 1;
    end
    else
    begin
      TMSFMXToolBarButton5.Enabled := False;
      TMSFMXToolBarButton5.Opacity := 0.3;
    end;

    if DataModule1.UniQueryConsultaDOC.FieldByName('TIPODOCUMENTO').value = 'EXAMEN' then
    begin
      TMSFMXToolBarButton6.Enabled := true;
      TMSFMXToolBarButton6.Opacity := 1;
    end
    else
    begin
      TMSFMXToolBarButton6.Enabled := False;
      TMSFMXToolBarButton6.Opacity := 0.3;
    end;

    if DataModule1.UniQueryConsultaDOC.FieldByName('TIPODOCUMENTO').value = 'LABORATORIO' then
    begin
      TMSFMXToolBarButton13.Enabled := true;
      TMSFMXToolBarButton13.Opacity := 1;
    end
    else
    begin
      TMSFMXToolBarButton13.Enabled := False;
      TMSFMXToolBarButton13.Opacity := 0.3;
    end;

    if DataModule1.UniQueryConsultaDOC.FieldByName('TIPODOCUMENTO').value = 'FICHA MEDICA' then
    begin
      TMSFMXToolBarButton17.Enabled := true;
      TMSFMXToolBarButton17.Opacity := 1;
    end
    else
    begin
      TMSFMXToolBarButton17.Enabled := False;
      TMSFMXToolBarButton17.Opacity := 0.3;
    end;
   DataModule1.UniQueryConsultaDOC.Next;
  end;
end;

egostar 06-04-2023 20:50:36

Hola

Intenta con esto:

Código Delphi [-]
      :::::
      DataModule1.UniQueryConsultaDOC.Open;
      // Agrega estas dos líneas ***********************
      DataModule1.UniQueryConsultaDOC.Last; 
      DataModule1.UniQueryConsultaDOC.First; 
     // *******************************************
     for i:= 0 to DataModule1.UniQueryConsultaDOC.RecordCount-1 do
     begin
        ::::::

Saludos


La franja horaria es GMT +2. Ahora son las 14:31:11.

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