FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Saber si se ha creado un objeto
Hola.
Tengo un TclientDataSet que se crea en tiempo de ejecución, es de ambito global. Y me gustaría saber si se ha creado previamente. He probado esto pero no va:
|
#2
|
||||
|
||||
Hola Cecilio, para ello tienes el Assigned.
Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar. |
#3
|
|||
|
|||
Caro. Gracias por la prontitud.
|
#4
|
||||
|
||||
Assigned es esencialmente lo mismo que la comparación con nil por lo que si falla uno también el otro. Es raro que falle porque siendo una variable global, tendría que inicializarse a nil. Sin embargo, veo que en el código que nos presenta Cecilio usa
lo cual es incorrecto para crear el objeto y quizá de ahí venga la falla. Tendría que ser así:
// Saludos |
#5
|
||||
|
||||
También sería bueno, que si en el código lo liberas para volver a crearlo, te asegures de que al liberar coge valor nil.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#6
|
||||
|
||||
Cita:
No me había fijado bien como estaba creando su ClientDataSet, ayer respondi rapido y me desconecte despues. Como te dice el amiguito Roman no debería fallar ya que con el Assigned es como si estuvieras preguntando.
La creación de tu ClienDataSet tampoco esta correcta, debes hacerlo como te indica Roman y podrías hacer algo así.
Tengo una pregunta yo pense que si no creabas el objeto apuntaba a nil no importando que sea una variable global o una local, acabo de hacer la prueba, si es una variable local no apunta a nil, siendo así con el codigo anterior entra al if libera y al intentar crear te sale un AccessViolation. Estaba haciendo un procedimiento donde mi Objeto es una variable Local y ya me rompiendo mi cabeza porque no estaba funcionando bien, ahora veo que no estaba apuntando a nil, en mi programa en una parte según una condición creaba mi objeto y mas abajo preguntaba si estaba creado entonces que haga algo. ¿Me pueden explicar porque no apunta a nil cuando es variable local, la solución para una variable local sería hacer que ese tu objeto apunte a nil antes de hacer algo?. Cecilio, libera tu ClientDataSet con FreeAndNil como te dice Neftali. Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar. |
#7
|
||||
|
||||
No sé el por qué, quizás por eficiencia, tarda menos en ejecutar procedimientos locales porque no tiene que inicializar las variables.
Muchas veces es redundante, delphi la inicializa y nosotros la usamos en un bucle for que también la inicializa.... pues ... ¿pá qué? . Mi comentario es sólo para añadir que pasa con todas las variables locales, incluso un Integer, currency, etc no tendrá el valor cero como puede esperarse. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#8
|
||||
|
||||
Cita:
No hay problema entonces la solución sería cuando tenga un objeto como variable local inicializarlo en nil aunque no lo haya creado, para no tener problemas en el caso que describo en mi anterior mensaje. Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar. |
#9
|
||||
|
||||
Cita:
Documento. Saludos. |
#10
|
||||
|
||||
Cita:
Esto es absolutamente válido :
Saludos |
#11
|
||||
|
||||
OFFTOPIC: Me alegra que te vayas "re-educando", lo digo porque sin el enlace al documento, tendríamos otra divertida polémica.
Te agradezco por mi parte, ese enlace. Primero usaba F <> nil, después de un tiempo me acostumbré a usar Assigned, y desde hace poco dije, ¿qué diferencia hay? pues nada vuelvo a lo de siempre, y como digo, desde hace poco volví a usar F <> nil, ni siquiera lo puse en duda ni busqué en internet. Desde ahora queda claro que usaré Assigned. Repito, gracias.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#12
|
||||
|
||||
Cita:
Desde ahora queda claro que usaré Assigned. Gracias por las gracias. |
#13
|
||||
|
||||
Cita:
De todas formas, a mi en lo particular me gusta más usar Assigned en todo caso, por una cuestión de legibilidad, pero eso ya es gusto personal. Cita:
Cita:
// Saludos |
#14
|
||||
|
||||
Cita:
Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar. |
#15
|
||||
|
||||
Cita:
Compila y funciona.Si la idea es usar el objeto de manera temporal cumple con el propósito. Cita:
Saludos |
#16
|
||||
|
||||
Copiando y pegando tu ejemplo:
Cita:
|
#17
|
||||
|
||||
Donald, quizas deberias cambiar esta linea:
por esta otra.
de esta manera estas instanciando la clase dentro de un objeto, en el ejemplo anterior lo asignas como perteneciente a esa clase, pero nunca se inicializa.
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#18
|
||||
|
||||
A manera de explicación a los compañeros que no les quede claro, digamos que un constructor como TObject.Create llama en automático al método de clase NewInstance. Siendo un método de clase, NewInstance (al igual que el constructor) existe independientemente de cualquier instancia de la clase, y es el encargado de asignar memoria para el nuevo objeto y devuelve un apuntador (referencia) a dicho objeto. Ese valor devuelto es el que se asigna a la referencia en una construcción como
Si simplemente hacemos
el objeto sí se crea, pero nunca lo asignamos a la variable ds y de ahí todos los riesgo de violación de acceso, pues ds, al no haber sido inicializado, apunta a un lugar "aleatorío" en la memoria (o nil en el caso de variables globales). En resumen, el objeto existe, pero ds no apunta a él. // Saludos |
#19
|
||||
|
||||
Bueno Roman, gracias por escribir lo que te explique, no encontraba las palabras, te equivocastes en unas cositas pero no importa
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#20
|
||||
|
||||
Disculpa Eduardo, trataré de poner más atención la próxima vez
// Saludos |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
saber si alias esta creado en el dbe | Manuel | Varios | 2 | 13-10-2006 18:27:37 |
Como saber si un Formulario ha sido creado | Durbed | OOP | 7 | 13-10-2005 13:06:28 |
destruir objeto creado en tiempo de ejecucuión | jaime cotino | Varios | 5 | 28-06-2005 20:45:36 |
Saber si un formulario ya está creado o no. | Tecnic2 | OOP | 2 | 27-09-2004 13:27:01 |
¿Cómo saber si un Form está creado? | nesetru | Varios | 5 | 09-02-2004 12:59:37 |
|