Ver Mensaje Individual
  #1  
Antiguo 28-10-2003
tica tica is offline
Miembro
 
Registrado: oct 2003
Posts: 15
Reputación: 0
tica Va por buen camino
Question Excepcion EAccesViolation

Hola,
Cree una clase TFechaHora

unit CFechaHora;
interface
uses
Windows, Messages, Forms, Dialogs, SysUtils, StdCtrls;
type
TFechaHora = class
// private
{ Private declarations }
dia: integer;
mes: integer;
anio: integer;
hora: string;
// public
{ Public declarations }
constructor Create;
function getDia():integer;
function getMes():integer;
function getMesCadena():string;
function getAnio():integer;
function getFechaCad():string;
function getHora():string;

procedure setHoy();
procedure setFecha (d, m, a: integer);
procedure setHora(h: string);
end;

var
FechaHora: TFechaHora;

implementation

uses
tablas1, ModUtilitarios;

constructor TFechaHora.Create;
begin
dia:=0;
mes:=0;
anio:=0;
end;

function TFechaHora.getDia():integer;
begin
result:=FechaHora.dia;
end;

function TFechaHora.getMes():integer;
begin
result:=FechaHora.mes;
end;

unction TFechaHora.getMesCadena():string;
var
var_mes: integer;
var_cadena: string;
begin
var_mes:= FechaHora.getMes();
case var_Mes of
1: var_cadena:='Enero';
2: var_cadena:='Febrero';
3: var_cadena:='Marzo';
4: var_cadena:='Abril';
5: var_cadena:='Mayo';
6: var_cadena:='Junio';
7: var_cadena:='Julio';
8: var_cadena:='Agosto';
9: var_cadena:='Septiembre';
10: var_cadena:='Octubre';
11: var_cadena:='Noviembre';
12: var_cadena:='Diciembre';
end;
result:= var_cadena;
end;

function TFechaHora.getAnio():integer;
begin
getAnio:=FechaHora.anio;
end;

function TFechaHora.getFechaCad():string;
var
var_dia, var_anio, var_cad: string;
begin
str(FechaHora.getDia(),var_dia);
str(FechaHora.getAnio(),var_anio);
var_cad:= var_dia+FechaHora.getMesCadena()+var_anio;
showmessage(var_cad);
result:= var_cad;
end;

function TFechaHora.getHora():string;
begin
getHora:=FechaHora.hora;
end;

procedure TFechaHora.setHoy();
begin
//Completar
end;

procedure TFechaHora.setFecha (d, m, a: integer);
var
var_d, var_m, var_a: string;
begin
var_d:= IntToStr(d);
var_m:= IntToStr(m);
var_a:= IntToStr(a);
showmessage('en el CONSTRUCTOR'+var_d+' '+var_m+' '+var_a);

dia:=d;
mes:=m;
anio:=a;
end;

procedure TFechaHora.setHora(h: string);
begin
hora:=h;
end;
end.


Por el momento hago uso de esta clase de la siguiente manera:


procedure TSERrecepcion.but_registrarClick(Sender: TObject);
var
var_hoy: string;
fecha: TFechaHora;
begin
fecha.Create;
var_hoy:=fecha.getFechaCad();
// fecha.setFecha(28,10,2003);
// FechaHora.setFecha(28,10,2003);
fecha.Free;
Showmessage ('Fecha Actual'+var_hoy);
end;


Y al momento de hacer correr me sale un error de EAccessViolation, realice un trace, al parecer el constructor se ejecuta bien (asume los valores correspondientes), pero al tratar de recuperar los valores de los atributos (getDia(), getMes(), getAnio()) salen el error.

Trate de llamar a otro método (setFecha) y me vuelve a salir el error al asignar valores a los atributos.

Los atributos antes eran privados (pense que ese era el error), quite la instruccion y tengo el mismo problema, también probé poniendo: Self.dia:=d; y nada.

¿¿¿Alguna sugerencia???
Responder Con Cita