Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-12-2016
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 412
Poder: 14
bulc Va por buen camino
Acceso a la prop State de ClientDataSet en otro Form

Quiero obtener acceso a la propiedad State de un ClientDataSet1 situado en el Form1 (Form Principal) del UMain1.
Estoy situado en el Form2 (UEdit2) y quiero hacer esto:

Código Delphi [-]
procedure TForm2.BtnAlterClick(Sender: TObject);
begin
 if Form1.ClientDataSet1.State in [dsBrowse] then
 begin
    Form1.ClientDataSet1.Edit;
    isAlter:=True;
    //BtnEditOn.Click;
    Form2.Color:=clBackGround;
 end;
end;
Tengo en el USES del Form2, referencia al Unit1 (Form1) pero aún así me da error dentro de los corchetes, osea en [dsBrowse].
¿Alguien me puede ayudar?
Responder Con Cita
  #2  
Antiguo 07-12-2016
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Hola

Agregaste la unidad DB tambien?


Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #3  
Antiguo 07-12-2016
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 412
Poder: 14
bulc Va por buen camino
Era eso, efectivamente

Has acertado a la primera. Lo acabo de hacer y ya compila.
¿Qué añade la unidad DB que permite acceder a las propiedades del ClientDataSet? Porque al propio CLS sí que accedía, pero no a sus propiedades.
¿Se puede explicar?
Muchas gracias por tu agudeza.
No sé que sería de mi sin el Club...
Saludos,
Bulc
Responder Con Cita
  #4  
Antiguo 07-12-2016
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¿El compilador te dice que dsBrowse no está declarado? Es porque esa constante pertenece a la unidad DB.

La expresión "Form1.ClientDataSet1.State" no era el problema, sino la expresión "[dsBrowse]".

Saludos.
Responder Con Cita
  #5  
Antiguo 07-12-2016
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 412
Poder: 14
bulc Va por buen camino
Ya sabes... tirando del hilo. Espero no pasarme.

Suponía que la constante csBrowse estaba definida en el ClientDataSet.
De todos modos he puesto Data.DB (y no DB a secas), debido a que es el módulo que veo en la unidad principal.
Tengo una función en el Form1 de este avío:
Código Delphi [-]
Function REVISA_GEN( IBQuery1: TIBQuery; EsNuevo : Boolean ) : Integer;
Var
  Avance : String;   //  weather IsNew is True/False, Avance is 1 or returns Gen_id
begin
  if EsNuevo then Avance := '1' else Avance:= '0';
  begin
    IBQuery1.Close;
    IBQuery1.SQL.Clear;
    // You can use 'Show generators;' in Firebird2.5 to see its value.
    IBQuery1.SQL.ADD('SELECT GEN_ID( GEN_ARBOL,'+ Avance+ ') FROM RDB$DATABASE');
    IBQuery1.Open;  // 
    Result := IBQuery1.Fields[0].AsInteger;
  end;
END;
y quiero llamarla desde la Form2 así: NumGen:=Form1.REVISA_GEN( Form1.IBQuery1, False, Form2.Label1);
Pero el REVISA_GEN se queda subrayado en rojo, osea que es erróneo. ¿Cómo se puede llamar a una función que está en un Form1 desde otro Form2-?
Y con esto te doy las gracias. Ya está bien por hoy. No me atrevo a preguntar más.
Saludos,
bulc
Responder Con Cita
  #6  
Antiguo 07-12-2016
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Cita:
Empezado por bulc Ver Mensaje
Suponía que la constante csBrowse estaba definida en el ClientDataSet.
De todos modos he puesto Data.DB (y no DB a secas), debido a que es el módulo que veo en la unidad principal.
Tengo una función en el Form1 de este avío:
Código Delphi [-]Function REVISA_GEN( IBQuery1: TIBQuery; EsNuevo : Boolean ) : Integer; Var Avance : String; // weather IsNew is True/False, Avance is 1 or returns Gen_id begin if EsNuevo then Avance := '1' else Avance:= '0'; begin IBQuery1.Close; IBQuery1.SQL.Clear; // You can use 'Show generators;' in Firebird2.5 to see its value. IBQuery1.SQL.ADD('SELECT GEN_ID( GEN_ARBOL,'+ Avance+ ') FROM RDB$DATABASE'); IBQuery1.Open; // Result := IBQuery1.Fields[0].AsInteger; end; END;

y quiero llamarla desde la Form2 así: NumGen:=Form1.REVISA_GEN( Form1.IBQuery1, False, Form2.Label1);
Pero el REVISA_GEN se queda subrayado en rojo, osea que es erróneo. ¿Cómo se puede llamar a una función que está en un Form1 desde otro Form2-?
Y con esto te doy las gracias. Ya está bien por hoy. No me atrevo a preguntar más.
Saludos,
bulc
Hola

Seria bueno ver el mensaje de error pero aun asi veo que los parametros en la declaracion y en la forma en que llamas a la funcion difieren.

Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #7  
Antiguo 07-12-2016
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 bulc Ver Mensaje
¿Cómo se puede llamar a una función que está en un Form1 desde otro Form2-?
Tal como la tienes declarada, REVISA_GEN es una función y no un método de Form1. Por tanto, deberías poner sólo:

Código Delphi [-]
NumGen := REVISA_GEN( Form1.IBQuery1, False, Form2.Label1);

y -claro- agregar la unidad donde esté declarada en el uses de la unidad donde la uses. También atiende a lo que comenta Caminante, pues el número de parámetros de la declaración no coincide con el de la llamada.

LineComment Saludos
Responder Con Cita
  #8  
Antiguo 07-12-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por bulc Ver Mensaje
Suponía que la constante csBrowse estaba definida en el ClientDataSet.
Es que cuando tiras un componente TClientDataSet en el formulario se agrega la unidad DB en la cláusula uses automáticamente.

Cita:
Empezado por bulc Ver Mensaje
¿Cómo se puede llamar a una función que está en un Form1 desde otro Form2-?
Como función independiente,
Código Delphi [-]
unit Unit1;

type
  TForm1 = class(TForm)
  ...
  end;

  function foo: Integer;

...
implementation

function foo: Integer;
begin
  ...
end;
y desde Form2 se la llama:
Código Delphi [-]
...
implementation

procedure TForm2.Button1Click(Sender: TObject);
begin
  foo;
end;

Como método de Form1,
Código Delphi [-]
unit Unit1;

type
  TForm1 = class(TForm)
  ...
  public
    function foo: Integer;
  end;
...
implementation

function TForm1.foo: Integer;
begin
   ...
end;

y desde Form2 se la llama:
Código Delphi [-]
...
implementation

procedure TForm2.Button1Click(Sender: TObject);
begin
  Form1.foo;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 07-12-2016
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
Tal como la tienes declarada, REVISA_GEN es una función y no un método de Form1.
ummm no me habia percatado que no era un miembro de la clase.

Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #10  
Antiguo 07-12-2016
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 412
Poder: 14
bulc Va por buen camino
El miembro de la clase soy yo

He aprendido un montón de cosas en poco tiempo.
Muchas gracias a todos por vuestra ayuda.
bulc
Responder Con Cita
  #11  
Antiguo 08-12-2016
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 412
Poder: 14
bulc Va por buen camino
No consigo acceder al ClientDataSet del DataModul

Tengo el DataModul en Unit UDataModul4 y su Form FDataModul4 pero no consigo acceder al ClientDataSet1 que contiene desde el Form FEdit2. FEdit2 referencia a UDataModul4 en Uses tras Implementation:
Intento ejecutar:

Código Delphi [-]
procedure TFEdit2.BtnNewClick(Sender: TObject);
begin
  if UDataModul4.FDataModul4.ClientDataSet1.State in [dsBrowse] then
   begin
      UDataModul4.FDataModul4.ClientDataSet1.Insert;
   end;
end;
Me da el error: Undeclared identifier 'ClientDataSet1'... Ya sé que es parte de lo anterior, pero he revisado todos los nombres y ... nada.

Última edición por bulc fecha: 08-12-2016 a las 12:34:41.
Responder Con Cita
  #12  
Antiguo 08-12-2016
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 412
Poder: 14
bulc Va por buen camino
Autorespuesta

El error se debía a que el nombre del Form del DataModul4 era DataModule4 (con una e de más). Ya funciona, ok.
Gracias a todos.
bulc
Responder Con Cita
  #13  
Antiguo 09-12-2016
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 412
Poder: 14
bulc Va por buen camino
Además...

Como resultado final:
He colocado la declaración de la Función que obtiene el nº de Generator (Get_Gen_Id) dentro del DataModule colocándola en su Interface. De ese modo accede directamente a los componentes de acceso a Datos (Data Access). Y la llamo al inciar la aplicación con su evento onCreate.
Por otro lado también se puede llamar desde otros Forms, puesto que el DataModul está en sus Uses.
Gracias.
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
buscar registros de un ClientDataSet a otro clientDataSet novato_erick Conexión con bases de datos 2 02-02-2013 21:48:09
Manipular objetos desde otro objeto en otro form Nicolas_2011 Delphi para la web 8 17-11-2012 19:12:51
Acceso a objetos/propiedades de otro Form adrall OOP 6 30-07-2011 11:15:24
llamar al evento click de un boton q se encuentra en un form desde otro form TURBOIGOR OOP 6 02-12-2008 15:50:16
Imposible hacer visible un form desde otro form SMTZ .NET 13 16-01-2006 22:41:08


La franja horaria es GMT +2. Ahora son las 22:26:10.


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