Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
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-07-2006
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Post Crear procedimiento !!!

Holas amigos de este foro:
Lo que me propongo es lo siguiente:

Este código lo repito en casi todos los formularios en el evento FormShow.

Código Delphi [-]
procedure TTallerForm.FormShow(Sender: TObject);
begin
 DM.QrProv.Open;
 DM.QrProv.First;
 While not DM.QrProv.Eof do
    begin
     ComboBox1.Items.Add(DM.QrProvcodp.AsString);
     DM.QrProv.Next;
    end;
 DM.QrProv.Close;
end;

Intento hacer un procedimiento en el DM (Data Module) para llamarlo desde cualquier lugar, pero no hallo cómo hacerlo ya que no se como referirme a cada uno de los formularios.

nota: A los formularios les asigno memoria dinámica.

gracias de antemano
saludos Ledian
Responder Con Cita
  #2  
Antiguo 17-07-2006
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Ese código lo tienes que poner en el DataModulo correspondiente y luego hacer un "Uses", en cada formulario en donde pienses utilizarlo y despues símplemente llamarlo por su nombre:

Código Delphi [-]
 procedure Carga_Cuadro_Combinado();
begin
 DM.QrProv.Open;
 DM.QrProv.First;
 While not DM.QrProv.Eof do
    begin
     ComboBox1.Items.Add(DM.QrProvcodp.AsString);
     DM.QrProv.Next;
    end;
 DM.QrProv.Close;
end;

y en los formularios, símplemente:
Código Delphi [-]
 Carga_Cuadro_Combinado();

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 17-07-2006
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Exclamation Error !!!

Al crear el procedimiento en el Data Module da el error undeclared identifier:'ComboBox1' y tampoco puedo decir
Código Delphi [-]
TallerForm.ComboBox1
por que va a ser usado no solo por TallerForm, sino por varios formularios.

Espero que me hallan entendido ahora.

Gracias de todas formas.
Saludos Ledian
Responder Con Cita
  #4  
Antiguo 17-07-2006
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Está claro, creo que lo que puedes hacer es pasar el combo como parámetro del prcedimiento. Entonces:

Código Delphi [-]
procedure DM.Carga_Cuadro_Combinado(MyCombo:TComboBox);
begin
 QrProv.Open;
 QrProv.First;
 While not QrProv.Eof do
    begin
      MyCombo.Items.Add(DM.QrProvcodp.AsString);
      QrProv.Next;
    end;
 QrProv.Close;
end;

y para llamarlo desde el form

Código Delphi [-]
  DM.Carga_Cuadro_Combinado(ComboBox1);

Saludos.
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #5  
Antiguo 17-07-2006
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Angry Continua el Error !!!

Hola amigos:
Despues de guiarme por el consejo de yusnerqui me da el siguiente error: Undeclared identifier: TComboBox

Alguien pudiera ayudarme por favor.

gracias
Saludos Ledian.

Última edición por Ledian_Fdez fecha: 17-07-2006 a las 17:02:53.
Responder Con Cita
  #6  
Antiguo 17-07-2006
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Cuando te de un tipo de error como ese, busca la unidad donde está definido en la ayuda de delphi y ponla en el uses del formulario o Datamodule. En este caso tienes que añadir en el uses de tu TDataModule la unidad 'stdCtrls'.
Responder Con Cita
  #7  
Antiguo 17-07-2006
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
ojo

Debes declarar la unit StdCtrls en el uses de tu DM.

Saludos
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #8  
Antiguo 17-07-2006
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Caramba Basti te me adelantaste, jejeje.

saludos
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #9  
Antiguo 17-07-2006
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Question Casi lo logramos!!!

Amigos:
Ya no da el error, magnifico. He aprendido mucho aca con ustedes hoy, pero ... a la hora de llamar al procedimiento
Código Delphi [-]
DM.Carga_Cuadro_Combinado(ComboBox1);
en cualquiera de los formularios me da el error undeclared identifier:'Carga_Cuadro_Combinado'. Les aclaro que tengo en uso el DM


Con otra ayuda soluciono el problema.

Saludos Ledian

Última edición por Ledian_Fdez fecha: 17-07-2006 a las 17:58:31.
Responder Con Cita
  #10  
Antiguo 17-07-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Pusiste la declaración del procedimiento en la sección public del DataModule?

Código Delphi [-]
TMiDataModulo = class(TDataModule)
  // Componentes y eventos
private
  { Private declarations }
public
  { Public declarations }
  procedure Carga_Cuadro_Combinado(ComboBox: TComboBox);
end;


Saludos...
Responder Con Cita
  #11  
Antiguo 17-07-2006
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Angry Aun no lo logro !!!

Hola de nuevo

al poner la declaración del procedimiento en la sección public del DataModule

Código Delphi [-]
TMiDataModulo = class(TDataModule)
  // Componentes y eventos
private
  { Private declarations }
public
  { Public declarations }
  procedure Carga_Cuadro_Combinado(ComboBox: TComboBox);
end;

Me genera el siguiente error:
Unsatisfied forward or external declaration: 'TMiDataModulo.Carga_Cuadro_Combinado'


¿Qué estoy haciendo mal

Saludos.. Ledian

Última edición por Ledian_Fdez fecha: 17-07-2006 a las 20:22:25.
Responder Con Cita
  #12  
Antiguo 17-07-2006
[fer21unmsm] fer21unmsm is offline
Miembro Premium
 
Registrado: dic 2005
Ubicación: Lima
Posts: 627
Poder: 19
fer21unmsm Va por buen camino
Cita:
Empezado por Ledian_Fdez
Hola de nuevo

al poner la declaración del procedimiento en la sección public del DataModule

Código Delphi [-]TMiDataModulo = class(TDataModule) // Componentes y eventos private { Private declarations } public { Public declarations } procedure Carga_Cuadro_Combinado(ComboBox: TComboBox); end;


Me genera el siguiente error:
Unsatisfied forward or external declaration: 'TDM.Carga_Cuadro_Combinado'


¿Qué estoy haciendo mal

Saludos.. Ledian
Hola, ese mensaje de error siempre lo veo salir cuando se ha declarado un método o función en una clase pero se ha implementado, en realidad no me he leído todos los mensaje. De casualidad en vez de "TDM", no debería ser "TMiDataModulo", es decir:
TMiDataModulo.Carga_Cuadro_Combinado

Saludos.
__________________
"La información tiene más valor cuando se comparte"
Responder Con Cita
  #13  
Antiguo 17-07-2006
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Thumbs down El error persiste !!!

Tienes razon fer21unmsm pero eso solo fue un error a la hora de transcribir el mensaje de error. Ruego que me disculpen.

ya lo corregi mas arriba.
Ahora por favor alguien me ayuda...

gracias de antemano

saludos Ledian.
Responder Con Cita
  #14  
Antiguo 17-07-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Tienes implementada en la sección implementation de la unidad el código del procedimiento Carga_Cuadro_Combinado? Si no es así, es por eso que te sale ese error...


Saludos...
Responder Con Cita
  #15  
Antiguo 17-07-2006
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Exclamation y ahora que ?

No se si es a este orden al que te refieres.

Código Delphi [-]
implementation

uses ConsUnit, MunUnit, ProvUnit, TallerUnit, SituacionUnit;

{$R *.dfm}

procedure LLena_Provincia(MyCombo:TComboBox);

mi pregunta ahora es como poner el procedure publico

Ledian.
Responder Con Cita
  #16  
Antiguo 17-07-2006
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
En la implementación del procedimiento tienes que ponerle TMiDataModulo antes, ya que pertenece a esa clase:

procedure TMiDataModulo.LLena_Provincia(MyCombo:TComboBox);
Responder Con Cita
  #17  
Antiguo 17-07-2006
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Unhappy bye

Amigos lo siento. Estoy al darme por vencido. Lo he probado pero solo me funciona para esa unit, no he logrado poner publico el procedimiento.

grasias a todos

y hasta la vista.
Responder Con Cita
  #18  
Antiguo 17-07-2006
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 18
Ledian_Fdez Va por buen camino
Lightbulb Un Poquito mas !!!

Amigos estube leyendo en foros viejos donde dicen:

Cita:
Para que un procedimiento sea público, y pueda ser accedido desde cualquier unit, es importante que declares al interfaz, esto lo haces poniendo su declaración en el bloque interface de la unit. Si no has definido la interfaz, no solo será privado para su uso dentro de la unit donde esta implementado, sino que solo lo verán los procedimientos que se implementen en posteriormente a este.
Al ponerlo ahi me da el siguiente error Undeclared identifier: 'TComboBox'


Bye Ledian.
Responder Con Cita
  #19  
Antiguo 18-07-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Haz un clic sobre la palabra Tcombobox (en tu código, no en la ventana de errores), pulsa F1 y te dirá el "uses" que necesitas.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #20  
Antiguo 18-07-2006
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Veamos, lo primero es recomendarte que si vas a programar en delhi no lo hagas inpíricamente, sino que consigas un tutorial o libro que te instruya.

En cuanto al problema que originó este hilo, trataré mostrarte mediante un ejemplo:

Tu datamódulo originalmente se verá más o menos parecido a esto:
Código Delphi [-]
unit Unit2;
interface
uses
  SysUtils, Classes;
type
  TDM = class(TDataModule)    
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  DM: TDM;
implementation
{$R *.dfm}
end.

Fíjate que despues de la palabra reservada Type dice TDM, esto es porque le he puesto como nombre al DataModule DM. A continuación en forma de comentarios te explico las sesiones:
Código Delphi [-]
unit Unit2;
interface
uses
//Este es el uses, aqui tienes que poner las unit que usarás, en tu caso agregas StdCtrls
  SysUtils, Classes, StdCtrls, DB, ADODB;

type //Sesión type: para declarar nuevos tipos
  TDM = class(TDataModule)
    QrProv: TADOTable;//Esto es una tabla que le puse dentro al datamódulo, el código se geneta automático
  private
  {Esta es la sesión donde se declaran las variables,
  procedimientos y funciones que serán usada solo por esta unit}
  public
    {Sesión Pública, Aqui podras declarar variables, procedimientos y funciones
    que se compartirán con otras units, como es el caso de tu procedimiento}
    procedure LLena_Provincia(MyCombo:TComboBox);
    {Te recomiendo que después que escribas esta línea oprimas la combinación
     de teclas Ctrl + Shift + C, lo cual agregará el "cuerpo" del procedimiento
     en la sesión de implementación listo para implementar
     }
  end;
var
  DM: TDM;
implementation
{Esta es la sesión de implementación, donde se programa realmente el cueerpo de
los procedimientos y funciones}
{$R *.dfm}
{ TDM }
{Este es el cuerpo de tu procedimiento, que se agregó al dar la combinación
de teclas, dentro de él es donde debes poner tu código}
procedure TDM.LLena_Provincia(MyCombo: TComboBox);
begin
 
end;
end.

Bueno a grandes rasgos estas son algunas de las sesiones de la unidad, claro que debes profundizar en este tema para que puedas comprender del todo su estructura.

Espero que ahora si puedas solucionar tu problema.

Saludos.
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

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
Crear secuencia numerica con un procedimiento almacenado DobleSiete SQL 9 15-04-2005 22:28:25
como crear un Procedimiento JODELSA Varios 1 14-02-2005 13:11:40
Como crear un procedimiento almacenado Javi2 SQL 1 11-02-2005 13:32:40
Como crear un procedimiento JODELSA Varios 1 12-01-2005 17:41:18
crear vistas en procedimiento almacenado cahosoft Firebird e Interbase 2 26-08-2003 00:05:30


La franja horaria es GMT +2. Ahora son las 01:18:20.


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