Realizzare un cerca "Dinamico" in database access

di il
24 risposte

24 Risposte - Pagina 2

  • Re: Realizzare un cerca "Dinamico" in database access

    28/01/2025 - orione1976 ha scritto:

    28/01/2025 - By65Franco ha scritto:

    28/01/2025 - orione1976 ha scritto:

    praticamente se dalla combobox seleziono dominio e nella textbox scrivo un testo lui vada a cercare solo in dominio oppure seleziono gateway e cerca solo in gateway

    Ma delle due una o entrambe le ricerche combinandole ?

    una alla volta ovviamente

    vorrei che cambiando in la combobox in settore, se corrisponde al testo della textbox mi filtra il settore

    se invece cambio la combobox in gateway, se corrisponde al testo della textbox mi filtra il gateway

    e cosi dicendo per il resto

    • Ok, allora dobbiamo affermare che la combobox contiene "esattamente" i nomi delle fields della tabella
      sarà una combobox a 2 colonne dove la prima contiene il nome esatto delle fields e la seconda una descrizione più intuitiva per l'utente
    • Poi devi stabilire se con la textbox devi produrre una ricerca "esatta" oppure "che contiene" ... la prima la soddisfi con l'operatore = e la seconda con l'operatore Like
    • Il Valore della textbox andrebbe sempre passata come parametro alla stringa Sql


      ESEMPIO:

    	' retrieve combobox value
        Dim fieldName As String = CBtrova.SelectedValue.ToString()
        ' set sql string
        Dim Trova As String = $"SELECT * FROM Rupa WHERE {fieldName} = @valore"
    
        ' set sql command
        Dim Cmd As New OleDb.OleDbCommand(Trova, myConnection)
    	' set parameters
        Cmd.Parameters.AddWithValue("@valore", TBtrova.Text)
        
        ....
        ...
        .

    Una cosa di questo genere per eseguire la ricerca di tipo "Esatta"

    Mentre se vuoi una ricerca di tipo "che contiene" con l'operatore LIKE

    	' retrieve combobox value
        Dim fieldName As String = CBtrova.SelectedValue.ToString()
        ' set sql string
        Dim Trova As String = $"SELECT * FROM Rupa WHERE {fieldName} LIKE @valore"
    
        ' set sql command
        Dim Cmd As New OleDb.OleDbCommand(Trova, myConnection)
    	' set parameters
        Cmd.Parameters.AddWithValue("@valore", "%" & TBtrova.Text & "%")
        
        ....
        ...
        .

    Più o meno una cosa di questo tipo

    Prova a provare ;-))

    [Edit..]

    Mi dimenticavo di spiegarti l'importanza di utilizzare i parametri nella costruzione della stringa sql

    Alcuni dei motivi sono:

    • prevenire SQL Injection e non lasci spazio di vulnerabilità
    • gestisce automaticamente la conversione dei valori da passare, per esempio le fields di tipo datetime, nvarchar, etc... non devi preoccuparti di convertirle preventivamente
    • caratteri speciali: non devi preoccuparti di dover gestire gli apicini, escape, doppi apici, etc... lo farà in automatico
    • in molti casi si migliorano le prestazioni della Sql

      ----

    Con questo penso che adesso hai qualche spunto e argomenti da studiare e approfondire.

  • Re: Realizzare un cerca "Dinamico" in database access

    Devi formattare il valore da trovare

    Se combo è su gateway e edit vale 192.168.1.1

    Appena cambi la combo su porta hai un errore perché la porra non può essere del tipo xxx.xxx.xxx.xxx

    Io andrei con la prima soluzione prospettata

    Metti un edit sopra ogni campo e al keypress vai in ricerca

    Select.... Where gateway=editgateway and editgateway<>''

    And idem per ogni campo

    In questo modo puoi filtrare su più campi rendendo più utile la ricerca.

    Gli edit li imposti con la relativa maschera di input e risolvi. Gateway sarà xxx.xxx.xxx.xxx porea sarà yyyy ecc...

    Esempio edit

    Gateway.                 Porta.              Subnet.........

    Esempio tabella

    gatewayPortaSub net 
        
  • Re: Realizzare un cerca "Dinamico" in database access

    28/01/2025 - sihsandrea ha scritto:

    Gateway.                 Porta.              Subnet.........

    Esempio tabella

    gatewayPortaSub net 
        

    Direi proprio di si, infatti esistono diversi metodi e più efficaci .... 

    personalmente farei una cosa di questo tipo:

    1. popolare senza filtri la datagridview
    2. per le colonne dove eseguire le ricerche, come le tre sopra riportate, imposterei le tre combobox che conterranno il riepilogo dei gateway, delle porte e delle SubNet presenti nella datagridview
    3. per le combobox dove esiste una selezione <> da null si costruisce e si applica il filtro alla datagridview

    --- 

    End, non vi è altro da fare ... pochissime righe di codice, semplice, immediato e non porta l'utente a scrivere un bel nulla, ma bensì potrà velocemente cliccare nelle combobox gli elementi che si vogliono vedere nella datagridview 

  • Re: Realizzare un cerca "Dinamico" in database access

    27/01/2025 - By65Franco ha scritto:

    comunque .... devi saper utilizzare la where condition e quindi conoscere meglio Sql.

    Per studiarti velocemente questo argomento e se conosci e hai a disposizione MsAccess oppure meglio ancora Sql SSMS, prendi la tua tabella e vai in designer per creare una query con le varie condizioni di ricerca che vuoi eseguire.
    Quando il risultato ottenuto è quello desiderato, prendi la stringa Sql che viene generata e la riporti con la sintassi corretta, nel tuo codice.

    Questo è un modo semplice e veloce per creare e verifica una stringa Sql.
    Cerca nel Supporto Tecnico sul web quali operatori puoi utilizzare nella where e vedrai che in meno che non si dica risolvi tutte le tue selezioni e ricerche.

    Questo è abbastanza contraddittorio. Sarebbe come dire: "devi imparare l'inglese, quindi usa Google Translator". Molto meglio un approccio di studio sistematico su un buon testo; ce ne sono a bizzeffe sia cartacei che on-line.

  • Re: Realizzare un cerca "Dinamico" in database access

    27/01/2025 - orione1976 ha scritto:

     myConnection.Open()
     Dim Readdatabase As OleDbDataReader
     Dim Trova As String
     Trova = "SELECT * From Rupa WHERE settore = '" & CBtrova.Text & "'"
     Dim Cmd As New OleDb.OleDbCommand(Trova, myConnection)
     Cmd.ExecuteNonQuery()
     Readdatabase = Cmd.ExecuteReader
     DGVrupa.Rows.Clear()
     While Readdatabase.Read
         DGVrupa.Rows.Add(Readdatabase("nome"), Readdatabase("dominio"), Readdatabase("ip1"), Readdatabase("ip2"), Readdatabase("gateway"), Readdatabase("note"), Readdatabase("armadio"), Readdatabase("ipswitch"), Readdatabase("nswitch"), Readdatabase("porta"), Readdatabase("presa"), Readdatabase("virus"), Readdatabase("note2"), Readdatabase("utente"), Readdatabase("applicativo"), Readdatabase("telefono"), Readdatabase("settore"), Readdatabase("piano"), Readdatabase("stanza"), Readdatabase("user"), Readdatabase("datareg"), Readdatabase("datamod"))
     End While
     myConnection.Close()Le due righe evidenziate fanno a pugni tra loro.

    Le due righe 

    Cmd.ExecuteNonQuery()
    Readdatabase = Cmd.ExecuteReader

    fanno a pugni tra di loro.

    Il DataReader deve  essere chiuso al termine del ciclo di lettura.

    Ci sono modi molto più pratici per popolare una DataGridView; ne è stato fatto cenno in qualche post precedente.

  • Re: Realizzare un cerca "Dinamico" in database access

    29/01/2025 - grumpy ha scritto:

    Questo è abbastanza contraddittorio. Sarebbe come dire: "devi imparare l'inglese, quindi usa Google Translator". Molto meglio un approccio di studio sistematico su un buon testo; ce ne sono a bizzeffe sia cartacei che on-line.

    Fuori luogo. E' stato descritto il fine e gli strumenti per testare/verificare la bontà di una stringa Sql, Il metodo aiuta allo studio e approfondimento con strumenti standard di sviluppo come SSMS.

  • Re: Realizzare un cerca "Dinamico" in database access

    29/01/2025 - By65Franco ha scritto:

    29/01/2025 - grumpy ha scritto:

    Questo è abbastanza contraddittorio. Sarebbe come dire: "devi imparare l'inglese, quindi usa Google Translator". Molto meglio un approccio di studio sistematico su un buon testo; ce ne sono a bizzeffe sia cartacei che on-line.

    Fuori luogo. E' stato descritto il fine e gli strumenti per testare/verificare la bontà di una stringa Sql, Il metodo aiuta allo studio e approfondimento con strumenti standard di sviluppo come SSMS.

    Questione di opinioni.

  • Re: Realizzare un cerca "Dinamico" in database access

    29/01/2025 - grumpy ha scritto:

    Ifanno a pugni tra di loro.

    l DataReader deve  essere chiuso al termine del ciclo di lettura.

    Ci sono modi molto più pratici per popolare una DataGridView; ne è stato fatto cenno in qualche post precedente.

    Fuori luogo, ripetizione inutile, si torna indietro nella discussione in corso e si crea confusione. Argomento già trattato, corretto e discusso con esempi ben descritti e documentati, corredato da esempi e documentazione di come e perchè passare i parametri con command parameters.

    La partecipazione ad una discussione comporta leggere attentamente gli interventi che si sono succeduti nel thread, deve essere costruttiva e portare verso ad una soluzione e/o soluzioni per fare passi avanti e risolvere il quesito posto dall'utente.
    Sono due interventi su due di questo utente del tutto fuori luogo, per i quali si richiede ai moderatori di intervenire per eliminare denigrazioni inutili nei confronti dei partecipanti alla discussione. Grazie. 
    Sappiamo che alla fine questi comportamenti portano alla chiusura del thread a danno per l'utente che ha richiesto aiuto ponendo un quesito, il quale è ormai in fase di risoluzione.

    --- EDIT ...
    Si aggiunge ai precedenti un terzo commento fuori luogo da parte di questo utente... Si chiede cortesemente un intervento da parte dei Moderatori. GRAZIE mille

  • Re: Realizzare un cerca "Dinamico" in database access

    29/01/2025 - By65Franco ha scritto:

    29/01/2025 - grumpy ha scritto:

    Ifanno a pugni tra di loro.

    l DataReader deve  essere chiuso al termine del ciclo di lettura.

    Ci sono modi molto più pratici per popolare una DataGridView; ne è stato fatto cenno in qualche post precedente.

    Fuori luogo, ripetizione inutile, si torna indietro nella discussione in corso e si crea confusione. Argomento già trattato, corretto e discusso con esempi ben descritti e documentati, corredato da esempi e documentazione di come e perchè passare i parametri con command parameters.

    La partecipazione ad una discussione comporta leggere attentamente gli interventi che si sono succeduti nel thread, deve essere costruttiva e portare verso ad una soluzione e/o soluzioni per fare passi avanti e risolvere il quesito posto dall'utente.
    Sono due interventi su due di questo utente del tutto fuori luogo, per i quali si richiede ai moderatori di intervenire per eliminare denigrazioni inutili nei confronti dei partecipanti alla discussione. Grazie. 
    Sappiamo che alla fine questi comportamenti portano alla chiusura del thread a danno per l'utente che ha richiesto aiuto ponendo un quesito, il quale è ormai in fase di risoluzione.

    --- EDIT ...
    Si aggiunge ai precedenti un terzo commento fuori luogo da parte di questo utente... Si chiede cortesemente un intervento da parte dei Moderatori. GRAZIE mille

    29/01/2025 - grumpy ha scritto:

    Stamani ti sei alzato con il piede sbagliato o sei sempre così suscettibile? :)

    29/01/2025 - grumpy ha scritto:

    Guarda che per richiedere l'intervento del moderatore c'è un apposito pulsante.  ;D

    --- EDIT ...
    Si aggiunge ai precedenti un quarto e quinto commento fuori luogo da parte di questo utente... Stà compromettendo il buon esito di tale thread in maniera sistematica, offensiva, denigratoria. Si chiede cortesemente un intervento da parte dei Moderatori.
    GRAZIE mille

  • Re: Realizzare un cerca "Dinamico" in database access

    Il thread è arrivato al flame. Chiudo.

Devi accedere o registrarti per scrivere nel forum
24 risposte