Ver Mensaje Individual
  #11  
Antiguo 13-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
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 pmtzg.

Cita:
hay alguna manera para que mis procesos que estan en mi datamodulo los ejecute desde otro form en forma automatica colocando los procedure en el FormPaint sin q me marque error?
El problema es que al invocar el procedimiento:datamodule.crea_base_datos en el evento OnPaint del form, será llamado cada vez que el form necesite repintarse.
Para que compruebes esto:
DataModule:
Código Delphi [-]
procedure TDMDatos.Open_bdfb;
begin
  IBDatabase1.DatabaseName:=RutaBdFb;
  IBDatabase1.LoginPrompt:= False;  // login desactivado
  IBDatabase1.Params.Clear;
  IBDatabase1.Params.Add('user_name=SYSDBA');
  IBDatabase1.Params.Add('password=masterkey');
  if not IBDatabase1.Connected then
  begin
      //IBDatabase1.Connected:=true; (Debajo haces Open)
     IBDatabase1.Open;
     IBTransaction1.DefaultDatabase:=IBDatabase1;
  end;
  if not IBTransaction1.Active then
    IBTransaction1.Active:=true;
end;

Form invocador: (agrega un TEdit y un TButton)
Código Delphi [-]
...
procedure TForm1.FormPaint(Sender: TObject); 
begin
  DMDatos.Open_bdfb;
  if DMDatos.IBDatabase1.TestConnected then
    ShowMessage('Conectado correctamente')
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Visible:= not Edit1.Visible;
end;
...
Al abrir el form muestra: "Conectado correctamente", al primer click sobre el botón te va a mostrar: "No es posible realizar la operacion -- La Base de Datos está actualmente abierta". Y si cambias de ventana y volves al form, vas a ver el cartel de error en cascada tantas veces como lo hagas, ya que el form se repinta y el evento OnPaint es disparado.

En el caso de que llames a la función DMDatos.Open_bdfb desde el evento OnCreate del form, asegurate de que en el órden de creación esté primero DMDatos (Project-> Options ->Auto-create forms) . De no ser así, vas a recibir un error de EAccesViolation ya que al invocar el procedimiento Open_bdfb, en el evento OnCreate del form invocador, DMDatos aún no ha sido creado.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita