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 10-12-2007
djanp djanp is offline
Miembro
 
Registrado: nov 2007
Posts: 17
Poder: 0
djanp Va por buen camino
devolver valores al form que lo llamo

hola a todos

mi duda de hoy es , como puedo devolver valores desde un frame a un form q lo ha "invocado" me explico

tengo X form en los que tengo q poner el agente en un campo, por lo que he creado un Frame(esto es discutible si poner otra cosa) en el cual tengo la tabla de todos los agentes en un DBgrid(con su tabla, DS etc) y un boton ACEPTAR para cerrar la ventana y enviar el agente actual en el dbgrid

lo que no se es como mandar esos datos de agente(codigo y nombre) al form q lo invoco, dado q lo hare de distintos form queiro q sea generico, no a un determinado form

gracias a todos por la ayuda
Responder Con Cita
  #2  
Antiguo 10-12-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Hola djanp

Eso lo puedes realizar de diferentes formas....

antes de que cierres el formulario de donde rescatas los datos deberias asignar los valores al formulario que lo llama...

sería algo así...

supongamos que tienes Form1 y Form2... en Form1 tienes Var1, Var2.. y Form2 tienes Nombre, Fec_Nac....

lo puedes llamar de la sgte forma:

Antes de Cerrar el Form2.. puedes hacer esto
Form1.Var1 := Nombre;
Form1.Var2 := Fec_Nac;


Espero que te sirva

salu2
__________________
BlueSteel
Responder Con Cita
  #3  
Antiguo 10-12-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Este mensaje hace lo que dices, podrás echarle un vistazo también al hilo completo si trabajas con mdichilds y showmodal para algunas ventanas.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 11-12-2007
djanp djanp is offline
Miembro
 
Registrado: nov 2007
Posts: 17
Poder: 0
djanp Va por buen camino
lo de blueSteel esta bien pero solo puedo usar el frame para un form dado q le devolvera a ese form los datos...lo q no me vale

mmm a ver como es el tema de Lepe...

la funcion abrirventana es un simple open form??? pq ahora mis mo no se como ahcerlo
y en cuanto a los q devuelve la funcion buscar, lo q queiro me lo devuelve en BUSCAREN, pero en que momento se meten


TBuscar = (codigo, nombre); estos son los 2 valores q quiero sacar...

Function TPC.Buscar( BuscarEn:TBuscar; InternalOpen :Boolean):String;
begin

Result := false; en mi caso quiero q sea string lo q devuelva...
case BuscarEn of
codigo :
with Tagente.Create(nil) do
try
if ShowModal = mrOk then
// en la ventana de busqueda se seleccionó un cliente válido
Result := DBGagentes.Fields[0].AsString;
finally
Free;
end;
end;

if (InternalOpen) then
if Result = false then // si no elige nada en la ventana de búsqueda, Result tendrá el valor -1.
AbrirVentana(BuscarEn, Result);

end;
Responder Con Cita
  #5  
Antiguo 11-12-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Al parecer, requieres algo distinto a lo que yo propongo.

El botón Aceptar no debe enviar nada a ningún Form. El Form que invoca el frame, será el responsable de capturar los datos.

Lo más cómodo, crear en el Frame un par de propiedades, esto hará mucho más legible el código cuando usemos el frame en todas las ventanas.
Código Delphi [-]
type TAgente = Class(TFrame)

private
  function GetCodigo:integer;
  procedure Setcodigo(Value:integer);
  function GetAgente:string;
public
   property Codigo: integer read GetCodigo write SetCodigo;
   property Agente: string read  GetAgente; // propiedad de solo lectura
end;

implementation

function TAgente.GetCodigo:integer;
begin 
  Result := tblClientes.Fieldbyname('codigo').Asinteger;
end;

procedure TAgente.SetCodigo(Value :integer);
begin
  tblClientes.Open; // debe estar abierta la tabla antes de buscar
  if Value <> GetCodigo then
  begin 
     if not tblcliente.locate('codigo', value, []) then
        ShowMessage('No se encuentra el agente con código ' + inttostr(Value));
  end;

function TAgente.GetAgente:string;
begin
  Result := tblCliente.fieldbyname('Nombre').AsString;
end;

Esto es algo más complejo de lo que has pedido, pero lo necesitarás.

Lo que he hecho es definir 2 propiedades que tendrán los datos del agente elegido en el grid, además doy la posibilidad de que muestre un agente seleccionado al mostrar el frame.

por ejemplo: Toda venta de un negocio, tiene asociado un "Agente de venta", bien, desde una ventana "Ventas" quiero mostrar el frame y seleccionar el agente de código 20:

"F" es un frame TAgente puesto en la ventana "ventas".
Código Delphi [-]
procedure Tventa.Button1Click(...);
begin 
  F.Codigo := 20; 
end;

Si ahora en la ventana de ventas, queremos saber qué agente hay seleccionado en el frame:
Código Delphi [-]
procedure Tventas.TablaVentasBeforePost(....);
begin
  tablaVentas.CodigoAgente := F.Codigo; 
  label1.caption := F.Agente;  // el nombre del agente no sé que hacer con él
  // lo pongo en un label 
end;

Saludos y espero se entienda, si no, dime cualquier cosa Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 12-12-2007
djanp djanp is offline
Miembro
 
Registrado: nov 2007
Posts: 17
Poder: 0
djanp Va por buen camino
puffff ojala pudiera comprobarlo pero ahora tengo un error
class Tbutton not found....es curioso pq he quitado todos los button q tenia a ver si se corregia y nada...
Responder Con Cita
  #7  
Antiguo 12-12-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Parece que hubieses tocado las opciones del Library Path (Tools -> Environment Options -> Library Path)

Tbutton está declarado en la unidad StdCtrls.pas de la vcl, si el IDE de delphi no encuentra ese archivo, no puede compilar.

Prueba a añadir "StdCtrls" en los uses a ver...

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 12-12-2007
djanp djanp is offline
Miembro
 
Registrado: nov 2007
Posts: 17
Poder: 0
djanp Va por buen camino
ya lo tienen todos peustos , y añadi BUTTON a los q da el problema, pero nada...
Responder Con Cita
  #9  
Antiguo 19-12-2007
djanp djanp is offline
Miembro
 
Registrado: nov 2007
Posts: 17
Poder: 0
djanp Va por buen camino
bueno ya corregi el problema, pero tengo una duda de como scar el frame
como hago para q salga en otra ventana pequeña? q pongo en ???
y como hago para no tener q crear de nuevo un frame en TpvBeforePost?
que utilice el que he creado enel procedure Bagenteclick


procedure TPV.BagenteClick(Sender: TObject);
begin
with Tframeagen.Create( Self ) do
begin
Visible := True;
Parent. := ???;
end;
end;

procedure TPV.TpvBeforePost(DataSet: TDataSet);
begin
TPV.FieldbyName('C Agente').AsString := TFrameagen.Create(self).Codigo;
DBEdit14.DataField:= frameagen.Fframeagen.Agente;
end;


graicas
Responder Con Cita
  #10  
Antiguo 20-12-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
No sé como estás trabajando, lo normal, es poner el frame en tiempo de diseño, es decir, paleta Standard de delphi, Frame, y ahora haces click en el form TPV, te pedirá que elijas un Frame y lo añade a ese Form.

Ese Frame es un componente más (como un TEdit, TDBEdit, etc), puedes hacer referencia a él como otro componente cualquiera.

Así te olvidas de de crear el frame en tiempo de ejecución (TFRameAgen.Create(self).

SAludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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
Devolver foco desde Form No Modal al control llamante gluglu Varios 8 22-06-2007 08:35:41
continuacion a ¿quien llamo a mi form? FGarcia Varios 3 19-06-2007 23:50:44
¿Quién llamó mi form? dape OOP 7 13-04-2006 02:24:59
problema para devolver 2 valores en una funcion tiagor64 OOP 4 06-05-2005 15:38:59
Llamar a un Form y que devuelva valores i.larranaga OOP 2 31-05-2004 16:42:01


La franja horaria es GMT +2. Ahora son las 17:43:50.


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