Ver Mensaje Individual
  #1  
Antiguo 10-06-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Reputación: 19
MaMu Va por buen camino
Problema con CampoCalculado en Access

Trabajo con Access, y tengo una tabla con datos de animales, donde quiero mostrar la edad del animal en base a su fecha de nacimiento. Para calcular la edad hago lo siguiente:

Código Delphi [-]
function Edad(Fecha:TDateTime):String;
var A, AA, M, MM, D, DD: Word;
  Anio, Mes, Dia: double;
begin
  DecodeDate(Fecha, A, M, D);
  DecodeDate(Date, AA, MM, DD);
  Anio := Int(AA - A);
  if( M <= MM ) then
     Mes := MM - M
  else
  begin
    Mes := MM+12-M;
    Anio := Anio -1;
  end;
  if( D <= DD ) then
    Dia := DD - D
  else
  begin
    Dia:=DD+MonthDays[IsLeapYear(AA),MM]-D;
    Mes := Mes -1;
  end;
//Caso especial donde no ha cumplido años, pero los cumplirá el mismo mes
  if Mes < 0 then
  begin
    Anio := Anio - 1;
    Mes := 12 + Mes;
  end;
  Result := Format('%.0fA-,%.0fM-,%.0fD', [Anio, Mes, Dia]);
end;

En mi Query, en este caso QHembras, dandole doble-clic y luego Add New Field, creo el campo calculado Edad (QHembrasEdad), y en el momento de calcular la edad, hago lo siguiente:

Código Delphi [-]
procedure TArmarFamilia.QHembrasCalcFields(DataSet: TDataSet);
begin
  try
    QHembrasEdad.Value:=Edad(QHembras.FieldByName('nacimiento').AsDateTime);
  except
    on Exception do
     QHembrasEdad.Value:='Error';
  end;
end;

El nuevo campo calculado, esta visualizado en el DBGrid, ya que añadi un nuevo TColumn, y lo asocie al campo Edad. En tiempo de ejecucion, me salta el error "List index out of bounds (3)", y no me muestra ningun dato, salvo en el campo Edad, que me muestra en todos "Error". Yo tengo 29 campos, pero solo visualizo algunos, los demas estan con visible:=False; . En que me estoy equivocando o donde puede estar mi error, no me puedo dar cuenta.

Saludos y Gracias
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita