Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    138

    [vb6] eliminare più di una stringa in un msflexgrid

    buongiorno a tutti

    mi interessava sapere se per caso si possono selezionare più di una stringa alla volta nell' msflexgrid. mi spiego... ora riesco ad eliminare una stringa da un mdb tramite un command.
    se volessi far si che l'applicazione ne cancellasse più di una alla volta che devo fare?
    così ne elimino una sola dopo averla selezionata cliccando sulla stringa, nel flexgrid.

    rs.open "delete *from listino where tariffa = '" & msflexgrid.Text & "'", db, adOpenStatic

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Devi individuare le righe da eliminare (non stringhe) in base ad un qualche riferimento che le distingua dalle altre, quindi la proprietà Text non va bene, perchè si riferisce sempre alla cella corrente.

    Di solito si usa la chiave primaria del record che permette di identificare univocamente un record, ma bisogna vedere se tu l'hai caricata nella griglia.
    Poi per eliminare le righe vi sono diversi modi, ma non sapendo altro non è possibile dirti quale usare.
    Puoi fare un ciclo sulle righe della msflexgrid, ed eliminare quelle selezionate, oppure usare il metodo Execute della connessione per eliminare le righe in blocco, esempio il codice seguente cancella 3 record che hanno come IDRecord: 1, 5 ,8 :

    db.Execute "DELETE * FROM tabella WHERE idRecord IN (1,5,8)"

    Questo è il metodo migliore, e più veloce.


  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    138
    ciao gibra.. e grazie per l'aiuto
    premetto che la mia tabella ha una chiave primaria, che in questo caso è la tariffa. ho utilizzato il metodo da te consigliato e l ho adattato.
    questo è il risultato.


    db.Execute "DELETE * FROM listino WHERE tariffa IN (select tariffa from listino where tariffa= '" & flexgrid & "')"

    funziona (ed era scontato) ma mi elimina solamente un record alla volta, anche se ne seleziono 2 di seguito. come devo fare per far capire al flexgrid che mi deve selezionare due stringhe consecutive per esempio??
    grazie!!

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Mi pare ovvio che ti elimina solo UNA riga, dato che all'operatore IN passi UN solo valore, lui prende quello, mica è un indovino, non ti sembra?

    La SELECT annidata non ha alcun senso, se non quello di peggiorare le performance

    In sostanza,
    prima devi disporre di tutti i valori relativi alle righe da eliminare, per cui devi esaminare le righe selezionate e ti crei l'elenco delle tariffe da eliminare (separato da virgole), infine passi questo elenco all'operatore IN.

    Ora, il "come" estrapolare i valori da eliminare può essere fatto in diversi modi, non sapendo niente del tuo progetto non so quale sia più giusto nel tuo caso, ad esempio:
    1. quando selezioni la riga aggiungi il valore
    2. fai un ciclo sulle righe della griglia e prendi solo quelli delle righe selezionate
    tenendo presente che l'operatore IN vuole l'insieme dei valori racchiuso tra parentesi e separati ognuno dalla virgola.

    Non uso la MSFlexGrid, quindi non so dirti la proprietà esatta che restituisce se la riga è selezionata oppure no (verifica magari sulla guida) ma di solito è Selected, o qualcosa del genere, oppure usare TextMatrix() quindi puoi fare una cosa più o meno così:

    codice:
    Dim sValori As String
    Dim i As Long
    For i = 1 to flexgrid.Rows 'per ogni riga
        If <riga_corrente_selezionata> Then
            ' N.B. se il valore è di tipo stringa, dovrà essere ovviamente racchiuso tra apici!!!
            sValori = sValori & tariffa_da_eliminare & "," 
        End If
    Next i
    ' alla fine elimino l'ultima virgola che è in più
    sValori = Left$(sValori, Len(sValori) - 1)
    
    ' Aggiungo le parentesi:
    sValori = "(" & sValori & ")"
    
    'Alla fine sValori dovrà risultare una stringa tipo: "(1,3,5)" da passare al comando SQL:
    db.Execute "DELETE * FROM listino WHERE tariffa IN " & sValori

    Eventualmente guardati come usare l'operatore IN:
    Guide per SQL e ADO
    http://nuke.vbcorner.net/Articoli/VB...4/Default.aspx


    E, se ti va, anche i miei articoli/progetti di esempio:

    ProvaLogin
    http://nuke.vbcorner.net/Progetti/VB...3/Default.aspx

    ADO, Parametri ed affini
    http://nuke.vbcorner.net/Articoli/VB...5/Default.aspx

    ADO DataProject 2
    http://nuke.vbcorner.net/Progetti/VB...8/Default.aspx

    Progetti vari: DataGrid_FilterSearch
    http://nuke.vbcorner.net/Progetti/VB...9/Default.aspx


  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    138
    mi è tutto chiaro apparte una cosa


    If <riga_corrente_selezionata> Then


    cosa intendi per <riga_corrente_selezionata> ????
    grazie !!!

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Mi sembrava chiaro...

    Se una riga è selezionata oppure no.

    Che altro potrebbe essere?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    138
    si ma in codice vb come va impostata?

    msflexgrid.rowsel?

    perchè ho provato in questa maniera ma va bene!

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da antonyh.c
    si ma in codice vb come va impostata?

    msflexgrid.rowsel?

    perchè ho provato in questa maniera ma va bene!
    Non saprei, non uso la MSFlexGrid.
    Guarda sulla guida, tra le proprietà del controllo.


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.