Newsgroup: it.comp.appl.access
Titolo: ordinamento recordo secondo un campo nascosto

ho un campo di nome "ordine" di tipo intero con il quale vorrei ordinare dei 
record
vorrei avere 2 pulsanti con freccia su e giu
 
se clicco pulsante su se � il primo record non accade nulla
altrimenti scambio i valori di ordine con il record precedente
 
se clicco pulsante giu se � l'ultimo record non accade nulla
altrimenti scambio i valori di ordine con il record successivo
 
e poi eseguo un requery
 
il problema � come scambio i valori di ordine con il precedente e il 
successivo?
 
grazie. 
 


Memorizzi i valori e gli ID, quindi esegui 2 Query Action:
UPDATE NomeTabella SET NomeCampo=NuovoValore WHERE Id=CampoId
 
Saluti
@Alex

ho risolto in questo modo si accettano consigli per ottimizzazione
 
ho inserito 2 pulsante con freccia su e giu su clic controllo che non siano 
gi� il primo o l'ultimo record in caso contrario li scambio con il 
precedente o successivo in base ad un campo nascosto ordine ti tipo intero
 
queste le subroutine (che ne pensate?)
 
**** CODE ****
 
Private Sub SpostaSU(Ordine As Integer)
    Dim db As Database
    Dim Rs As Recordset
    Dim i As Integer
 
    Set db = CurrentDb
    Set Rs = db.OpenRecordset("select * from corsigiorni order by ordine")
    If Rs.RecordCount > 0 Then
        'vado al primo record
        Rs.MoveFirst
        For i = 1 To Rs.RecordCount
            'se il record � quello che voglio spostare eseguo lo scambio con 
il record precedente
            If Rs!Ordine = Ordine Then
                'vado al precedente e memorizzo il valore di ordine
                Dim valprec As Integer
                Rs.MovePrevious
                valprec = Rs!Ordine
                'assegno al precedente il valore di ordine
                Rs.Edit
                Rs!Ordine = Ordine
                Rs.Update
                'ritorno al record che voglio spostare su
                Rs.MoveNext
                Rs.Edit
                Rs!Ordine = valprec
                Rs.Update
                i = Rs.RecordCount
            Else
                Rs.MoveNext
            End If
 
        Next i
    End If
    Rs.Close
    Set db = Nothing
    Me.Requery
End Sub
 
 
Private Sub SpostaGIU(Ordine As Integer)
    Dim db As Database
    Dim Rs As Recordset
    Dim i As Integer
 
    Set db = CurrentDb
    Set Rs = db.OpenRecordset("select * from corsigiorni order by ordine")
    If Rs.RecordCount > 0 Then
        'vado al primo record
        Rs.MoveFirst
        For i = 1 To Rs.RecordCount
            'se il record � quello che voglio spostare eseguo lo scambio con 
il record precedente
            If Rs!Ordine = Ordine Then
                'vado al successivo e memorizzo il valore di ordine
                Dim valSucc As Integer
                Rs.MoveNext
                valSucc = Rs!Ordine
                'assegno al successivo il valore di ordine
                Rs.Edit
                Rs!Ordine = Ordine
                Rs.Update
                'ritorno al record che voglio spostare giu
                Rs.MovePrevious
                Rs.Edit
                Rs!Ordine = valSucc
                Rs.Update
                i = Rs.RecordCount
            Else
                Rs.MoveNext
            End If
        Next i
    End If
    Rs.Close
    Set db = Nothing
    Me.Requery
End Sub
 

 ...
 
Non ho capito come eviti gli errori all'inizio e fine, ma in ogni caso
manca un minimo di gestione di errore, il ciclo non � necessario ecc.
Se vedo bene, puoi provarlo circa cos�:
 
Private Sub SpostaSU(Ordine As Integer)
 
    On Error GoTo myError
 
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim lngValPrec As Long
    Dim strSQL As String
 
    strSQL = "SELECT Ordine FROM corsigiorni ORDER BY Ordine"
    Set db = CurrentDb
    Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
 
    ' se ci sono record
    If Not rs.BOF Then
 
        'cercare il record giusto
        rs.FindFirst "Ordine = " & Ordine
        'se il record viene trovato
        If Not rs.NoMatch Then
            'vado al precedente e memorizzo il valore di ordine
            rs.MovePrevious
            lngValPrec = rs!Ordine
            'assegno al precedente il valore di ordine
            rs.Edit
                rs!Ordine = Ordine
            rs.Update
            'ritorno al record che voglio spostare su
            rs.MoveNext
            rs.Edit
                rs!Ordine = lngValPrec
            rs.Update
        End If
 
        Me.Requery
 
    End If
 
myExit:
    If Not rs Is Nothing Then rs.Close: Set rs = Nothing
    Set db = Nothing
    Exit Sub
 
myError:
    MsgBox "Eccezione " & Err.Number & ": " & Err.Description
    Resume myExit
 
End Sub
 
-- 
Ciao
Karl
*********
Access FAQ: 
www.donkarl.com/it
 
 
 

Access FAQ: 
www.donkarl.com/it
 
 
 
 
La gestione errore in effetti non la gestisco qui ma su click dei pulsanti 
dove controllo che ordine non sia gi� il minimo se sposto su e il massimo se 
sposto giu in caso contrario avviso con msgbox
cercher� di capire e provare il tuo codice
Grazie.