come ti avevo accennato sopra devi creare una property nel form di tipo TMioDataModule.
Ad esempio:
class TForm1 = class(TForm)
private
...
FLocalDm: TMioDataModule;
...
public
property LocalDm: TMioDataModule read FLocaldm write FLocalDm;
end;
Nella Create del form, fai come sotto:
procedure TForm1.Create(...
FLocalDm:=TMioDataModule.Create(self);
// ora devi cambiare i puntatori ai datasource
DataSource1.DataSet:=LocalDm.Table1;
end;
Edit:
in questo modo ogni istanza della classe TForm1 avrà il suo datamodule privato
Si possono mettere in campo moltissime strategie.
Quella che indicava nomore è la più semplice.
A questo punto suggeriei si pensare in design pattern. Con un bel MVC. Tanto per incasinare lo scenario. :D
Un esempio al volo:
TController = class(TDataModule)
//...
property View : TFormViewEditor;
property Model : TDataModuleZeos;
End;
In questo modo quando hai bisogno di una nuova "finestra" crei un nuovo controller.
Il vantaggio è che potresti anche assegnare più viste identiche allo stesso controller.
TController = class(TDataModule)
//...
property Views :array of TFormViewEditor;
property Model : TDataModuleZeos;
End;
Il controller intercetta il focus delle varie viste e salva lo stato del dataset che viene puntato dalla form selezionata.
In questo modo eviti di avere un numero esagerato di cursori aperti.
Poi se il database è robusto e la connessione è buona, puoi anche avere più cursori aperti, ma ho il timore che si possano "incartare" e una modifica fatta con un cursore va a finire su un altro :D
Il controller servirebbe proprio a fare da "proxy" sulle richieste di modifica e lettura, in modo che ci sia un solo cursore aperto e si va a lavorare proprio su quello.
Stilgar.