![]() |
problemas al crear objetos en delphi
Hola que tal, soy nuevo en esto de programar con delphi y me dejaron un proyecto de de cajero automatico. El trabajo consiste en pasar un cajero hecho en builder a delphi, el problema es que me marca errores en tiempo de ejecucion, marca un Access Violation, pienso que el problema puede ser que no estoy creando bien los objetos de mi clases o que no estan bien declarados, tambien en builder uso la clase vector para almacenar datos no se si alla una parecida en delphi, la que encontre es TList, pero haber si me recomienda otra. Aqui les anexo parte del codigo que creo que es el problema. Espera me puedan ayudar y me respondan pronto. Gracias.
|
No sé si será el origen de tu error, pero creo que el error está en la función
ya que aquí no pasa como en C, que cuando asignas el valor de la función, ésta termina. En Delphi, "obtenerCuenta" es una variable más (a mí me gusta sustituirla por "Result", que referencia lo mismo y sirve para todos los nombres de funciones) y no por darle un valor fuerza el fin de la función. Deberías añadir un Exit dentro del if cuando asignas el valor de obtenerCuenta. No me he fijado en el resto de funciones, pero si haces cosas similares, es posible que también te haya sucedido. De hecho, si en lugar de hacer "Compile" haces "Build" el compilador te generará un Warning diciéndote que el valor asignado a obtenerCuenta no se utiliza nunca. Es por esto, porque al final es sobreescrito por nil. Otra cosa, por convenio, todos los objetos, clases, etc en Delphi empiezan con T. Por tanto tu clase deberías renombrarla a TCuenta (sólo es por convenio, no es obligatorio, pero así podrás diferenciar clases de interfaces que empiezan por I y de punteros a clases que empiezan por P). Espero haberte ayudado, Un saludo, LoPiTaL |
Gracia por responderme y por la ayuda, pero el error persiste, pienso que puede ser por no se crean bien los objetos, esa clase que puse la llamo desde mi clase principal donde esta el formulario, colo esto en el contructor baseDatosBanco := BaseDatosBanco.Create
De esa manera intento cargar las cuentas en memoria para que esten almacenadas en el TList. Espero puedan ayudarme |
Ok, voy a seguir planteándote cosas, y ya nos vas diciendo... a priori no veo ningún otro error, salvo cosas que veo que no son muy correctas y tal vez te lleven al final al error:
Estas variables deberían estar declaradas dentro de la clase BaseDatosBanco, y no como globales, ya que si creas más de una instancia de BaseDatosBanco se te recrearán y se quedarán sin liberar. Si las quieres globales NO las debes crear dentro del constructor de la clase, sino deberías crearlas y liberarlas en un bloque initialization / finalization, que se ejecutan al cargar / descargar la unit en cuestión, sin necesidad de crear una instancia de nadie.
Ésta otra variable debería ser local en cada función, ya que sólo la utilizas como auxiliar... Cita:
Bueno, a priori no se me ocurre nada más. Si alguien tiene alguna sugerencia más sería interesante que la plantease. Un saludo, LoPiTaL |
Cita:
Estaría bien, que ejecutes tu programa paso a paso y nos diferas en qué línea te marca o te salta el error. A partir de ahí podemos seguir investigando. Si es en los create: Habrá que ver cómo es el constructor de la clase. |
La franja horaria es GMT +2. Ahora son las 06:46:02. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi