Oppure

Loading
09/12/16 22:47
Goblin
Considerando che è un frammento, tecnicamente il tuo codice è esatto, con delle piccole imperfezioni, nel caso di query vuota esci lasciando la query aperta e i campi edit non sono valorizzati, io (personalmente) avrei scritto in modo un po' diverso, ma queste sono mie fisime mentali:
    var
      oSql: TAdoQuery;  // oggetto sql locale
    begin
      oSql := TAdoQuery.Create;  // non ho delphi sotto mano forse è :  oSql := TAdoQuery.Create(nil);
      try
        oSql.connection := connection; // attacco la connection attiva per la select    
        // select secca solo sui campi da leggere, è inutile portarsi dietro campi che non servono  
        oSql.SQL.text := 'select NOME, COGNOME, CITTA from VATTELAPESCA where  NOME= "Antonio"';
        oSql.Open;
        if not (oSql.Bof and oSql.Eof) then // se il dataset risultante non è vuoto
        begin
          Edit1.text := oSql.FieldByName('NOME').AsString;
          Edit2.text := oSql.FieldByName('COGNOME').AsString;
          Edit3.text := oSql.FieldByName('CITTA').AsString;
        end
        else // dataset vuoto resetto i valori
        begin
          Edit1.text := '';
          Edit2.text := '';
          Edit3.text := '';
        end;
      finally
        oSql.Close;  // chiudo la query
        FreeAndNil(oSql);  // libero l'oggetto TAdoQuery
        // oSql.free;
        // oSql := Nil;
      end;
    end;

Se devi solo visualizzare delle informazioni su un record ben preciso e identificabile direi che questa è la strada migliore e più veloce.
Il problema sorge se ti trovi davanti a più record che soddisfano la tua clausula WHERE, nel caso questo codice è da buttare, o almeno da modificare.
Altro problema, ma di minore impatto, nel caso devi fare delle modifiche, in questo caso al momento del salvataggio devi rifare una query di update con la stessa clausula WHERE usata nella Select e leggendo i valori dai vari edit.
Poi ovviamente se ti trovi nel caso di un dataset multirecod a cui devi fare delle modifiche, allora la gestione diventa problematica.
Io, sempre personalmente, nel caso del record singolo immodificabile avrei scritto la stessa cosa, ma nel caso in cui il tutto si trasforma in multirecord e modificabile allora mi affido ai componenti TDBText (e simili) legandoli ad un oggetto TDataSource, al momento della creazione della pagina imposto la query di apertura della tabella con un "select * from .." attacco al TDataSource la mia query e lascio la gestione delle modifche alla VCL di delphi, gestendo a mano solo i comandi di salvataggio (Post), di annulla modifiche (cancel) e di chiusura pagina chiedendo all'utente, nel caso ci sono state delle modifiche non salvate, cosa vuole fare se salvare o buttare via le modifiche.
G.

Ibis redibis non morieris in bello
12/12/16 11:20
smanettone83
tutto chiaro grazie mille solo una cosa...

mi spieghi questo codice?

if not (oSql.Bof and oSql.Eof) then...
aaa
12/12/16 13:06
Goblin
E' il test per determinare se il dataset, appena aperto contiene record:
BOF=BeginOfFile
EOF=EndOfFile
E' simile a quello che hai scritto tu: "recordcount>0".
Nel caso in cui non ci sono record avrai un ritorno a "true" ossia il "puntatore a record" (o "Cursore" chiamalo come vuoi) del dataset è sia all'inizio che alla fine, in caso contrario si avrà il ritorno a "false" ed invertendo con un not si entra nello statment if, in parole umane: "Se NON sono all'inizio(BOF) e alla fine(EOF) del dataset fai qualcosa".
Cmq se non ricordo male nei vari documenti di embarcadero consigliano di usare la proprietà "isEmpty" per testare se il dataset contiene dei record o meno.
G.
Ibis redibis non morieris in bello