[Visual C# 2017] Controllo tra dati separati da virgola in un texbox e database Access .accdb

di il
7 risposte

[Visual C# 2017] Controllo tra dati separati da virgola in un texbox e database Access .accdb

Buongiorno a tutti,
spero di non aver sbagliato sezione. Avrei bisogno di un'informazione per un programma di controllo che sto creando. Avverto subito che sono alle prime armi, anche se in passato già utilizzai Visual C# per programmare, quindi direi che sono abbastanza scarso...
Quello che dovrei far fare al mio programma è questo:

- In un Windows Form ho 1 texbox multilinea dove dovrò inserire del testo, 1 pulsante e un altro controllo (altro textbox? datagridview? qualcosa di diverso?) dove voglio far uscire dei risultati (che poi spiegherò)
- Inserisco una serie di termini separati da virgola in una textbox
- Premo un pulsante "Controlla" e verranno confrontati i termini in quella textbox con dei record inseriti in un database, per poi far apparire il risultato in una seconda zona, che può essere un'altra textbox o qualcosa di più consono

Ecco cosa deve succedere: vorrei che ogni termine prima della virgola nella textbox venga confrontato con i record del mio database .accdb e se trovo una corrispondenza deve essere visualizzato il termine + i suoi dettagli, presi dal database. Esempio:

Contenuto della TextBox:
albero, orso, terreno, erba, nuvola

Contenuto del database:
Colonna1 --> ID: 1, 2, 3
Colonna2 --> NomeOggetto: orso, erba, nuvola
Colonna3 --> ColoreOggetto: marrone, verde, bianca

Se ad esempio facessi una chiamata all'ID 1, riceverei "orso - marrone"

Quando premo il pulsante "Controlla", dovrei prendere il primo termine nella textbox (ovvero "albero") e fare una ricerca nel database. Visto che albero non c'è, in un altra textbox (o, ripeto, dove più consono) dovrebbe apparirmi la frase "Non presente in archivio" e poi andare a capo, passando al controllo del secondo termine dopo la virgola, cioè "orso", mostrandomi il termine e le altre colonne a lui riferite. E così via. Il risultato, secondo il mio esempio, sarebbe questo:

Textbox1:
albero, orso, terreno, erba, nuvola

Textbox2/Datagridview (se più comoda):
Albero non presente in archivio
Orso - Marrone
Terreno non presente in archivio
Erba - Verde
Nuvola - Bianca

Ho provato ma senza successo, non so come "separare" i termini separati da virgola, per far la ricerca uno ad uno. E, peggio ancora, non riesco a fare il controllo del termine singolo se presente o no nel database e se non presente avvertirmi per poi andare a capo, se presente mostrarmelo con tutti i dettagli delle colonne.... e andare a capo.

Spero di essere stato abbastanza chiaro con la spiegazione....
Grazie a chiunque saprà aiutarmi o indirizzarmi

7 Risposte

  • Re: [Visual C# 2017] Controllo tra dati separati da virgola in un texbox e database Access .accdb

    String[] tokens = str.Split(','); ,e poi cicli sull'array di stringhe

    https://stackoverflow.com/questions/8928601/how-can-i-split-a-string-with-a-string-delimiter
  • Re: [Visual C# 2017] Controllo tra dati separati da virgola in un texbox e database Access .accdb

    gian82 ha scritto:


    String[] tokens = str.Split(','); ,e poi cicli sull'array di stringhe

    https://stackoverflow.com/questions/8928601/how-can-i-split-a-string-with-a-string-delimiter
    Grazie per la risposta. Ho fatto un test, solo per vedere se riuscivo a mettere una sotto l'altra le parole della prima TexBox all'interno della seconda, senza virgola.
    Questo è il codice:
     private void btnContr_Click(object sender, EventArgs e)
            {
                Char separatore = ',';
                String[] sottostringa = tbINCIcont.Text.Split(separatore);
                foreach (var finale in sottostringa)
                {
                 tbRisult.Text = finale + "\n";
                }
                
             
            }
    Quando premo il pulsante però solo l'ultima parola appare nell'altra TextBox. Il "foreach" non fa scorrere ogni indice nell'array? Immagino sia tutto sbagliato comunque... Se inserisco "orso, balena, anatra" in tbINCIcont appena premo il pulsante in tbRisult appare solo "anatra".
  • Re: [Visual C# 2017] Controllo tra dati separati da virgola in un texbox e database Access .accdb

    >>> tbRisult.Text = finale + "\n";
    in questo modo assegni alla proprietà text solo l'ultimo valore letto ovvero anatra ,
    devi accodare al valore corrente di Text il nuovo valore
    prova
    tbRisult.Text = tbRisult.Text + finale + "\n";
    oppure dichiara una nuova variabile stringa string "totale" fuori dal ciclo(in testa) e dentro il ciclo aggiungi il valore corrente(ovvero la var finale) a "totale" ,alla fine del ciclo potrai assegnare alla proprietà Text la lista ovvero la var totale
  • Re: [Visual C# 2017] Controllo tra dati separati da virgola in un texbox e database Access .accdb

    gian82 ha scritto:


    >>> tbRisult.Text = finale + "\n";
    in questo modo assegni alla proprietà text solo l'ultimo valore letto ovvero anatra ,
    devi accodare al valore corrente di Text il nuovo valore
    prova
    tbRisult.Text = tbRisult.Text + finale + "\n";
    oppure dichiara una nuova variabile stringa string "totale" fuori dal ciclo(in testa) e dentro il ciclo aggiungi il valore corrente(ovvero la var finale) a "totale" ,alla fine del ciclo potrai assegnare alla proprietà Text la lista ovvero la var totale
    Ti ringrazio, ora l'andare a capo funziona, facendo così:
    foreach (var finale in sottostringa)
                {
                  tbRisult.Text = tbRisult.Text + finale + "\r\n";
                }
    Questa era la base per il prossimo passo, ora la parte più difficile (credo): voglio che quei termini, dopo un controllo, "richiamino" dei record all'interno del mio database access. tbRisult.Text non apparirà la lista dei nomi che ho inserito nella prima TextBox (tbINCIcont.Text) ma ciò che viene chiamato dal database. Quindi, quando premo il pulsante, verrà controllato che il primo nome sia presente nel database e, se c'è, venga mostrato quel record con i suoi dati. Esempio:
    1) inserisco in tbINCIcont.Text i seguenti nomi: cane, ape, orso, anatra. Nel mio database ho:
    ID 1 - Anatra - Due zampe - Penne
    ID 2 - Orso - 2/4 zampe - Pelliccia
    ID 3 - Ape - 6 zampe - Insetto

    2) Premo il pulsante "Controlla" e parte il controllo tra i miei nomi e quelli nel database

    3) Se il nome non viene trovato, come "cane", mi apparirà il messaggio "Non in database". Se viene trovato, in tbRisult.Text dovrà apparirmi il nome, il numero di zampe e l'altro elemento. Quindi nel mio esempio avrò qualcosa di questo tipo:
    tbINCI.Text: cane, ape, orso, anatra
    tbRisult.Text:
    Cane - Non in database
    Ape - 6 zampe - Insetto
    Orso - 2/4 zampe - Pelliccia
    Anatra - Non in database

    Come si fa questa cosa? Grazie.
  • Re: [Visual C# 2017] Controllo tra dati separati da virgola in un texbox e database Access .accdb

    Mi sembra un caso di "pappa pronta",vedi regolamento
  • Re: [Visual C# 2017] Controllo tra dati separati da virgola in un texbox e database Access .accdb

    gian82 ha scritto:


    Mi sembra un caso di "pappa pronta",vedi regolamento
    Concordo.
  • Re: [Visual C# 2017] Controllo tra dati separati da virgola in un texbox e database Access .accdb

    No, non è un caso di pappa pronta, ho sudato letteralmente 7 camicie per fare sto programmino e mi ero bloccato. A forza di prove e cambi di codice, ricerche e tutto il resto sono riuscito a fare tutto. Anzi, è uscito anche meglio di quanto mi aspettassi. Avevo il codice ma non funzionava. Volevo vedere come era possibile farlo in un'altra maniera, visti i miei risultati. Ora non solo funziona ma tolgo spazi inutili prima o dopo i nomi, punteggiature o caratteri speciali, ho fatto ricerca con autocompletamento e suggerimenti. Lavorandoci un po' sopra potrebbe anche diventare "decente".
    Certo, capisco che non sappiate chi avete di fronte, però partire subito dal negativo.... almeno ho la soddisfazione di aver risolto da solo.
    Potete pure chiudere, grazie per l'aiuto iniziale (ma non grazie per l'allusione successiva).
Devi accedere o registrarti per scrivere nel forum
7 risposte