Ver Mensaje Individual
  #5  
Antiguo 07-02-2007
jlrbotella jlrbotella is offline
Miembro
 
Registrado: ene 2007
Posts: 185
Reputación: 18
jlrbotella Va por buen camino
Aplicación MDI

Hola:

Despues de hacer muchas pruebas, he comprobado que un form mdi, comparte la dirección del datamodule, es decir, por muchas veces crees nuevos forms mdi, comparten las mismas tablas y datasource, y es por ello, que cuando mueves un registro se mueven en todas, y lo pero es que si cierras una tabla se cierra en todas.

La solución que he usado es crear un nuevo datamodule al hacer el create del form, este datamodule es de la misma clases del datamodule original y al menos funciona correctamente.

Este es una gran ventaja, ya que en el datamodule original, podemos definir las tablas, con sus campos correctamente, así como todos los procedimientos que hagan falta, en vez de crear tantos ttable por cada formulario.

Aquí teneís el codigo de ejemplo del form hijo:

También lo podemos usar en cualquier form, aunque no sea mdi, solo fijaros en la declaración de la clase datamodule : Tdatamodule3;

Espero que os sea de ayuda.


Código Delphi [-]

unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, DB, unit3;
type
TForm2 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
// Datamodulo
datamodule : TDatamodule3;
public
constructor create(Aowner : Tcomponent);
end;
var
Form2: TForm2;
implementation

{$R *.dfm}
constructor Tform2.create(Aowner: TComponent);
begin
inherited;
datamodule := tdatamodule3.Create(self);
datasource1.DataSet := datamodule.Ifxtcliente;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
datamodule.ifxtcliente.close;
action := cafree;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
DataModule.Ifxtcliente.open;
end;
end.
Responder Con Cita