Newsgroup: it.comp.lang.delphi
Titolo: UpdateTabella

Ho una semplice tabella composta da due campi
 
CampoA CampoB
 
A             1
 
B             1
 
C             1
 
B            2
 
A           2
 
C            2
 
D           1
 
B           3
 
E           1
 
A          3
 
A          4
 
vorrei poter con un codice di update ottenere nel CampoB il valore 
progressivo delle presenze del CampoA
 
senza però ordinare in alcun modo la tabella,in altre parole deve essere 
così come è indicato.
 
Sono due giorni che le provo tutte con query e subquery,ma non riesco.
 
Se qualcuno mi dà una dritta lo ringrazio tanto...e non sgridatemi!
 
Delphi7Pro,database AbsoluteDatabase.
 
Grazie Luigi Paolo
 
 


Scusa ma non ho capito come li vorresti disporre questi campi.
Puoi fare un esempio di come te li aspetti?
Siccome l'ordinamento è dato sia dalla query (tramite un eventuale order 
by) che dagli indici presenti in tabella, mi riesce difficile figurarmi 
come li vorresti vedere i dati senza un tuo esempio diretto.
Ciao
 
 
-- 
morde
QT 4.7
Delphi (5,6,7.. expired)
Firebird Database


Devi per forza usare SQL? Perchè farlo con codice Delphi è moolto più 
facile.
 
 
-- 
Trasformare i sudditi in cittadini è miracolo che solo la scuola può 
compiere. (Piero Calamandrei)
 
 

Se non ho capito male, con questa queri ritrovi il numero di
occorrenze di un valore, in queso caso il B
 
SELECT COUNT(CampoA) AS Numero, CampoA
FROM Tabella
WHERE CampoA='B'
GROUP BY CampoA
 
n := Numero + 1
 
lo incrementi di uno e fai l'insert ciao Brunello


E se deve fare un UPDATE/DELETE perché sta aggiornando/cancellando un 
record inserito errato?
 
In entrambi i casi deve ricontare tutte le occorrenze precedenti e 
successive al record modificato/cancellato del CampoA.
 
Però, se non ho capito male, non ha un campo autoincrementante che gli 
dia l'ordine d'inserimento.

.. mi sono perso, anche perche non ho capito completamente l'esigenza
di base, ciao Brunello

 di base, ciao Brunello
 
Quello che ho capito io č:
 
CampoA = valore
CampoB = occorrenze di CampoA prima di questo record
 
Il suo esempio č:
CampoA CampoB
A             1
B             1
C             1
B            2
A           2
C            2
D           1
B           3
E           1
A          3
A          4
 
Metti che la seconda occorrenza di A sia errata e debba essere 
modificata in B. La procedura deve cambiare CampoB da 2 a 3, ma anche 
tutti gli altri CampoB dove CampoA = B (3 diventa 4).
 
La stessa cosa, ma con altri valori ovviamente, deve avvenire se un 
record qualunque deve essere eliminato.
 
Sempre che "Quello che ho capito io" sia corretto. :)

 tutti gli altri CampoB dove CampoA = B (3 diventa 4).
 
E deve cambiare anche tutti i CampoB dove CampoA = A che è stato 
modificato, ovviamente.

 modificato, ovviamente.- Nascondi testo citato
 
da come era formulata la richiesta non sembrava richiesto comunque se
luigipaolo può chiarire è meglio

 da come era formulata la richiesta non sembrava richiesto
 
In effetti no, ma oramai tendo a vedere possibili problemi anche dove, 
magari, non ce ne sono.
 
Comunque, sia che passi da SQL sia che passi da codice Delphi deve 
sempre avere un campo in più che gli dà l'ordine d'inserimento dei 
record, altrimenti come fa a contare quante occorrenze ci sono prima e 
quali aggiornare dopo?
 
 

 ha scritto nel messaggio 
news:4e6e207b$0$15670$4faf...@reader2.news.tin.it...


 dei CampiA+CampiB
 
C'ho capito poco o nulla da questa seconda spiegazione ma, così a naso, 
mi sembra che la tua soluzione sia più complicata del problema che vuoi 
risolvere il che non è una bella cosa. :)
 
Non basta, ad ogni inserimento/modifica/cancellazione, un semplice 
scroll della tabella dal primo all'ultimo record ed un conteggio delle 
occorrenze? Non è una soluzione elegante, non è la soluzione migliore, 
ma se non hai unoseguitodaduecentozeri di record da manipolare è 
accettabile.

Se fosse così avrei già risolto,il problema è che i dati della tabella in 
questione vengono successivamente accodati ad una tabella di archivio 
dell'ordine di 10.000 record (che contiene già molti valori A,B,C 
ecc.),pertanto i valori incrementali inseriti nella tabella non avrebbero 
più senso rapportati alla tabella di archivio,in quanto dalla tabella 
archivio si deve di nuovo ricreare la conta incrementale di ogni valore.
Devo provare con query di update e Lookup.
Grazie comunque
LuigiPaolo


 Grazie comunque
 
Quindi gli unici dati delle occorrenze validi sono quelli della tabella 
archivio. Quelli della tabella "in questione" sono solo temporanei.
 
Conti tutte le occorrenze nella tabella archivio ogni volta che termini 
il travaso dei dati della tabella temporanea. Diecimila record non sono 
una montagna insormontabile, anzi.

 Se qualcuno mi dà una dritta lo ringrazio tanto...e non sgridatemi!
 
direi che così risolvi:
 
update tabella set campob=1;
 
update tabella a
 set a.campob=a.campob+1
 from tabella a
 left outer join tabella b
 on 
b.id
<
a.id
 
 where b.campoa=a.campoa;
 
-- 
Alessandra
 
Incurabilmente religioso, questo è il modo migliore di descrivere la
condizione mentale di così tanta gente - Thomas Edison