Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [delphi]dbexpress query

    Ciao a tutti!
    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:
    codice:
    procedure TForm1.btInvioClick(Sender: TObject);
    var
      ImageFileName:string;
    
    begin
    
      TSimpleDataset1.Close;
      TSimpleDataset1.Active:=true;
      ImageFileName:=TSimpleDataset1.FieldByName('Immagine').AsString;
    
      Image1.Picture.LoadFromFile(ExtractFilePath(Application.exename)+
                                'CartellaImmagini\'+ ImageFileName);
    end;
    Grazie, anche solo per un suggerimento!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    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!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    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?

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    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!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    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)

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    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)
    Ho paura che l'unico modo per determinarlo sia verificarne l'effetto.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    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 ?

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    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'... ):
    codice:
    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!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    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'... ):
    codice:
    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!
    Scusa Marco se mi permetto, ma non sarebbe più sensato effettuare una assegnazione della variabile ImageFileName in questo modo:
    ImageFileName := DataSet.FieldByName('Immagine').AsString;


  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    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.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.