Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-03-2010
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
TZQuery en tiempo de ejecucion....error

Hola a tod@s

basándome en una respuesta que he encontrado aquí, utilizo el siguiente código :
Código Delphi [-]
procedure TFInsertar.btnhayresultadosClick(Sender: TObject);
var
  MiQry : TZReadOnlyQuery;
  isql : string;
begin
  isql := 'select cdgo from tb03P where (centro = :centrotemp and fecha = :fechatemp);';
  try
    MiQry.Create(nil);
    MiQry.Connection := Data.ZConnectTGS;
    MiQry.SQL.Clear;
    MiQry.sql.Text := isql;
    MiQry.ParamByName('centrotemp').Asinteger := dbedtcentro.Field.Value;
    MiQry.ParamByName('fechatemp').AsDate := bdedtfecha.Date;
    MiQry.Open;

    if MiQry.RecordCount >0 then begin
      labAlerta.Visible := True;
      MessageDlg('No se permite Duplicar Datos en la Fecha Seleccionada, por favor revíselo... ', mtError, [mbOK], 0);
      bdedtfecha.SetFocus;
    end else begin
      labAlerta.Visible := False;
    end;
  finally
    MiQry.Close;
    MiQry.Free;
  end;
end;

pero al ejecutarlo me produce el siguiente error :
Código:
---------------------------
Debugger Exception Notification
---------------------------
Project GNATURCCOpe.exe raised exception class EAccessViolation with message 'Violación de acceso en la dirección 005997AE en módulo 'GNATURCCOpe.exe'. Leer de dirección 00000000'. 
Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------
el error se produce en MiQry.Create(nil) pero ahí me he atascado ya que no sé por qué se produce o quién lo provoca... obviamente a parte del que os escribe

P.D.: D7+MySql5.0+Zeos
__________________
Toni | blog
Responder Con Cita
  #2  
Antiguo 14-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Normalmente, según tengo entendido, para crear componentes en ejecución se necesita que este ligado al padre.
Me da la impresión de que podría estar por ahí el error, ademas de que al crear el componente simplemente lo haces, sin definir la variable MiQry
Prueba asi, tal vez te sirva.
Código Delphi [-]
procedure TFInsertar.btnhayresultadosClick(Sender: TObject);
var
  MiQry : TZReadOnlyQuery;
  isql : string;
begin
  isql := 'select cdgo from tb03P where (centro = :centrotemp and fecha = :fechatemp);';
  try
   MiQry := TZReadOnlyQuery.Create(Self);
   with MiQry do
   begin
    Parent := Form1; // donde estará el ZReadOnlyQuery
    MiQry.Connection := Data.ZConnectTGS;
    MiQry.SQL.Clear;
    MiQry.sql.Text := isql;
    MiQry.ParamByName('centrotemp').Asinteger := dbedtcentro.Field.Value;
    MiQry.ParamByName('fechatemp').AsDate := bdedtfecha.Date;
    MiQry.Open;

    if MiQry.RecordCount >0 then begin
      labAlerta.Visible := True;
      MessageDlg('No se permite Duplicar Datos en la Fecha Seleccionada, por favor revíselo... ', mtError, [mbOK], 0);
      bdedtfecha.SetFocus;
    end else begin
      labAlerta.Visible := False;
    end;
  finally
    MiQry.Close;
    MiQry.Free;
  end;
end;
end;
No se, digo...., aunque también, digo, no se....
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 14-03-2010
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
gracias [Caral]

ya me imaginaba que el que escribe tenía algo que ver he probado el código con las modificaciones que indicabas y funciona perfectamente

No tengo tan claro que en tiempo de ejecución se deba asociar un componente con "un padre" ya que al fin y al cabo, entiendo yo , se puede crear sin dependencia de nadie. Creo que mi error estaba en que al crearlo no lo definía bien, faltaba el MiQry := TZReadOnlyQuery.Create(Self);.

Pero dejando de lado las interpretaciones, que seguramente tendrás razón, muchas gracias por la ayuda . Estaba tan obsesionado con que era algo de los Zeos que no he controlado lo más obvio.

Muchas Gracias [Caral] por la ayuda y más en domingo !!!!
__________________
Toni | blog
Responder Con Cita
  #4  
Antiguo 15-03-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Aunque la solucion al final te sirvió, no es la correcta, no es necesario definir un "padre" para ningún componente creado via código salvo que queramos que este "padre" libere los recusos del mismo, tu código es correcto salvo la sentencia: "Parent := Form1; // donde estará el ZReadOnlyQuery", ya que es innecesaria. Un TZQuery no necesita un padre para funcionar si pruebas nuevamente tu código original quitando esta línea te va a funcionar sin problemas. Es redundante decirle que su padre es tal o cual forma si al final de todos modos tu mismo lo vas a liberar. El error surge porque primero lo creas sin padre y luego le dices que siempre sí tiene...
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #5  
Antiguo 15-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Se me ocurre, con el afán de aprender:
Normalmente los componentes se colocan el un form, creados o no en tiempo de ejecución.
En el caso de un componente que va a enlazar a una tabla, normalmente este, esta ligado a otros componentes para actuar como puede ser un simple dbgrid, con su correspondiente datasource.
Ahora mi pregunta:
Si para conectar un dbgrid a un query (por ejemplo) que esta en un datamodule (por ejemplo), necesitamos indicarle la dirección, no tendríamos que indicarle al query creado por código donde residir?.
En sana teoría al ser creado en el código (unit) de un form en especial debería de suponerse que pertenece a este, no lo se, ¿de ahí podría venir la redundancia que mencionas?.
Por supuesto nunca he hecho esto de crear querys por código, pero me cuestiona la necesidad de enseñarle donde trabajara ya que sus (hijos) dbgrid etc) se conectaran a el.
¿Por que un query no necesita padre y otros componentes si?, o se aplica para todos por igual?, hay alguna diferencia en que sean visibles o no?.
En tal caso la duda podría tenerla también cualquier otro novato y al estar latente seria bueno que nos ampliaras un poco las razones, si fueras tan amable.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 15-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
En el momento de crear el Query (si lo creás como público en tu form) éste ya pertenece a la unit de dicho form, aunque no pertenezca al form. Un query, al ser no visual, no necesita tener un padre.
Desde cualqier otra unidad/datamodule que tengas por ahí si necesitás conectar algo al Query que creaste en el FormLala, simplemente le das la dirección (FormLala.Query) y listo.

Ejemplo:
Tengo un DataModule llamado DM.
Tengo un Form llamado FBruno.
En FBruno necesito usar un QueryBruno que está en DM.
Cuando, desde mi FBruno, llamo a QueryBruno, ¿cómo lo hago?
Le indico al compilador unit.objeto -> DM.QueryBruno

Creo que se entiende.
Saludos!!!!!!!!
Responder Con Cita
  #7  
Antiguo 15-03-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Es del todo incorrecto Caral, los componentes no son mas que objetos en sí y no residen en en ningún lado salvo en tiempo de diseño. Si creas un componente en tiempo de ejecución no es necesario indicarle en donde "reside". Cuando creamos una instancia de cualquier componente en tiempo de ejecución (como es el caso) nosotros mismos somos responsables de su "ciclo de vida" de ahí que tengamos que liberarlo por nuestra cuenta, pero insisto, no es necesario y es hasta ociosos y causa problemas definirle un "padre". Esto lo hace Delphi cuando usamos componentes en tiempo de diseño.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #8  
Antiguo 15-03-2010
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
personalmente opino como [AzidRain], pero explico el caso para que quede más claro.

En el caso en cuestión, sólo es necesario lanzar una consulta de recordcount con parámetros, no lleva componentes visuales asociados (dbgrids, dbtext, etc....) por lo que no le veo sentido decirle que pertenecerá a este o a otro form. Es más, la idea es convertir ese código en una función para que esté disponible desde cualquier form por lo que la creación, vida y destrucción del componente nos corresponde a nosotros.... menudo poder

Ayer estuve provando el código sin la sentencia "Parent := Form1; // donde estará el ZReadOnlyQuery" y funciona correctamente.... exactamente igual que con ella

Saludos y gracias a ambos !!!!!!
__________________
Toni | blog
Responder Con Cita
  #9  
Antiguo 15-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Gracias por la explicación.
Creo entender:
1- Si se declara publico y es no visible es innecesario declararle un padre, la misma unit sera este, como explica BrunoBsso
2- Un componente es un objeto y no reside en ningún lado, como explica AzidRain.
Interesantes observaciones, he aprendido mucho.
El único detalle que quedaría (para novatos) es que creo que no se puede generalizar al decir que un componente no necesita padre al ser creado en tiempo de ejecución, creo que dependerá del componente y de su ubicación.
Creo que un componente puede necesitar residir en algún lado, necesitando crearle tanto el padre como otros factores, si no de hecho ni existiría el termino padre.
Os agradezco la ampliación, estoy seguro que este tema a mas de un novato nos a sido de utilidad.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #10  
Antiguo 16-03-2010
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
Nada más para afinar un poco lo que ya se ha dicho.

No confundir el término padre (parent) con dueño (owner). Sólo los componentes visuales tienen un padre. Los no visuales carecen de dicha propiedad.

El encargado de liberar recursos es el dueño, no el padre.

// Saludos
Responder Con Cita
  #11  
Antiguo 16-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
A esto es lo que quería llegar ya que se puede confundir a un novato con facilidad.
Por eso comente la necesidad de ampliar el concepto.
Estoy seguro que AzidRain se refería a los componentes NO visuales, si embargo nunca hizo o marco la diferencia como si lo hizo BrunoBsso y ahora Roman.
Todo esto por el comentario de tgsistemas el cual dice en su segundo post en forma muy general:
Cita:
Empezado por tgsistemas
No tengo tan claro que en tiempo de ejecución se deba asociar un componente con "un padre" ya que al fin y al cabo, entiendo yo , se puede crear sin dependencia de nadie.
Esto fue avalado por AzidRain en sus comentarios, pero sin definir la diferencia, siempre en forma general:
Cita:
Empezado por AzidRain
no es necesario definir un "padre" para ningún componente creado via código salvo que queramos que este "padre" libere los recusos del mismo.....
.........
Es redundante decirle que su padre es tal o cual forma si al final de todos modos tu mismo lo vas a liberar
No intento indicar quien o no tenga razón, intento comentar como ya lo hice, por supuesto sin conocimiento, que no se podía generalizar.
Por eso para mi poco conocimiento el comentario de BrunoBsso:
Cita:
Empezado por BrunoBsso
Un query, al ser no visual, no necesita tener un padre.
Y por ultimo de Roman:
Cita:
Empezado por Roman
No confundir el término padre (parent) con dueño (owner). Sólo los componentes visuales tienen un padre. Los no visuales carecen de dicha propiedad.

El encargado de liberar recursos es el dueño, no el padre.
Son los mas acertados, sin menospreciar a ningún otro y por supuesto con el afán de que el que pueda ver este hilo le quede un poco mas clara la diferencia.
Muchas gracias a todos vosotros por ampliar y aportar y a tgsistemas por dejarme invadir su hilo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #12  
Antiguo 16-03-2010
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
Hola,

tienes toda la razón [Caral] en las observaciones, cuando dije :
Cita:
Empezado por tgsistemas
No tengo tan claro que en tiempo de ejecución se deba asociar un componente con "un padre" ya que al fin y al cabo, entiendo yo , se puede crear sin dependencia de nadie.
me estaba refiriendo a un componente no visual y lo debería haber especificado para que quedara bien claro. Seguramente pensé más rápido de lo que escribía y daba por hecho que todo el mundo entendía que era un componente no visual.

Perdón por la confusión, en los próximos hilos intentaré detallar al máximo la info para no confundir.

Muchas gracias a todos, en especial a tí [Caral] por la ayuda y sobre todo en Domingo !!!!
__________________
Toni | blog
Responder Con Cita
Respuesta



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
Error en tiempo de ejecución. BuenaOnda Varios 5 24-04-2008 07:42:48
Error en tiempo de ejecución chipsoni Varios 2 16-04-2008 11:29:55
error en tiempo de ejecución Nelly Varios 9 16-12-2005 15:54:14
Error en tiempo de ejecucion. ramonibk MS SQL Server 2 23-10-2004 20:18:42
Error en tiempo de ejecucion ramonibk Conexión con bases de datos 5 19-10-2004 09:19:39


La franja horaria es GMT +2. Ahora son las 07:33:02.


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
Copyright 1996-2007 Club Delphi