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; IBDatabase1.Params.Clear;
IBDatabase1.Params.Add('user_name=SYSDBA');
IBDatabase1.Params.Add('password=masterkey');
if not IBDatabase1.Connected then
begin
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.