Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [Delphi 2007] DBGrid e valore cella

    Salve,
    dopo aver effettuato varie ricerche su Dispense, Forum html.it, Google, non sono riuscito a trovar nulla, probabilmente mi è sfuggita perchè sto con la testa un pò nel pallone. Ad ogni modo vi porgo il seguente "problema": (è un problema per me che non so farlo, per voi esperti di delphi sarà semplice routine )

    Ho due DbGrid che prendono i dati da un database access contenente due tabelle: Azienda e Contratti. Ovviamente sono tabelle relazionate dove un azienda ha più contratti. Ora vorrei fare in modo che a seconda dell'azienda selezionata nel primo DbGrid mi visualizza solo i contratti dell'azienda in questione.

    Io ho pensato di fare in questo modo:

    Il primo DbGrid lo valorizzo con una TADOTable, il secondo con una TADOQuery che varia il suo parametro a seconda della rigra selezionata nel primo dbgrid. Ora quello che non riesco a fare e proprio questo, e cioè ottenere il valore di Rigaselezionata.colonnaimpostatadame. Come faccio ad ottenere questo valore? e se volessi aggiungere un'altro contratto nel secondo dbgrid come faccio a dirgli che deve inserirmi nella tabella contratti l'IDAzienda dell'azienda selezionata ?

    Vi ringrazio in anticipo per le eventuali risposte,
    Neptune.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  2. #2
    Il problema è ancora vivo, non riesco ancora a trovar risposta. Credo però che sia una cosa di uso quotidiano, possibie che nessuno ci si è mai imbattuto fino ad ora?
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,325
    Non è necessario fare quanto dici: i componenti supportano il legame master/detail attraverso le proprietà MasterSource e MasterFields, senza dover scrivere una riga di codice.

    Leggi la Guida in linea in proposito.

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

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

  4. #4
    Originariamente inviato da alka
    Non è necessario fare quanto dici: i componenti supportano il legame master/detail attraverso le proprietà MasterSource e MasterFields, senza dover scrivere una riga di codice.

    Leggi la Guida in linea in proposito.

    Ciao!
    Ora mi ci documento meglio, ma se avessi comunque bisogno di estrapolare riga x colonna y c'è un modo per farlo?
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,325
    Originariamente inviato da Neptune
    Ora mi ci documento meglio, ma se avessi comunque bisogno di estrapolare riga x colonna y c'è un modo per farlo?
    Mi ero dimenticato di esemplificarti questo caso.

    Devi tenere a mente che ciascun controllo visuale data aware (cioè un controllo che può essere associato ai dati) fa riferimento, tramite la proprietà DataSource, ad un DataSet, intendendo con questo termine ogni componente che discende dall'omonima classe (ADOTable, ADOQuery, SQLTable, IBQuery, ...) e che fornisce l'accesso ad un insieme di record (recordset).

    Quando tu agisci su un controllo, come il TDBGrid o il TDBNavigator, puoi modificare il record su cui si trova "puntato" in quel momento il DataSet collegato, oltre a poter modificare anche i campi del record medesimo. Spostandoti quindi sulla griglia o sul navigatore, selezioni un record differente all'interno del DataSet, "intimando" a tutti i controlli collegati a quel DataSet di aggiornarsi per riflettere lo stato della tabella dati, o del record, che stanno visualizzando, a seconda del contesto e delle proprie funzionalità per il controllo di cui si parla.

    Se hai selezionato un record dalla griglia, quindi, quello sarà anche il record puntato in quel momento nel componente DataSet, ADOTable o ADOQuery nel tuo caso; usando FieldByName puoi accedere all'oggetto che rappresenta uno specifico campo della tabella, leggendo poi il valore del campo stesso con una delle proprietà che restituiscono tale valore opportunamente convertito (in base al tipo di dati sottostante, appartenente alla tabella del database fisico collegato).

    Un esempio di codice:
    var
    MyIntegerValue: Integer;
    begin
    MyIntegerValue := ADOTable1.FieldByName('MIOCAMPOINTERO').AsInteger;
    end;
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  6. #6
    Per testare il metodo fillbyname ho creato un bottone con il seguente codice:

    codice:
         ADOQuery1.Active := false;
         id :=  ADoTable1.FieldByName('IDAzienda').asString;
    
    
    
    with ADOQuery1 do begin
      with SQL do begin
        Clear;
        Add('SELECT *');
        Add('FROM Contratto where IDAzienda ='+ id);
      end;
      Open;
    end;
    In questo modo, come dicevo prima, mi prende l'IDAzienda dal primo datagrid (che è linkato ad Adotable1) e mi carica tutti i contratti, tramite Adoquey1, nel secondo datagrid.
    Però in questo caso, non potrei caricare nuovi dati, perchè mi dice che "ci vuole un campo correlato", insomma non mi passa il codice di idazienda nella funzione di inserimento (uso il tdbnavigator)


    EDIT: Con il mastersoruce invece riesco a farlo, ora che ho trovato dov'è presente l'opzione masterfield
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,325
    Originariamente inviato da Neptune
    Per testare il metodo fillbyname ho creato un bottone con il seguente codice:
    [...]
    In questo modo, come dicevo prima, mi prende l'IDAzienda dal primo datagrid (che è linkato ad Adotable1) e mi carica tutti i contratti, tramite Adoquey1, nel secondo datagrid.
    Ribadisco che Delphi supporta già il modo corretto e collaudato per stabilire legami master/detail tra tabelle, senza dover scrivere codice (che potrebbe non prevedere tutte le problematiche e comunque non è necessario).

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

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

  8. #8
    Altra piccola domanda: Quale evento del dbgrid corrisponde a: "quando cambia la riga selezionata" ? non riesco a trovare niente che ci somigli.

    Daccordo uso il mastersource e via

    P.S: Non sarebbe una buona cosa aggiungerla tra le pillole questa discussione, o ancora meglio creare un thread con le informazioni di questo scritte meglio ? credo che sia un problema in cui tutti ci si imbatteranno
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,325
    Originariamente inviato da Neptune
    Altra piccola domanda: Quale evento del dbgrid corrisponde a: "quando cambia la riga selezionata" ? non riesco a trovare niente che ci somigli.
    Come nel caso precedente, non si lavora sulla griglia, che è solo un ricettore di comandi e azioni da parte dell'utente che si riflettono, poi, sul DataSet sottostante.

    Ogni operazione che riguarda quindi l'interrogazione dei dati va indirizzata al DataSet, mentre la griglia va coinvolta solo nel caso di "personalizzazione della visualizzazione" legata al controllo medesimo, che il DataSet non può prevedere (in quanto non può immaginare a priori a quali controlli verrà associato).

    Ogni DataSet ha un evento AfterScroll che viene generato quando ci si sposta da un record ad un altro.

    Suggerisco come sempre di leggere la Guida in linea per indagare sulle questioni più semplici.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,325
    Originariamente inviato da Neptune
    P.S: Non sarebbe una buona cosa aggiungerla tra le pillole questa discussione, o ancora meglio creare un thread con le informazioni di questo scritte meglio ? credo che sia un problema in cui tutti ci si imbatteranno
    Sarebbero tante le discussioni da aggiungere, in questo caso.

    Questa discussione sarebbe già facilmente individuabile con una banale ricerca usando come parole chiave i nomi dei componenti, le terminologie, gli eventi, le proprietà, i metodi e le classi di appartenenza citate.
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.