|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 367
|
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 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
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".
__________________
Chi non cerca trova. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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: Codice:
Contatore Scostamento Posizione 1 +2 1 2 0 0 3 -2 1 4 0 0 5 -4 2 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... |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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...
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 367
|
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. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non capisco se in giù o in su nella griglia o in giù o in sù all'interno del database...
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 367
|
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 |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
MA che chiave primaria ha il DB ?
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jul 2001
Messaggi: 367
|
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 |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Appunto...se la chiave primaria è un contatore devi mettere un campo aggiuntivo per codificare l'ordine (come ho riportato sopra)...
|
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
certo che con sti' database siete messi come il
ma possibile che non ci sia un comando: Codice:
QuestoRecordQuiDeviMetterloLaaaaa iRec1, iRec2 |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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... |
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
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 ..... ! Codice:
OhBischeroTeTuMeLoSpostiCodestoRecordInCodelloPosto iRec, iPos |
|
|
|
|
|
#14 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
comunque ragazzi, c'è della robina all' Iper ..... mmhhhhh
al banco dei cmeri stavo per confondermi ! :ek: |
|
|
|
|
|
#15 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
oh, pardon, chiedo schiusa alle signr !
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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... |
|
|
|
|
|
#17 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
oh maremma bona,
ma è più facile swappare un co[/siz] ! |
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Comuqnue per swappare è facile...ripeto che qui si parla di dover inserire un record non al posto di un altro, ma sopra un altro... |
|
|
|
|
|
|
#19 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
comunque datevi da fare: c'è del marcio in danibase !
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:02.



















