View Full Version : Posizionamento record
Ciao a tutti;
O il seguente problema: Dovrei in una griglia dati, poter spostare l’ordine dei record visualizzati.
Mi spiego meglio con un esempio:
supponiamo che abbia visualizzati sulla griglia dati questi tre record:
RECORD-1
RECORD-2
RECORD-3
Dovrei poter spostare ad esempio il RECORD-3 nella posizione del RECORD-2, per cosi ottenere questo risultato:
RECORD-1
RECORD-3
RECORD-2
Etc… Etc…
Spero che mi possiate aiutare. Grazie 1000 a tutti. Carmen :confused:
Un problema simile l'ho avuto anch'io nella tabella del piano dei conti (contabilità). L'ho risolto aggiungendo un campo nascosto "Ordine" nel quale il software va a impostare un numero progressivo partendo da 1. Il caricamento della griglia verrà effettuato con un recordset ottenuto da una query "SELECT ... FROM ... ORDER BY Ordine".
Dipende da come è ordinata la tabella e per quali campi...
Se c'è un campo contatore che è chiave primaria è già più difficile... La soluzione di tas è valida, ma inserisce molti problemi di gestione... Ad esempio il fatto che si deve riempire il campo che ordina la tabella successivamente all'inserimento del nuovo record (per trovare il valore da immettere nel campo)...
E se voglio ordinare un record per metterlo nella posizione 5 (ad esempio) devo incrementare tutti i record con ordine >= 5... Non è una cosa così agevole da gestire, più che altro per le prestazioni...
Una cosa più semplice sarebbe mettere lo scostamento dal contatore...
Ad esempio:
Contatore Scostamento Posizione
1 +2 1
2 0 0
3 -2 1
4 0 0
5 -4 2
Select * From Tabella Order By (Contatore+Scostamento), Posizione ASC;
Il risultato sarà:
3, 5, 1, 2, 4
Posizione è la posizione in cui mettere questo record fra quelli di pari cotatore+scostamento...al limite se ci fosse da dare un'altro ordinamento basta ordinare quelli che hanno questo valore uguale...
Ah se ti accontenti che a parità di contatore+scostamento non siano ordinate (ad esempio basterebbe un altro ordine relativo ad un altro campo del record) allora Posizione lo puoi anche togliere...
Cia ragazzi. Intanto grazie delle risposte. Comunque io volevo dire che non o problemi di ordinamento dei dati sulla griglia, perchè i dati sono nell'ordine di inserimento, qui l'ordinamento non mi interessa.
Quello che invece dovrei fare come avevo prospettato nel primo post, e di poter spostare un record in giù oppure in sù.
Magari se avete qualche consiglio più specifico ve ne sarei grata.
Non capisco se in giù o in su nella griglia o in giù o in sù all'interno del database...
Non capisco se in giù o in su nella griglia o in giù o in sù all'interno del database...
La cosa sarebbe meglio se si potesse spostare all'interno del database, però in alternativa se ciò non fosse possibile andrebbe bene anche dentro solo la griglia dati.
Accidentaccio! non credevo che fare questa cosa fosse come scalare l'everest...
Ciao
MA che chiave primaria ha il DB ?
Ciao. La chiave primaria del DB e un campo dichiarato come (Contatore)...
Spero che la cosa non crei problemi, ma soprattutto che ci sia una soluzione....
Carmen :confused: :muro:
Appunto...se la chiave primaria è un contatore devi mettere un campo aggiuntivo per codificare l'ordine (come ho riportato sopra)...
certo che con sti' database siete messi come il :pig:
ma possibile che non ci sia un comando:
QuestoRecordQuiDeviMetterloLaaaaa iRec1, iRec2
:o :o
:D
Il problema è che essondoci una chiave primaria autoincrementante non si possono spostare così facilmente...
I record non sono ordinati...la chiave primaria autoincrementante serve solo per distinuguere un record dall'altro...ma non per dargli un ordine... Basarsi su questo per dargli un ordine si può anche fare, ma non è la cosa migliore...
comunque un comando di spostamento FORZATO dei record ci deve/dovrebbe essere: che ca++o è il programmatore che comanda !
e poi non c'è di default (senza strutture-patch aggiuntive) una cazzabuffa di lista associata con cui fare ordina-sposta-inserisci-elimina senza necessità di spostare fisicamente un dato che sia uno !?
Ah cionci, se sti' dialetti di query li avessimo fatti noi due ..... !
OhBischeroTeTuMeLoSpostiCodestoRecordInCodelloPosto iRec, iPos
:D
comunque ragazzi, c'è della robina all' Iper ..... mmhhhhh :pig: :pig: :pig:
al banco dei cmeri stavo per confondermi ! :ek:
oh, pardon, chiedo schiusa alle signr ! :)
Si può fare...ma bisogna fare due query...
Ad esempio hai 1000 record...che hanno una chiave primaria autoincrementante...
ID
1
.
.
.
1000
Essendo chiave per definizione non ci possono essere più di un record con un determinato valore di ID...
Se volessi mettere il 990 al posto del 3 potrei anche spostare tutti i record, ma non mi sembra una cosa fatta molto bene...
Basterebbero 3 query:
UPDATE Tabella
SET ID = ID+1
WHERE ID >= 3;
UPDATE Tabella
SET ID = 3
WHERE ID >= 991;
Purtroppo la prima query non è possibile farla perchè in un certo istante (dopo ogni singola modifica) esisteranno due record con la stessa chiave...
Quindi bisogna ricorrere a 3 query:
Se posso memorizzarmi i dati del record 990 a livello di programma posso fare così:
Mi memorizzo i dati nel programma e rimuovo il record 990:
DELETE FROM Tabella
WHERE ID = 990;
UPDATE Tabella
SET ID = ID+1
WHERE ID >= 3 AND ID <990;
Ed ora reinserisco i valori in tabella al posto 3:
INSERT INTO Tabella VALUES (3,....);
Se non potessi memorizzarmi i dati a livello di programma dovrei fare una cosa del genere:
UPDATE Tabella
SET ID = ID+1000
WHERE ID >= 3;
UPDATE Tabella
SET ID = 3
WHERE ID = 1990;
UPDATE Tabella
SET ID = ID-999
WHERE ID >= 1003;
Il problema è che una query che cambia degli indici è molto costosa per il DBMS...visto che deve ricreare le strutture per indici stessi...
In pratica si cerca sempre di minimizzare gli UPDATE che modificano gli indici della tabella...
oh maremma bona, :eek:
ma è più facile swappare un co[/siz] !
:D
UPDATE Tabella
SET ID = ID+1
WHERE ID >= 3;
Che testa...questo non lo posso fare sempre per il solito discorso della chiava primaria... Vabbè...comunque ci siamo capiti...
Comuqnue per swappare è facile...ripeto che qui si parla di dover inserire un record non al posto di un altro, ma sopra un altro...
comunque datevi da fare: c'è del marcio in danibase !
Originally posted by "a2000"
comunque datevi da fare: c'è del marcio in danibase !
Più che altro è che i campi interi autoincrementanti nella teoria non si usano mai come chiave (creano ridondanza)...a quel punto mettere un'ordine crea meno promblemi...e si fa come dice tas...e con solo 2 query...
contenti voi .... mi dispiace solo per i vogatori/trici ai remi .... ehm ... ai record ! :sofico:
Vedo che vi siete sbizzariti :D nel proporre diversi consigli in merito. Visto che però non esiste un metodo ben specifico per far tutto ciò, oppure almeno noi poveri immortali ignoriamo la cosa che sembra un tantino complicata, perchè magari ogni soluzione che voi avete esposto, da dei pro e contro. Come si dice l'udienza ancora risulta aperta :cool: chiunque voglia testimoniare in nostro favore lo faccio senza indulgi. Questò servirà ad migliorare questo mondo infame.... :eek: :sofico: :D
Comunque grazie a tutti dei suggerimenti :)
Carissima Carmen,
tu hai perfettamente ragione: il problema non sei tu, ma è di questo mondaccio infame che si materializza nel tuo caso sotto forma di database. :(
Perchè non vieni a trovarmi a Rimini che ne parliamo sotto l'ombrellone al Bagno 151 da Gustavo !!!! :cool:
Vedrai che facciamo una robina leggera-leggera e frizzantina come un mojito, tutta in Excel, che ti girerà e rivolterà il tuo database come un mazzo di carte con solo due istruzioncine ... :)
E mentre lui lavora noi ce ne stiamo beati nella jacuzzi, col mojito, sulla collinetta erbosa con vista mare (da Gabicce a Cesenatico). :cool:
attendo PVT. :)
Perchè non vieni a trovarmi a Rimini che ne parliamo sotto l'ombrellone al Bagno 151
Situazione sicuramente allettante: Credo però poco fattibile al momento. Comunque se ti trovi a rimini sotto l'ombrello, questo potrebbe essere uno dei motivi perche sei tanto distratto....
CiaoOOOOOo ;)
distratto ??? :confused:
non sarai mica un maschione !!??? :eek: :eek:
RITIRO tutto e anche di più ! http://forum.hwupgrade.it/faccine/34.gif
Sono sicura di darti una grossa delisione, visto che non sono un maschione ma semplicemente una femminuccia. Però direi che siamo usciti fuori dai temi sia del forum che dell'argomento trattato....
Ciao Ciao da carmen :)
ma no che gira tutto intorno a quello/quella ! :D
non-ti-disturbo-più stop rimango-attesa-PVT stop :)
Originally posted by "a2000"
certo che con sti' database siete messi come il :pig:
ma possibile che non ci sia un comando:
QuestoRecordQuiDeviMetterloLaaaaa iRec1, iRec2
:o :o
:D
Originally posted by "a2000"
comunque un comando di spostamento FORZATO dei record ci deve/dovrebbe essere: che ca++o è il programmatore che comanda !
e poi non c'è di default (senza strutture-patch aggiuntive) una cazzabuffa di lista associata con cui fare ordina-sposta-inserisci-elimina senza necessità di spostare fisicamente un dato che sia uno !?
Ah cionci, se sti' dialetti di query li avessimo fatti noi due ..... !
OhBischeroTeTuMeLoSpostiCodestoRecordInCodelloPosto iRec, iPos
:D
OMAMMA CHE RISATEEEEEE!!!!!!! TROPPO BELLA QUELLA SINTASSI!!!! PERCHé NON CREANO QUALCHE LINGUAGGIO DI PROGRAMMAZIONE COSì? :D TROPPO LOL! :D:D:D
Scusate l'ot ma ci voleva proprio! :D :D :D :D :D
Ciao,
GHz!
P.S: si vede che troppo lavoro fa male! :p
mi fa piacere che ti diverta ... :D
ma l'accoppiata access + VB per fare una brutta copia di excel .... :(
disumano
19-06-2003, 02:46
io credo che la soluzione migliore sia quella del sort che proponeva tas, anche perché non credo sia importante spostare i record fisicamente.
in definitiva è come se impostassi tanti puntatori, che non essendo chiave primaria possono essere duplicati (anche se solo per il tempo di arrivare all'operazione successiva) svolgendo le query descritte da cionci.
imho access non prevede la possibilità di spostare un record proprio perché l'ordinamento in base ad un campo è ritenuto sufficiente da qualunque fruitore dei dati.
Originally posted by "disumano"
imho access non prevede la possibilità di spostare un record proprio perché l'ordinamento in base ad un campo è ritenuto sufficiente da qualunque fruitore dei dati.
Anche perchè non è quasi mai importante un ordine diverso da quello ottenibile dai campi importanti tramite un order by...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.