PDA

Visualizza la versione completa : [DELPHI] Query con dbExpress e visualizzazione record


vicky
21-11-2005, 19:40
Ciao a tutti! :ciauz:
Uso un componente TSimpleDataset per estrarre delle immagini da una tabella appartenente ad un db Firebird. Eseguo una query select e mi aspetto di ottenere la visualizzazione in una TImage di una serie di immagini da scorrere. Il mio problema è che visualizzo solo un'immagine e non so come si scriva il codice per elencare tutti i record del dataset. Ecco il codice del mio tasto Invio:

procedure TForm1.btInvioClick(Sender: TObject);
var
ImageFileName:string;

begin

TSimpleDataset1.Close;
TSimpleDataset1.Active:=true;
ImageFileName:=TSimpleDataset1.FieldByName('Immagi ne').AsString;

Image1.Picture.LoadFromFile(ExtractFilePath(Applic ation.exename)+
'CartellaImmagini\'+ ImageFileName);
end;

Grazie, anche solo per un suggerimento!

alka
21-11-2005, 20:55
Dovresti definire meglio quello che vuoi ottenere espresso nei termini di ciò che desideri vedere a video.

Nel codice che hai postato, apri semplicemente un DataSet e, ammesso che vi sia un record al suo interno (condizione che non viene controllata) provvedi ad ottenere il valore del campo che contiene il nome del file immagine che vai successivamente a caricare nel controllo visuale TImage.

Al momento, stai agendo su un solo record.

Se vuoi agire su tutti i record contenuti nel DataSet, gli strumenti e il codice che devi scrivere dipendono sensibilmente da cosa vuoi ottenere e da come vuoi ottenerlo.

Generalmente, devi associare al tuo DataSet un controllo "data aware" (lo sono tutti quelli presenti nella pagina Data Controls); se utilizzi una DBGrid, ti verranno mostrati tutti i record all'interno di una tabella classica; se utilizzi un DBCtrlGrid, puoi definire per ciascun record una serie di controlli che vengono ripetuti e visualizzano il valore del record corrente.

Per poter sapere come procedere in questo caso, occorre conoscere le tue intenzioni in merito al trattamento che prevedi per i record contenuti nel tuo DataSet.

Ciao! :ciauz:

vicky
21-11-2005, 23:19
Ho inserito una DBGrid ed ho così visualizzato l'elenco dei record che compongono il mio dataset. A questo punto vorrei visualizzare le immagini contenute in ciascun record (campo 'Immagini')all'interno di un controllo TImage spostandomi da una all'altra immagine con un controllo TDBNavigator. Per quanto abbia già fatto molte ricerche i merito non so trovare una soluzione. C'è qualcuno che può aiutarmi? :)

alka
22-11-2005, 00:31
Potresti intercettare l'evento OnAfterScroll del DataSet; esso viene generato quando avviene il posizionamento su un preciso record del DataSet, ad esempio quando la tabella viene aperta oppure quando ci si sposta da un record all'altro.

All'interno di questo evento, è possibile reperire per il record correntemente selezionato il valore dei singoli campi, tra cui il percorso dell'immagine che può essere utilizzato per caricare il file grafico all'interno del controllo TImage.

L'efficacia e le performance di questo modo di procedere dipendono sensibilmente dalla rapidità di caricamento delle immagini (a seconda delle loro dimensioni e peso in colori).

Ciao! :ciauz:

vicky
22-11-2005, 14:09
A parte il fatto che non so nanche da che parte iniziare con l'evento "OnAfterScroll", senza che io diventi matta inutilmente, la performance del metodo è accettabile con immagini JPEG di 700-800 KB ciascuna? (con un max di 2500 immagini per dataset) :ciauz:

alka
22-11-2005, 14:12
Originariamente inviato da vicky
A parte il fatto che non so nanche da che parte iniziare con l'evento "OnAfterScroll", senza che io diventi matta inutilmente, la performance del metodo è accettabile con immagini JPEG di 700-800 KB ciascuna? (con un max di 2500 immagini per dataset) :ciauz:
Ho paura che l'unico modo per determinarlo sia verificarne l'effetto. :stordita:

vicky
23-11-2005, 00:56
So che sono un po' insistente...ma ho proprio bisogno di un'altro aiuto :)
Mi faresti un esempio, anche generico, del codice che potrei scrivere nell'evento On AfterScroll ? :ciauz:

alka
23-11-2005, 11:16
Prendendo il codice di esempio che hai postato all'inizio (e che conteneva alcuni identificatori dal nome sospettoso, come TSimpleDataSet1 (la "T" mi scompiglia un po'... :stordita: ):


procedure TForm1.SimpleDataSet1AfterScroll(DataSet: TDataSet);
var
ImageFileName: string;
begin
ImageFileName := SimpleDataSet1.FieldByName('Immagine').AsString;
Image1.Picture.LoadFromFile(
ExtractFilePath(Application.ExeName) + 'CartellaImmagini\' + ImageFileName);
end;


Il codice è a puro titolo esemplificativo.

Ciao! :ciauz:

AlbertoPicca
23-11-2005, 12:33
Originariamente inviato da alka
Prendendo il codice di esempio che hai postato all'inizio (e che conteneva alcuni identificatori dal nome sospettoso, come TSimpleDataSet1 (la "T" mi scompiglia un po'... :stordita: ):


procedure TForm1.SimpleDataSet1AfterScroll(DataSet: TDataSet);
var
ImageFileName: string;
begin
ImageFileName := SimpleDataSet1.FieldByName('Immagine').AsString;
Image1.Picture.LoadFromFile(
ExtractFilePath(Application.ExeName) + 'CartellaImmagini\' + ImageFileName);
end;


Il codice è a puro titolo esemplificativo.

Ciao! :ciauz:

Scusa Marco se mi permetto, ma non sarebbe più sensato effettuare una assegnazione della variabile ImageFileName in questo modo:
ImageFileName := DataSet.FieldByName('Immagine').AsString;

:ciauz:

alka
23-11-2005, 12:37
Originariamente inviato da AlbertoPicca
Scusa Marco se mi permetto, ma non sarebbe più sensato effettuare una assegnazione della variabile ImageFileName in questo modo:
ImageFileName := DataSet.FieldByName('Immagine').AsString;

Nel caso in esame, è equivalente: l'effetto è lo stesso.

Certo, se presumi di agganciare l'evento a DataSet differenti quella è la strada migliore, e dovrebbe essere tale in senso generale; semplicemente, non volevo complicare ulteriormente l'esempio in questione. :stordita:

Loading