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:
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.
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