none
Ricerca dati in un database non riuscita RRS feed

  • Domanda

  • Buongiorno, utilizzando VB2013 ho il problema che non mi effettua la ricerca dei dati in un database, leggendo su MSDN ho trovato delle prcedure per la creazione dei database che riporto di seguito:

    http://msdn.microsoft.com/it-it/library/vstudio/ms233763(v=vs.110).aspx

    Quindi ho provato a fare questa procedura

    -Creato il Form-> nome Prova1

    - Progetto-> aggiungi nuovo elemento (e visto che avevo già provato come era scritto ho scelto..) -> DataSet

    e si apre il DataSet1.xsd

    - Origini Dati-> click su aggiungi configura origine dati ->  Origine dati: Microsoft SQL Server ->ok 

    - nuova connessione e su nome file database -> DataBaseProva1-> OK -> SI ->Avanti->SI->Avanti->Fine

    - Creo una tabella ->ESPLORA DATABASE -> Click destro sulla tabella -> Crea Nuova tabella:

    Inserisco la chiave primaria con numerazione automatica

    a1 e a2, due campi semplici semplici lasciando le classiche impostazioni

    CREATE TABLE [dbo].[Table]
    (
    	[Id] INT NOT NULL PRIMARY KEY IDENTITY, 
        [a1] NCHAR(10) NULL, 
        [a2] NCHAR(10) NULL
    )


    - Vado su T-SQL, modificando il nome della tabella da

    CREATE TABLE [dbo].[Table]

    a

    CREATE TABLE [dbo].[TableProva1]

    - In alto a destra della finestra della Query clicco su "Aggiorna"

    inizia la procedura d'aggiornamento del database

    - chiudo la finestra della tabella.

    - da ESPLORA DATABASE ->Aggiorna ->apro il database -> apro la tabella (si trova la tabella creata prima)-> trascino la tabella nel DataSet1.xsd

    - Click destro su Fill,GetData() -<Aggiungi -> Query (e creiamo le 4 queri Selezione, eliminazione, aggiornamento, e inserimento (FillByProva1,DeleteQueryProva2,InsertQueryProva2,UpdateQueryProva2)

    - ora creo la queri per la ricerca, con la stessa procedura, che come FillByProva1 scelgo la restituzione di una riga, la prima in alto

    -inserendo questo codice:

    SELECT Id, a1, a2 FROM dbo.TableProva1
    WHERE (a1 LIKE @Param1)
    ORDER BY a1

    doce ricerca il parametro nella colonna a1 e ordina i risultati nella colonna a1

    - Questa è chiamata: FillByRicercaProva1_a1

    - a questo punto chiudo DataSet1.xsd e salvo

    - Da origini Dati trascino la tabella sul form, creando automaticamente 

    TableProva2BindingNavigator

    TableProva2DataGridView

    - trascino i due campi a1 e a2 nel form e imposto le loro proprietà MaxLength=10 (valore max di carattteri nei campi delle queri)

    -Sotto al form selezionando TableProva1BindingSource, appare una linguetta in alto a destra, dove cliccando appare-> Attività di BindingSource-> Aggiungi Query

    -All'apertura di "Generatore di criteri per la ricerca"

    - Selezionare Nome query esistente-> FillByRicercaProva1_a1(Param1) e confermare con ok

    - a questo punto genera una barra di ricerca

    - Qua inserisco una label che nominerò "Ripristino Database", aprendo il codice di questa inserisco dentro:

     Private Sub RipristinoDatabase_Click(sender As Object, e As EventArgs) Handles RipristinoDatabase.Click
            'TODO: questa riga di codice carica i dati nella tabella 'DataSet1.TableProva1'. È possibile spostarla o rimuoverla se necessario.
            Me.TableProva1TableAdapter.Fill(Me.DataSet1.TableProva1)
        End Sub

    - per la barra di ricerca se andiamo a vedere genera automaticamente il codice seguente:

     Private Sub FillByRicercaProva1_a1ToolStripButton_Click(sender As Object, e As EventArgs) Handles FillByRicercaProva1_a1ToolStripButton.Click
            Try
                Me.TableProva1TableAdapter.FillByRicercaProva1_a1(Me.DataSet1.TableProva1, Param1ToolStripTextBox.Text)
            Catch ex As System.Exception
                System.Windows.Forms.MessageBox.Show(ex.Message)
            End Try
    
        End Sub

    noteremo poi che così come è ricercherà solo i valori scritti per intero sulla 

    Param1ToolStripTextBox

    - a questo punto sarebbe pronto tutto...ma manca una cosa

    - ESPLORA SOLUZIONI->click destro su DataBaseProva1.mdf e impostare copia nella directory di output-> non copiare, questo perchè altrimenti tutte le volte che chiudete l'applicazione e la riaprite i dati per incanto spariscono..

    - ora dobbiamo andare dove risiede il database...dentro alla cartella di progetto copiare

    DataBaseProva1_log.ldf

    DataBaseProva1.mdf

    e copiarli in:

    C:\Users\utente\Documents\Visual Studio 2013\Projects\Prova1\Prova1\bin\Debug

     se vi da errore che non può esser copiato è perchè è in uso, quindi salvare ilprogetto e chiudere VB2013, copiare i file e riaprire VB2013

    - a questo punto mandare in esecuzione inserire i dati..magari due righe e provare a inserire le l'iniziale dei dati inseriti nella casella a1 e vedrete che non trova nulla, ma se inserite tuttoil valore della a1 la trova.

    - ora modifico il codice in:

    Private Sub FillByRicercaProva1_a1ToolStripButton_Click(sender As Object, e As EventArgs) Handles FillByRicercaProva1_a1ToolStripButton.Click
            Try
                Me.TableProva1TableAdapter.FillByRicercaProva1_a1(Me.DataSet1.TableProva1, "%" + Param1ToolStripTextBox.Text + "%")
            Catch ex As System.Exception
                System.Windows.Forms.MessageBox.Show(ex.Message)
            End Try
    
        End Sub

    in questo modo per quanto ne so...dovrebbe cercare anche le singole lettere presenti nel campo a1

    ma così non è.....why...pecchè.. :-(

    ditemi se ho fatto una procedura sbagliata.....help




    • Modificato Guido.G mercoledì 30 aprile 2014 10:55
    mercoledì 30 aprile 2014 09:44