Newsgroup: it.comp.lang.delphi
Titolo: Problemi di Dataset

Ciao a tutti,
ho un problema con il componente TClientDataset...
Nella mia applicazione ho quattro Dataset: uno nella MainForm, un contenuto 
in una classe creata da me e altri due in una form secondaria: uno 
principale (perché lo uso di più e per primo, nda), uno secondario.
Se non carico nulla nella MainForm (e nemmeno nell'oggetto da me creato) la 
Form secondaria si apre e il metodo Dataset.LoadFromFile del suo Dataset 
principale funziona regolarmente.
Ma se la stessa operazione viene svolta dopo che ho caricato dati nei primi 
due dataset, allora il metodo LoadFromFile del Dataset principale della Form 
secondaria non fa assolutamente nulla! Senza dare nessun errore, ma senza 
valorizzarmi i campi del Dataset!
Cosa sognifica un simile comportamento?
Spero di essere stato abbastanza chiaro, anche se rileggendo ho i miei 
dubbi...
Grazie a tutti per l'aiuto! 

 del suo Dataset principale funziona regolarmente.
che significa "non carico nulla nella mainform"?
AS

che significa "non carico nulla nella mainform"?
Scusa, non son stato chiaro.
Dei quattro dataset che utilizzo, due usano il metodo LoadFromFile per 
caricare i dati da file.
Utilizzo due file diversi per i due Dataset.
Uno si trova in un oggetto comune a tutte le units ed è istanziato via 
codice, l'altro è in una Form secondaria.
Il problema è che se non carico nulla (col metodo LoadFromFile) nel Dataset 
dell'oggetto pubblico, allora il metodo LoadFromFile del Dataset nella Form 
secondaria riesce e tutto funziona alla perfezione.
Se, però, il Dataset presente nell'oggetto pubblico ha già utilizzato il 
metodo LoadFromFile per caricare i dati, lo stesso metodo, del Dataset nella 
Form secondaria fallisce senza restituire errori di sorta.

continuo a non capire. Posta un po di codice.
Inoltre i 4 cds usano 4 files diversi o no?
AS


Allora:
Il programma č composto essenzialmente da due form
  - frmMain (la form principale del programma)
  - frmCreaDati (la form alla quale si accede tramite voce di menů)
e da altre due Unit
  - Utente (definizione della Class TUtente)
  - OggettiPubblici (oggetti comuni a tutte le units e forms del progetto)
I dataset che hanno bisogno di caricare dati da file sono solo due, gli 
altri due li uso d'appoggio per giostrarmi i dati.
la Unit OggettiPubblici č inclusa in *ogni* Unit del progetto, e al suo 
interno č presente anche l'istanza di un oggetto TUtente.
Tramite la Class TUtente gestisco tutti i dati inseriti dall'utente, nella 
sua definizione č presente un ClientDataset:
TUtente = class
  private
    .
    uDataset: TClientDataset;
    .
  public
    Nome: string;
    Cognome: string;
    property Dataset: TClientDataset read uDataset;
    procedure Salva(filename: string);
    function Carica(filename: string): boolean;
    .
    .
    .
  end;
In questo modo tramite la procedure TUtente.Salva(filename: string) e 
TUtente.Carica(filename: string), che non fanno altro che utilizzare 
rispettivamente i metodi TClientDataset.SaveToFile e 
TClientDataset.LoadFromFile, salvo e carico i dati dell'utente.
Nella frmCreaDati, dove analizzo i dati di un altro file, č presente un 
ClientDataset che, all'evento OnShow della form deve caricare i dati:
procedure TfrmCreaDati.FormShow(Sender: TObject);
begin
  .
  .
  DatasetMain.LoadFromFile(fileDatabase);
  .
end;
In pratica, tutto funziona assolutamente bene... finché l'accesso alla 
frmCreaDati č la prima cosa che capita. Se richiamo il metodo TUtente.Carica 
(che contiene al suo interno uDataset.LoadFromFile), il metodo 
DatasetMain.LoadFromFile(fileDatabase) che vedi qua sopra, non funziona per 
niente!
Spero di essere stato chiaro e scusa per il post cosě lungo, ma mi si stan 
presentando problemi che in VB non vedevo...
(pur essendo Delphi molto piů comodo per molti altri versi!)
Grazie! 

1) assegni la prop dataset alle istanze di TUtente?
2) togli il load dal'evento show prima di subito.
Vedi bene cosa dice la guida sull'evento onshow di tform.
Vb è tutto un problema.
AS

Vb è tutto un problema.
Soprattutto .NET: mai più, per carità! :-)
AS