Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003

    [Delphi] Campo database in una listbox

    Salve gente
    Sto facendo un programma di gestione via software di un database mysql in delphi (al momento l'unico linguaggio con cui me la cavicchio).
    Come si intuisce dal topic, vorrei che all'interno di una listbox venga visualizzato il risultato di una query (o meglio i risultati di una query) al database. Assegnando alla DBlistbox il datasource che fa riferimento alla query non succede nulla (cosa che invece funziona ottimamente con una DBGrid o una DBEdit ad esempio).
    Il fatto è che non so neanche come iterare i risultati della query, se no non sarebbe difficile
    Qualcuno che ne sa qualcosa?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,282
    I risultati di un'intera query puoi ottenerli solo con un Data Control che sia associabile ad un DataSet e non ad un singolo campo.

    I controlli DBGrid e DBCtrlGrid, ad esempio, sono in grado di visualizzare la query poichè vengono associati ad un intera tabella di risultati, sulla quale puoi navigare.

    Al contrario, i controlli DBEdit, DBCheckBox, DBRadioGroup, DBListBox, DBComboBox e così via, sono associati ad una tabella e ad un campo specifico di quella tabella, pertanto non possono visualizzare i dati dell'intera query ma solo il dato contenuto nel campo specifico al quale sono associati, limitatamente al record attualmente selezionato.

    Le alternative sono: utilizzare una DBGrid per visualizzare i risultati, magari eliminando le linee di separazione tra le celle (dovresti ottenere un aspetto simile ad una ListBox, dopotutto) oppure caricare - come hai detto tu - tramite codice i dati all'interno di un controllo visuale a scelta; in quest'ultimo caso, devi leggere i valori dei singoli campi usando il metodo FieldByName (o quello che preferisci) sul componente che identifica la tabella dati e riportarlo nel controllo prescelto e spostarti in avanti di volta in volta con il metodo Next fino a quando la proprietà Eof non vale True (hai raggiunto la fine della tabella).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Grazie sei stato gentilissimo e chiarissimo.
    Solo una cosa.. ovviamente devo creare una tabella a parte che abbia come MasterSource il valore della query che sto eseguendo. Ho detto giusto o una cavolata?

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,282
    Originariamente inviato da VaLvOnAuTa
    Solo una cosa.. ovviamente devo creare una tabella a parte che abbia come MasterSource il valore della query che sto eseguendo. Ho detto giusto o una cavolata?
    Dipende. La proprietà MasterSource serve per collegare diverse tabelle allo scopo di creare una relazione "master/detail" tra di loro (leggi "principale/dettaglio").

    E' una pratica comune quando si hanno due tabelle in cui la prima contiene dati di testata (ad esempio, una fattura) e la seconda contiene le righe di dettaglio (ad esempio, le righe di una fattura) e si vuole legare queste informazioni affinchè, selezionando una riga di testata, siano accessibili nella tabella secondaria solo le righe di dettaglio corrispondenti a tale testata; nella maggior parte, il legame viene instaurato usando un campo nella tabella dettaglio (detail) che contiene lo stesso valore della riga di riferimento nella tabella di testata (master).

    La proprietà MasterSource definisce la tabella "master" per una tabella di dettaglio "detail"...da quanto ho letto sul tuo problema, credo che questa proprietà non c'entri nulla, a meno che tu non abbia a che fare con la condizione che ho scritto sopra.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Insomma il mastersource si usa quando hai a che fare con tabella di relazione....
    E allora come faccio a far sì che la tabella da cui andrò a prendere i dati abbia le caratteristiche che definisco nella query? (Esempio devo prendere dal database una lista di aziende, ma voglio che queste siano ordinate per nome).

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,282
    Originariamente inviato da VaLvOnAuTa
    Insomma il mastersource si usa quando hai a che fare con tabella di relazione....
    Esattamente.
    Originariamente inviato da VaLvOnAuTa
    E allora come faccio a far sì che la tabella da cui andrò a prendere i dati abbia le caratteristiche che definisco nella query? (Esempio devo prendere dal database una lista di aziende, ma voglio che queste siano ordinate per nome).
    Devi usare un componente Query (TQuery, TADOQuery, TIBQuery... a seconda della piattaforma usata) e definire uno statement SQL che effettui l'ordinamento così come vuoi tu; ad esempio
    codice:
    SELECT * FROM Aziende ORDER BY RagioneSociale
    (ipoteticamente) permette di selezionare tutti i campi (*) della tabella Aziende ordinandoli secondo alfabeticamente secondo il campo RagioneSociale.

    Ti basta associare poi una DBGrid al componente Query (usando un componente TDataSource come "intermediario") per visualizzare i dati; ovviamente, tali dati non sono modificabili poichè la query potrebbe raggruppare righe provenienti da diverse tabelle che Delphi non saprebbe come aggiornare (a meno che non venga debitamente istruito).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  7. #7
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    ma giusto per curiosità..
    Sapendo che DSAziende2 è un datasource, TListaAziende è una TTable..
    cosa c'è di sbagliato in questo codice?
    codice:
      QAziende.SQL.Add('SELECT * FROM aziende ORDER BY nome');
      QAziende.Active := true;
      QAziende.Open;
      DSAziende2.DataSet := QAziende;
      TListaAziende.Active := true;
      TListaAziende.DataSource := DSAziende2;
      while not TListaAziende.Eof do
       begin
        Dato := TListaAziende.FieldByName('nome').AsString;
        Dati.Add(Dato);
        TListaAziende.Next;
       end;
      LBAziende.Items := Dati;
    end;

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,282
    Originariamente inviato da VaLvOnAuTa
    ma giusto per curiosità..
    Sapendo che DSAziende2 è un datasource, TListaAziende è una TTable..
    cosa c'è di sbagliato in questo codice?
    Dipende da cosa vuoi ottenere... qual è il tuo scopo?
    Perchè hai a che fare con una query e una tabella se ti serve solo una query per ottenere i dati ordinati di cui hai bisogno?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  9. #9
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Praticamente l'errore che mi da mi dice che non si può assegnare NIL agli item di una ListBox (LBAziende). Il che vuol dire che Dati (TStrings) è vuota. Il che vuol dire che il ciclo non viene eseguito o comunque non restituisce i valori che dico io

  10. #10
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Originariamente inviato da alka
    Dipende da cosa vuoi ottenere... qual è il tuo scopo?
    Perchè hai a che fare con una query e una tabella se ti serve solo una query per ottenere i dati ordinati di cui hai bisogno?
    Pensavo che i dati restituiti dalla query dovessero essere inglobati in una table... immaginando che fosse una table "virtuale". Ho detto na cavolata. Pardon

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 © 2024 vBulletin Solutions, Inc. All rights reserved.