Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   select max (https://www.clubdelphi.com/foros/showthread.php?t=68295)

yossi 06-06-2010 17:48:31

select max
 
hola, tengo 1 query con esta sentencia

Código SQL [-]
select max(fecha)
from personas
where personas_id=:id;

lo que quiero hacer en tomar el campo fecha del ultimo registro de ese id, y asignarselo a un datetimepicker, pero si en la tabla personas no hay ningun registro que me tome la fecha actual.

Código Delphi [-]
if query1.isempty then
datetimepicker.date:=now;
else
datetimepicker.date:=query1.fields[0].value;

el problema es que me dice que la funcion max no puede retornar null y no se como hacer la consulta y como hacerla asignacion:(

marcoszorrilla 06-06-2010 18:19:04

Creo que lo mejor sería ejecutar primero:

Código SQL [-]
select Count(fecha)
from personas
where personas_id=:id;


if query1.Fields[0].AsInteger = 0 then
datetimepicker.date:=now;
else
datetimepicker.date:=query1.fields[0].value;

Si te devuelve 0 registros sabes que resultaría "null" y sino prosigues.

Un Saludo.

yossi 07-06-2010 00:00:54

hola marcos, eso me ayudo pero no resuelve mi problema a lo mejor no me explique bien, voy de nuevo

necesito seleccionar la fecha mas actual de una tabla que concuerde con un id, es decir en la tabla tengo estos registros que concuendan con el id

id=1

2008-03-04
2008-06-03
2009-12-04

yo necesito que la consulta me devuelva el valor 2009-12-04 y lo coloque en un datetimepicker y en caso que digamos no existan registros asociados al id=1 coloque la fecha actual en el datetimepicker

marcoszorrilla 07-06-2010 06:51:17

Al ejecutar la primera sentencia que te puse, sabes si hay alguna fecha o no, sino hay fechas das mensaje diciendo que no hay registros que cumplan con la consulta, es decir que si sigues en este caso obtendrías "null" y te daría error si te resulta que hay registros, entonces ejecutas la consulta con Max.

Un Saludo.

olbeup 07-06-2010 09:32:32

Mira si esto te sirve:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if ADOConnection1.Connected then
    ADOConnection1.Close;

  with ADOQuery1 do
  begin
    SQL.Clear;

    SQL.Add('SELECT');
    SQL.Add('    MAX(FECHA) AS ULTIMAFECHA
    SQL.Add('  FROM Personas
    SQL.Add('  WHERE PERSONAS_ID = 1');

    Open;
  end;

  with ADOQuery1.DataSource.DataSet do
    if FieldByName('ULTIMAFECHA').IsNull then
      DateTimePicker1.Date := now
    else
      DateTimePicker1.Date := FieldByName('ULTIMAFECHA').AsDateTime;
end;
Un Saludo

olbeup 07-06-2010 09:34:07

Perdón, faltan las comillas del final de la sql:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if ADOConnection1.Connected then
    ADOConnection1.Close;

  with ADOQuery1 do
  begin
    SQL.Clear;

    SQL.Add('SELECT');
    SQL.Add('    MAX(FECHA) AS ULTIMAFECHA');
    SQL.Add('  FROM Personas');
    SQL.Add('  WHERE PERSONAS_ID = 1');

    Open;
  end;

  with ADOQuery1.DataSource.DataSet do
    if FieldByName('ULTIMAFECHA').IsNull then
      DateTimePicker1.Date := now
    else
      DateTimePicker1.Date := FieldByName('ULTIMAFECHA').AsDateTime;
end;
Un saludo

yossi 08-06-2010 23:00:12

muchas gracias a ambos me sirvio de mucho su respuesta ;)


La franja horaria es GMT +2. Ahora son las 04:48:07.

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