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??? |
Sin profundizar demasiado en tu código, puedo decirte que esta mal la implementación. Para crear una nueva instancia de una clase, la sintaxis es "Nombre de la Clase"+"Método Constructor" (TMiClase.Create), por lo que tu código tendría que ser algo como:
Código:
procedure TSERrecepcion.but_registrarClick(Sender: TObject); Saludos! |
Cambia la primera línea dentro del procedure:
Código:
procedure TSERrecepcion.but_registrarClick(Sender: TObject); |
Los métodos getDia, getMes, etc. de la clase TFechaHora hacen referencia a la variable global FechaHora que nunca se construye.
Además no es recomendable que los métodos de una clase hagan referencia a una variable de la misma clase. Más aún, además de estos errores en el evento Click del final "construtes" una instancia de FechaHora de manera incorrecta: fecha.create Debe ser fecha := TFechaHora.Create; // Saludos |
Se me adelantaron delphi.com.ar y andres1569. Sólo te reitero que, aún corrigiendo lo que ellos bien te indican, también deberás fijarte en los primero que te mencioné.
// Saludos |
Cita:
Código:
function TFechaHora.getDia():integer; Cita:
Saludos! |
Cita:
// Saludos |
Hola:
corregi, los errores que me mencionaron, ahora si funciona Gracias, |
EAccesViolation
Hola a todos, estoy realizando un QReport y necesite agregar un nuevo procedimiento y no se k estoy haciendo mal pero me saca un error de 'Acces Violation at adress 005313EE in module ...'
Adjunto el codigo que eh ingresado y agradezco la ayuda k me puedan brindar. Código:
unit UInfManualET; |
Hola Alejandrina.
Creo que debiste publicar el mensaje como un hilo nuevo, ya que difiere significativamente del tema empezado por Tica. Seguramente algún moderador lo acomodará como corresponde. Mientras tanto, dinos en qué línea de tu código se detiene el programa cuando surge la excepción. Gracias. Al González. :) |
La franja horaria es GMT +2. Ahora son las 02:47:40. |
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