Newsgroup: it.comp.lang.delphi
Titolo: Dal record della query a quello del dataset

 
Volevo sostituire una query alla table mostrata in un DBGrid, ma una volta 
fatta la scelta di un record nel dbgrid, poi ho bisogno di operare nel 
corrispondente record della table. Qual č il modo migliore di passare 
dall'uno all'altro ?
 

 passare dall'uno all'altro ?
 
Se ti dico che non ho capito .... ti offendi ??
 
Tento comunque ...
Se hai una DBGrid non ti devi preoccurare di molto in quanto fa tutto lei.
Avendo un DataSet ogni riga della griglia punta gia' al suo 
corrispondente record; Ovvero indipendentemente da quello che visualizzi 
in griglia, hai tutti gli alri dati del record accessibili con fieldbyname.
 
Ciao
 
Daniele
 
 

 dall'uno all'altro ?
 
Al solito, hai le idee confuse.
Facciamo un pass indietro: con la table come fai? posta un po di codice.
 
A.

Con la table, so che la riga del DBGrid che lo rappresenta nella griglia 
corrisponde al record del dataset e quindi lo indirizzo semplicemente con 
myTable.FieldByName('xxx').AsString. Ho sempre usato le Tables e sto 
cercando man mano di svincolarmene ricorrendo dove posso e so fare con delle 
query, che ovviamente in lettura non mi danno problemi. Ma quando, come in 
questo caso, necessito di entrare in aggiornamento della riga che clicco, se 
questo è un result set di una query non so come fare, perchè la query non è 
aggiornabile (se non in condizioni molto limitanti..)
 
"Alberto Salvati"  ha scritto nel messaggio 
news:75a4e050-2cde-420a...@googlegroups.com...


Quindi, il tuo problema non è capire su quale record sei ma come modificare il record corrente, giusto?
Che oggetto query usi?
 
A.

Uso TQuery e il BDE. Il risultato della query potrebbe essere teoricamente 
modificabile, ma a condizioni tanto vincolanti che non è possibile usare 
questa modalità
 
"Alberto Salvati"  ha scritto nel messaggio 
news:e6576da7-f339-44a6...@googlegroups.com...


Daniele non ho risposto al tuo messaggio pensando che avresti letto quanto 
risposto aa Alberto..
 
"Daniele"  ha scritto nel messaggio news:rum53e$10fs$1...@gioia.aioe.org...


 questa modalità
 
Onestamente, non ho capito.
 
A.

Lo so, non te lo volevo dire ..
L'automatismo a cui accenni ha condizioni che ne limitano fortemente l'uso, 
tipo che la query non può usare l'order by etc. Non me le ricordo le 
condizioni in questo momento, ma tutte le volte che ho provato, ci ho dovuto 
poi rinunciare.
No, devo trovare un altro modo, tipo acquisire una chiave con la quale 
agganciare il corrispondente record della Table.
Non mi decido mai a fare la migrazione, perchè per me questo è ormai un 
hobby, anche se contemporaneamente  mi dispiace non farla, perchè sono 
ridotto a usare VMWare per far girare in ambiente Windows 7 alcune utility 
BDE che su Windows 10 danno problemi. Ma invecchiando lo sento un compito 
troppo arduo. Dovrei trovare qualcuno che mi instradi, mi faccia fare i 
passi che poi potrei completare anche da solo. Peccato che c'è il Covid, 
sennò l'avrei chiesto anche a te..
Cosa ne diresti ?
 
 
"Alberto Salvati"  ha scritto nel messaggio 
news:bde7351a-2b71-4f20...@googlegroups.com...



Ciao Stark,
se ho ben capito io farei così, nella query estrai anche la chiave univoca che identifica il record da modificare, dopodichè visualizzi solo i campi che ti interessano che possono essere anche i campi che fanno parte della chiave, quando devi effetuare l'update i campi chiave li hai in canna e puoi fare l'update secco.
Spero di essere stato chiaro e spero di non averti detto una castroneria.
Ciao da Enrico Giudici c/o Anthelios

Grazie. In effetti ho pensato di fare come credo tu mi abbia suggerito 
Quando clicco sul record del DBGrid , acquisisco i valori dei campi e li 
metto in un pannello di edit. per la modifica. Con la chiave del record 
accedo alla Table usando "locate" e scrivo i dati editati prelevando i 
valori dagli edit. Un pò macchinoso, ma mi pare di non aver trovato altro 
modo.
 
"Enrico Giudici"  ha scritto nel messaggio 
news:962226f7-3e15-4b88...@googlegroups.com...


 accedo alla Table usando "locate"
 
Di quale TTable parli? Hai esordito dicendo che usi una query, TQuery, per la precisione.
A cosa ti serve locate? Se GIA' sul record da aggiornare.
Non usando più BDE da decenni, non ricordo le limitazioni all'uso di TUpdatSql.
Puoi per favore postare qua qualcosa relativo ai vincoli che la TQUery deve rispettare affinchè si possano gestire gli aggiornamenti usando TUpdateSql?
 
A.
 
 

Di quale TTable parli?  ... Evidentemente non mi sono spiegato bene. 
Attualmente, il mio DBGrid è associato direttamente alla TTable (tramite il 
DataSource). Volevo sostituire alla TTable la TQuery e quindi nel DBGrid 
avrei il risultato di una select. So che scorrendi il DBGrid, sono già sul 
record da aggiornare, come hai detto, ma il record di un result set, che io 
sappia, non è aggiornabile. Se dai questo per assodato, stavo elucubrando 
sul modo di passare da quel record della query al record della Table. 
'Acquisire' i dati voleva dire, con FieldByName,  disporli su dgli edit per 
la eventuale modifica e riacquisirli per scriverli sul record della Table e 
il 'locate' serviva a trovare il record giusto.
Dire che il resutl set della query non è aggiornabile non è del tuto vero, 
ma tutte le volte (poche) che ho provato nel lontano passato, mi sono 
trovato di fronte a delle limitazioni. Mi ricordo, per esempio, che nella 
select non si possono usare Distinct, Joins, Group by e non mi ricordo che 
altro.
Invece 'TUpdateSql' che tu citi non lo conosco e potrei approfondire, ma mi 
era sembrato meno complicato indagare sulla possibilità di passare dalla 
query alla Table se fosse stato semplice.
 
"Alberto Salvati"  ha scritto nel messaggio 
news:c9f2c555-1233-4efb...@googlegroups.com...


Ho cercato notizie si TUpdateSql e, sulla base di roba quasi più vecchia di 
me, ho cominciato a fare delle prove, che devo sospendere per una decina di 
giorni perchè mi devo assentare per tronare alla città dei miei anni giovani 
..
 
"Alberto Salvati"  ha scritto nel messaggio 
news:c9f2c555-1233-4efb...@googlegroups.com...
