Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-11-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por donald shimoda Ver Mensaje
Podrías explicar porque?
Copiando y pegando tu ejemplo:

Cita:
---------------------------
Project1
---------------------------
Access violation at address 00403578 in module 'Project1.exe'. Read of address 7A836652.
---------------------------
Aceptar
---------------------------
// Saludos
Responder Con Cita
  #2  
Antiguo 14-11-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 27
eduarcol Va por buen camino
Donald, quizas deberias cambiar esta linea:

Código Delphi [-]
ds.create(self);


por esta otra.

Código Delphi [-]
ds := TCLientDataset.create(self);

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
Responder Con Cita
  #3  
Antiguo 14-11-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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

Código Delphi [-]
ds := TClientDataSet.Create(...);

Si simplemente hacemos

Código Delphi [-]
ds.Create(...);

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
Responder Con Cita
  #4  
Antiguo 14-11-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 27
eduarcol Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 14-11-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Disculpa Eduardo, trataré de poner más atención la próxima vez

// Saludos
Responder Con Cita
  #6  
Antiguo 15-11-2008
Dado de baja Dado de baja is offline
Miembro
 
Registrado: ago 2007
Posts: 140
Poder: 19
Dado de baja Va por buen camino
Gracias de nuevo a todos.

La verdad es que ya uso assigned(loquesea).
Desde que lo usé no volvió a dar problemas.

Tambien estoy usando lo que aconsejasteis: FreeAndNil para otros casos, no para el que estaba trabajando cuando la consulta en el foro, ya que ese ClientDataset solo se libera al terminar el programa. Cada método comprueba con assigned si está creado y si no lo crea asi:
cds:= TClientDataSet.create(self)

Aunque en el foro puse ds.create(self) realmente nunca lo creo así. Lo puse así por la rapidez ya que lo importante era la comparación a nil del If, ni tampoco lo libero, ya que se libera en onClose de la form.

El programa va de lujo usando el assigned
__________________
Saludos Cordiales.
------------------
Responder Con Cita
  #7  
Antiguo 14-11-2008
Avatar de donald shimoda
donald shimoda donald shimoda is offline
Miembro
 
Registrado: jul 2008
Ubicación: Argentino en Santa Cruz de la Sierra
Posts: 1.083
Poder: 19
donald shimoda Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Copiando y pegando tu ejemplo:

// Saludos
Irrefutable. Me equivoqué feo.

Quería mostrar el caso en que un objeto que se crea y usa de una vez, sin necesidad de acceder mas tarde a este, caso una tarea que se crea para que realice cierto proceso y se destruye sola al terminar en ese caso si es valido algo como:

Código Delphi [-]
  
TMiTarea.create;
No aplica a TClientDataset , ni cerca.

Saludos.
__________________
Donald Shimoda [Team RO] - Blogs: Remobjects Pascal
Responder Con Cita
  #8  
Antiguo 14-11-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Ah! Ok. Si todo se hace en el constructor pues es posible que pueda llamarse a Create desde una variable en lugar de referencia de clase misma. Aunque serán casos raros ¿no?

// Saludos
Responder Con Cita
  #9  
Antiguo 14-11-2008
Avatar de donald shimoda
donald shimoda donald shimoda is offline
Miembro
 
Registrado: jul 2008
Ubicación: Argentino en Santa Cruz de la Sierra
Posts: 1.083
Poder: 19
donald shimoda Va por buen camino
Cita:
Empezado por roman Ver Mensaje
¡Ah! Ok. Si todo se hace en el constructor pues es posible que pueda llamarse a Create desde una variable en lugar de referencia de clase misma. Aunque serán casos raros ¿no?

// Saludos
Si pero se da para una tarea concretamente, que no vaya a ser monitoreada. El create asigna los parámetros de arranque y la dispara con Resume, y se olvida de ella.

las he usado en algunas ocasiones.

Saludos.
__________________
Donald Shimoda [Team RO] - Blogs: Remobjects Pascal
Responder Con Cita
  #10  
Antiguo 14-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 26
maeyanes Va por buen camino
Hola...

Aquí metiendo mi cuchara

En algunas ocasiones se puede hacer para ejecutar hilos (TThread), yo lo he hecho en alguna ocasión, simplemente hago:

Código Delphi [-]
TMiHilo.Create(True); // El constructor redefinido Create inicializa la propiedad FreeOnTerminate a True


Saludos...

Última edición por maeyanes fecha: 14-11-2008 a las 19:50:59.
Responder Con Cita
  #11  
Antiguo 14-11-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Je, je, ahora ya estamos con los TThread. Pues sí, es como dices maeyanes. E incluso para otro tipo de situaciones puede definirse un método de clase que se encargue de instanciar un objeto, hacer cositas con él, liberarlo y se acabó.

Por ejemplo, si tenemos una clase TPropiedadesPersona, derivado de TForm para editar las propiedades de un objeto TPersona, puede definirse un método de clase:

Código Delphi [-]
type
  TPropiedadesPersona = class(TForm)
     ...
  public
    property Persona: TPersona .....;
    class procedure Editar(P: TPersona);
  end;

...

class procedure TPersona.Editar(P: TPersona);
var
  Form: TPropiedadesPersona;

begin
  Form := TPropiedadesPersona.Create(nil);
  Form.Persona := P;

  try
    Form.ShowModal;
  finally
    Form.Free;
  end;
end;

De esta manera, para editar las propiedades, simplemente haríamos:

Código Delphi [-]
TPropiedadesPersona.Editar(P);

sin más nada.

// Saludos
Responder Con Cita
  #12  
Antiguo 14-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 26
maeyanes Va por buen camino
Hola

Solo que un método de clase se declara como:

Código Delphi [-]
class procedure Editar(P: TPersona);

A menos que esté desactualizado



Saludos....
Responder Con Cita
  #13  
Antiguo 14-11-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Cita:
Empezado por donald shimoda Ver Mensaje
Con el único fin de enriquecer la charla en tiempo de diseño Assigned triunfa donde pepe <> nil falla.

Documento.

Saludos.
¡Ufff... como tengo oxidado el inglés!
Parece que no basta con tener el diccionario de 2 kilos. En algún momento tendré que volver a tomar cursos de inglés.

Si no es molestia, ¿Alguien podría resumirlo en castellano?

No me queda muy en claro la relación de dicho documento con lo tratado aquí. Y lo digo precisamente por lo que leo... ¡Habla sobre punteros a métodos! Tal como lo ha señalado roman:

Cita:
Empezado por roman Ver Mensaje
Aunque si se lee con cuidado, notarán que la diferencia no aplica en el caso de un objeto sino de un apuntador a método.
No es por traer problemas, pero es que me gustaría poder entender correctamente la diferencia de emplear Assigned entre objetos y métodos.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 13:29:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi