Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [VB6] Eseguire cancellazione dell'ultimo elemento del recordset.

    Salve a tutti, detta così sembrerebbe una cosa molto più semplice di quella che passo a spiegarvi.
    Vi spiego facendo presente lo scenario da cui parto e a cui vorrei arrivare.

    Ho un array (che, per comodità, chiamerò PIPPO), che contiene i seguenti elementi:

    Descrizione (0) = "Pippo"
    Descrizione (1) = "Pluto"
    Descrizione (2) = "Paperino"

    e ho un recordset che, nel corso del suo ciclo, estrae le seguenti informazioni:

    Elemento 0 = "Pippo"
    Elemento 1 = "Pluto"
    Elemento 2 = "Paperino"
    Elemento 3 = "Minnie"

    Ora, supponendo che io, per ogni elemento del recordset, leggo l'array (avanzando questo in modo da essere sempre allineato da una parte e dall'altra...es: Descrizione (0) <--> Elemento 0; Descrizione (1) <--> Elemento 1 ... ecc), accade che nel momento in cui leggo il quarto elemento del recordset (Elemento 3) e vado per leggere lo stesso sull'Array, visto che questo non c'è, la variabile booleana (vMancante) rimane a False e il processo di cancellazione non viene eseguito.
    Il codice di cui parlo invece si comporta regolarmente se devo procedere all'eliminazione di una riga che si trova a livello intermedio.

    Di seguito il codice interessanto:

    codice:
    1 step --> caricamento array
    
    2 step --> query in tabella
    
    contaPos = 0
    If Not RS.EOF Then
       Do While Not RS.EOF
           vMancante = False
           For iLocNol = contaPos To UBound(ArrayLocRigaReso)
                If Trim(ArrayLocRigaReso(iLocNol).Descrizione) <> Trim(Replace(RS(1), "'", "''")) Then
                    vMancante = True
                    Exit For
                Else
                    Exit For
                End If
           Next
           If vMancante Then 
              --- CANCELLA L'INFORMAZIONE--
           End If
           contaPos = contapos + 1
           RS.MoveNext
       Loop
    End IF
    Come posso ovviare?
    Ci ho sbattuto tutto il pomeriggio senza cavarne un ragno dal buco.
    Provare paura per un qualcosa che ti possa capitare nel futuro non ti evita quell'evento,ti fa soltanto vivere un presente sbagliato!

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Il problema è che sbagli ad fare riferimento l'array
    UBound(ArrayLocRigaReso)
    perchè non è detto che elenchi lo stesso numero di informazioni rispetto al record.
    Infatti è proprio quello che accade nel tuo codice.

    Per cui questa istruzione non va bene:
    For iLocNol = contaPos To UBound(ArrayLocRigaReso)

    dovrebbe essere, ipoteticamente:
    For iLocNol = contaPos To iNumeroElementiDaConfrontare

    Non so dirti come risolvere perchè la tua implementazione non è molto chiara, e non si sa come ottieni gli elementi.
    Sarà un mio limite...

    l'unica cosa che posso dire è che devi tener conto degli elementi che crei così da fare un confronto alla pari ovvero Elemento 3 <--> Descrizione(3).


  3. #3
    Il codice che ho postato sopra ragione nella seguente maniera:

    1)Carico, tramite query, i miei dati su una flexgrid.
    Ammettiamo che ho 3 record e quindi sulla flexgrid me ne compariranno 3.

    2)Una volta che la form (con la flexgrid) mi si presenta valorizzata, faccio tasto canc sull'ultima riga della flexgrid, facendo sparire il terzo elemento.

    3)Quando poi vado a confermare le operazioni di modifica, il codice di sopra, dovrebbe fare in modo che sia possibile cancellare l'ultima informazione, cosa che al momento non avviene, perchè quando riempio l'array, dopo avere eseguito il punto 2), gli ementi sono 2, mentre la query al punto 1), tira fuori quelli presenti sul DB che invece sono 3.

    Se invece eseguo il punto 2) su una riga intermedia, il codice di sopra funzione correttamente.

    Spero di essere stato più preciso circa l'implementazione.
    Provare paura per un qualcosa che ti possa capitare nel futuro non ti evita quell'evento,ti fa soltanto vivere un presente sbagliato!

  4. #4
    Per essere ulteriormente più chiaro vi scrivo le due casistiche che devo gestire.

    codice:
    -- CASO 1
        Righe presenti sul db:                Righe del dettaglio mappa:
          Quantità 1                            Quantità 1
          Quantità 2                               
          Quantità 3                            Quantità 3
    
    -- CASO 2
        Righe presenti sul db:                Righe del dettaglio mappa:
          Quantità 1                            Quantità 1
          Quantità 2                            Quantità 2   
          Quantità 3
    Nel CASO 1 devo cancellare Quantità 2 (e questo funziona con il codice di sopra); nel secondo caso invece no.
    Devo essere nelle condizioni di gestire entrambe le casistiche.
    Provare paura per un qualcosa che ti possa capitare nel futuro non ti evita quell'evento,ti fa soltanto vivere un presente sbagliato!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.