Newsgroup: it.comp.appl.access
Titolo: inserire una riga vuota sopra o sotto un record

ho una tabella fatture e una tabella fatturevoci che contiene le righe della fattura in relazione uno a molti con la tabella fatture
 
per inserire una riga sopra una riga già esistente uso questo codice che non so se sia la soluzione migliore, voi cosa ne pensate? c'è un modo più semplice e immediato?
 
DoCmd.SetWarnings False 
'disattivo gli avvisi
 
DoCmd.OpenQuery "VociToTemp", acViewNormal, acEdit 
'accodo le voci nella tabella vocitemp
 
DoCmd.RunSQL ("DELETE FROM fatturevoci where idfattura=" & Forms![fattura]![ID] & " and id>=" & Forms![fattura]![Voci]![ID]) 
'cancello da quella riga in poi i record da fatturevoci
 
DoCmd.RunSQL ("INSERT INTO fatturevoci (idfattura) VALUES (" & Forms![fattura]![ID] & ")") 
'inserisco la riga nuova in fatturevoci
 
Dim temp As Variant
temp = DMax("id", "fatturevoci", "idfattura=" & Forms![fattura]![ID])
prelevo l'id del record appena inserito per poi posizionarmi a quel record
 
DoCmd.OpenQuery "TempToVoci", acViewNormal, acEdit
'accordo le voci dalla tabella temp alla tabella fatturevoci
 
Me.Voci.Form.Requery
aggiorno la sottomaschera voci della maschera fattura
 
DoCmd.RunSQL ("DELETE FROM temp") 
'svuoto la tabella vocitemp
 
Me.Voci.SetFocus 
'do il focus alla sottomaschera voci
 
Me.Voci.Form.Recordset.FindFirst "id = " & temp 
'mi posiziono sul record aggiunto
 
Me.Voci.Form.Controls("descrizione").SetFocus
'do il focus al campo descrizione della voce inserita

 
 
 
personalmente ho un campo "numriga" in ogni riga fattura
valorizzato con 10,20,30...100,110 etc automaticamente.
maschera e stampa sono ordinati in base a quel valore
 
quindi per aggiungere una riga tra due, mi basta cambiare il valore di 
numriga, dandogli un valore compreso tra la precedente e la successiva
e tutto si riordina.
 
 
BFS
 


Pure io uso il campo specifico
E di 10 in 10 come te, guarda che caso
 

 
 
tutti ex programmatori basic? :)
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-

 
 
 
mi sa di si
 
ci sarà un giorno dove anche le righe delle maschere di access saranno 
spostabili/draggabili con un semplice trascinamento...ma non è questo il 
giorno
 
BFS
 
 


come fate a sapere il numero della riga precedente?
esempio la 
riga 1 vale 10 
riga 2 vale 20
 
avevo inserito in precedenza una riga sotto la riga 1 quindi avevo dato il valore 11 (immagino) la situazione è diventata 
riga 1 vale 10 
riga 2 vale 11
riga 3 vale 20
 
 
se ora voglio aggiungere un altra riga sotto la riga 1 che valore gli do? con la virgola?
inoltre come ottengo il valore della riga precedente o successiva in base all'esigenza di inserire la riga sopra o sotto?
 
 
 
 
 
 
 
 
 


sarebbe meglio dare 15 al posto di 11
ad ogni modo era il concetto da seguire
puoi  anche fare salti di 100 in cento
e prevedere un ricalcolo del progressivo righe dopo ogni inserimento
 
esempio
far diventare il tuo 10/11/20/30  in 10/20/30/40 dopo l'aggiunta
puoi anche evitare di far inserire il numero all'utente per rendere la 
cosa trasparente...tipo mettere un pulsante "aggiungi riga qui" e da 
codice calcolarti il numero riga da assegnare per farla cadere nel punto 
scelto
 
BFS
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
un vero programmatore basic non fa questi errori :)
la riga in mezzo la inserisce con il 15, se ne serve un'altra si prende 
il 13 o il 17, insomma ci si garantisce la possibilità di infilarne 
almeno un paio ancora dopo il primo
 
poi (in alcuni basic) arriva il RENUM, in altri si fa a mano


 
 
Il RENUM de che?
Mi sembrava stessimo parlando del contenuto di un campo sul db
 
Detto questo sarei curioso di sapere se voi usate numerare le righe di 
codice, in manuale o in automatico
Personalmente si, sono solito farlo usando l'automatismo previsto su 
MzTools, lo scopo e' vedere esattamente dove accadono eventuali errori 
ed avere informazioni precise quando vengono registrati log vari