Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-08-2004
MITOPE MITOPE is offline
Miembro
 
Registrado: mar 2004
Posts: 27
Poder: 0
MITOPE Va por buen camino
Question Envio de Resultado de un AdoQuery

Hola a todos, quisiera que por favor me ayuden a mejorar este código, el problema que tengo es que al destuir (QsqlClienteOpcional) aparentemente tambien se destruye (QsqlSistema) y ya no me deja usar ningún metodo de la clase TSistema. La Clase TSistema es una especie de Clase Servidora. Tambien, no se si esta bien la forma como mando la información del query(QsqlSitema) al formulario o hay otra mejor forma de hacerlo, que la verdad lo hice de pura intuición, Espero me puedan dar sugerencias, para mejorar mi código.

Base de datos: Sql 2000
Delphi 6.0

Este es el Código del metodo que utilizo para traer la informacion de la base de datos

Código:
function TSistema.DevuelveClienteOpcional(pCita: String): TAdoQuery;
begin
  with QsqlSistema do
  begin
	Close;
	Parameters.Clear;
	Parameters.AddParameter.Name:='Cita';
	Parameters.ParamByName('Cita').Value:=pCita;
	SQL.Text:= 'Select * from CitaOpcional'+
			   ' Where IdCita= :Cita';
	ParamCheck:= True;
	Open;
	Result:= QsqlSistema;
  end;
end;
El formulario(FrmCita) que recibe la información tiene el siguiente código

Código:
 
procedure TFrmCita.MuestraClienteOpcional;
var QsqlClienteOpcional: TADOQuery;
begin
   QsqlClienteOpcional:= TADOQuery.Create(Owner);
   QsqlClienteOpcional.Connection:= AdocCita;
   QsqlClienteOpcional:= Sistema.DevuelveClienteOpcional(FCita);
   with QsqlClienteOpcional do
   begin
	 EdtOpcApPaterno.Text:= FieldByName('ApellidoPaterno').AsString;
	 EdtOpcNombres.Text:=FieldByName('NombreCliente').AsString;
	 EdtOpcTFijo.Text:=FieldByName('TelefonoFijoCo').AsString;
	 EdtOpcTCelular.Text:=FieldByName('TelefonoCelularCO').AsString;
	 EdtOpcHora.Text:=FieldByName('HoraReserva').AsString;
	 Destroy;
   end;
end;
Gracias a Todos de antemano.
Responder Con Cita
  #2  
Antiguo 17-08-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Hola.

Creo que tenes un problema de concepto. Las variables "objeto" en delphi no son mas que apuntadores, con una sintaxis simplificada. De esta cuenta, que en tu procedimiento DevuelveClienteOpcional, al hacer

Result := QsqlSistema;

Lo que estas haciendo realmente es devolver una referencia a QsqlSistema, y por tanto, al asignar esta referencia a QsqlClienteOpcional y luego destruir el objeto, en realidad estas destruyendo QsqlSistema, puesto que ambos apuntan al mismo objeto.

Si lo que queres es tener un objeto totalmente independiente, has de crearlo dentro del primer procedimiento, que debiera quedar algo como:

Código Delphi [-]
function TSistema.DevuelveClienteOpcional(pCita: String): TAdoQuery;
begin
  result := TAdoQuery.Create;  // es probable que necesite parámetros... ver ayuda
  // hacé aqui las asignaciones del database y lo que haga falta con un adoQuery.
  with result do
  begin
    Close;
    // esto no se si es realmente necesario... 
    //¿el adoquery no agrega automáticamente los parámetros?
    Parameters.Clear;
    Parameters.AddParameter.Name:='Cita';
    Parameters.ParamByName('Cita').Value:=pCita;
    SQL.Text:= 'Select * from CitaOpcional'+
               ' Where IdCita= :Cita';
    ParamCheck:= True;    
    Open;
  end;
end;

La otra rutina no necesitaría, en este caso, ningún cambio.

No uso ado, asi que he dejado simplemente algunos comentarios que supongo vos sabras interpretar y sustituir por el código apropiado.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 17-08-2004
MITOPE MITOPE is offline
Miembro
 
Registrado: mar 2004
Posts: 27
Poder: 0
MITOPE Va por buen camino
Question

Ok . Jose antonio, ahora entiendo, hay alguna otra forma de mandar la informacion del AdoQuery QsqlSistema a mi formulario sin tener que crear otro AdoQuery en este..

Gracias , por tu respuesta , me aclaró mas el panorama
Responder Con Cita
  #4  
Antiguo 17-08-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Hola.

En primer lugar aclaro que me llamo Juan Antonio.

Luego, ¿que significa "mandar la informacion"?

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 19-08-2004
MITOPE MITOPE is offline
Miembro
 
Registrado: mar 2004
Posts: 27
Poder: 0
MITOPE Va por buen camino
Question

Perdon por la demora , me referia a otra forma de enviar la informacion de la clase TSistena a el formularioGracias.
Responder Con Cita
  #6  
Antiguo 19-08-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Lo siento, pero desde mi posición "enviar la información", significa lo mismo que "mandar la información"... y esto es: muchas cosas posibles y nada concreto.

Cómo no está claro, asumiré que queres copiar los datos de los registros del query1 al query2, lo que podes hacer con un ciclo algo asi:

Código Delphi [-]
  query1.first;
  while not query1.eof do
  begin
    query2.insert;
    query2.fieldbyname('campo').Value := Query1.Fieldbyname('campo').Value;
    query2.post;
    query1.next;
  end;

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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


La franja horaria es GMT +2. Ahora son las 11:53:34.


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