Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    4

    [Vb.Net] Gestione Spazi vuoti / Query Access

    ////////////////////////////////////////////
    Private Sub Cerca(sender As Object, e As EventArgs)

    ' RECUPERO I DATI DAL MODULO
    Dim stringa As String = Replace(txtStringa.Text, "'", "''")
    Dim stringa2 As String = Replace(txtStringa2.Text, "'", "''")
    ' CONTROLLO CHE SIA STATO SPECIFICATO UN CRITERIO DI RICERCA

    If Len(Trim(stringa)) < 3 Then

    Risultato.Text = "Inserire un termine di almeno 3 caratteri"
    Else

    Dim i As Integer = 0

    ' DIVIDO LE PAROLE CHIAVE IN UN ARRAY DI STRINGA

    ' UTILIZZANDO UNO SPAZIO VUOTO COME SEPARATORE

    Dim s() As String = Split(stringa, " ")
    Dim s2() As String = Split(stringa2, " ")

    ' CREO LA STRINGA SQL *

    Dim SQL As String = "SELECT * FROM Iscritti WHERE"
    For i = 0 To UBound(s)

    If i > 0 Then SQL += " AND"
    SQL += " Cognome LIKE '%" & s(i) & "%'"
    SQL += " AND"
    SQL += " nome LIKE '%" & s2(i) & "%'"
    Next

    ' APRO LA CONNESSIONE E LANCIO LA QUERY IN UN RECORDSET

    Dim cn As New ADODB.Connection

    Dim rs As New ADODB.Recordset

    cn.Open("driver={Microsoft Access Driver (*.mdb)};dbq="& Server.MapPath("~/app_data/xxxxxxxxx.mdb"))

    rs.Open(SQL, cn, 1)


    If rs.EOF Then

    Risultato.Text = "Nessun risultato per la ricerca"
    Else
    ///////////////////////////
    Salve, premetto il mio essere neovita di .Net, sto smanettando con questo codice, tirando fuori dei record incrociando con where su due colonne di access ( nome) e (Cognome).

    funge tutto bene fino a quando non incontro un cognome separato da uno spazio come questo:

    De Santis

    Il sistema mi restituisce ils eguente errore:

    Indice oltre i limiti della matrice

    potete darmi una mano per risolvere la cosa...?
    vi ringrazio in anticipo

    Hosrus76

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Non ho verificato: detto questo, perchè non provi a costruirti l'sql con due cicli. Il primo scansiona s(), il secondo s2()
    Pietro

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    4
    grazie del suggerimento, mi puoi dare qualche dritta sul codice da scrivere...
    grazie ancora in anticipo.

    Horus76

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    L'ho appena detto. Invece di fare un ciclo for

    codice:
    ' CREO LA STRINGA SQL *
     
    Dim SQL As String = "SELECT * FROM Iscritti WHERE"
     For i = 0 To UBound(s)
     
    If i > 0 Then SQL += " AND"
     SQL += " Cognome LIKE '%" & s(i) & "%'"
     SQL += " AND"
     SQL += " nome LIKE '%" & s2(i) & "%'"
     Next
    scindilo in due cicli, uno scansiona s() e l'altro s2()

    di più non so proprio che dire

    Pietro

  5. #5
    mi spieghi cosa devi fare e come è fatta l'interfaccia?
    cosa fa un utente?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    4
    in pratica l'utente dispone di due textBox, cognome e nome, e un pulsante cerca.
    La ricerca avviene su due colonne cognome e nome, l'utente deve inserire minimo 3 lettere nel campo cognome per poter scatenare la ricerca sul db di access.

    Il risultato viene stampato in una Label.

    solo che quando il campo cognome , trova un cognome del tipo DE SANTIS
    mi va in errore, lo spazio lo porta in criticità.

    Come ho detto prima non sono molto ferrato e sto modificando del codice trovato in giro.
    Grazie ancora

    horus76

    ////////////////////
    <script runat="server">
    Private Sub Cerca(sender As Object, e As EventArgs)

    ' RECUPERO I DATI DAL MODULO

    Dim stringa As String = Replace(txtStringa.Text, "'", "''")
    Dim stringa2 As String = Replace(txtStringa2.Text, "'", "''")
    ' CONTROLLO CHE SIA STATO SPECIFICATO UN CRITERIO DI RICERCA

    If Len(Trim(stringa)) < 3 Then

    Risultato.Text = "Inserire un termine di almeno 3 caratteri"
    Else

    Dim i As Integer = 0

    ' DIVIDO LE PAROLE CHIAVE IN UN ARRAY DI STRINGA

    ' UTILIZZANDO UNO SPAZIO VUOTO COME SEPARATORE

    Dim s() As String = Split(stringa, " ")
    Dim s2() As String = Split(stringa2, " ")

    ' CREO LA STRINGA SQL *

    Dim SQL As String = "SELECT * FROM Iscritti WHERE"
    For i = 0 To UBound(s)

    If i > 0 Then SQL += " AND"
    SQL += " Cognome LIKE '%" & s(i) & "%'"
    SQL += " AND"
    SQL += " nome LIKE '%" & s2(i) & "%'"
    Next

    ' APRO LA CONNESSIONE E LANCIO LA QUERY IN UN RECORDSET

    Dim cn As New ADODB.Connection

    Dim rs As New ADODB.Recordset

    cn.Open("driver={Microsoft Access Driver (*.mdb)};dbq="& Server.MapPath("~/app_data/albo.mdb"))

    rs.Open(SQL, cn, 1)


    If rs.EOF Then

    Risultato.Text = "Nessun risultato per la ricerca"
    Else


    ' FORMATTO I DATI IN UN COSTRUTTO SQL

    ' CHE CREO IN UNA asp:Label

    Risultato.Text = ""
    While rs.EOF = False

    With Risultato
    .Text += "
    "
    .Text +="N° Iscrizione: " & rs("Numero_Registra").Value & "
    "
    .Text += "Nome : " & rs("NOME").Value & "
    "
    .Text += "Cognome : " & rs("COGNOME").Value & "
    "
    .Text += "Nato a : " &rs("LOC_NAS").Value & "
    "
    .Text += "In data : " &rs("Data Registra").Value & "
    "
    .Text += "Residente in : " & rs("INDIRIZZO").Value & ", "
    .Text += rs("Localita").Value & "

    "

    End With

    rs.MoveNext()

    End While

    End If


    rs.Close()

    cn.Close()

    End If


    End Sub


    </script>

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    ho fatto delle prove modificando un poco il tuo codice.
    Ho usato un solo TextBox per la ricerca
    Vedi se va

    codice:
    <%@ Page Language="VB" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
        Protected Sub Cerca_Click(sender As Object, e As System.EventArgs)
            ' RECUPERO I DATI DAL MODULO
    
            Dim stringa As String = Replace(txtStringa.Text, "'", "''")
                    
    
            ' CONTROLLO CHE SIA STATO SPECIFICATO UN CRITERIO DI RICERCA
            If Len(Trim(stringa)) < 3 Then
                Risultato.Text = "Inserire un termine di almeno 3 caratteri"
                Return
            End If
            
            ' DIVIDO LE PAROLE CHIAVE IN UN ARRAY DI STRINGA
            ' UTILIZZANDO UNO SPAZIO VUOTO COME SEPARATORE
            Dim s As String() = stringa.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)
            
            ' CREO LA STRINGA SQL *
            Dim sql As New StringBuilder()
            sql.Append("SELECT Iscritti.*, [cognome] & IIf([nome] Is Null,"""","" "" & [nome]) AS cognome_nome FROM Iscritti WHERE ")
            For i As Integer = 0 To s.Length - 1
                If i > 0 Then sql.Append(" and ")
                sql.Append("  [cognome] & IIf([nome] Is Null,"""","" "" & [nome]) LIKE '%" & s(i) & "%'")
            Next
            
            ' APRO LA CONNESSIONE E LANCIO LA QUERY IN UN RECORDSET
            Using Connessione As New OleDbConnection(String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}", Server.MapPath("~/app_data/albo.mdb")))
                Connessione.Open()
                Dim Comando As New OleDbCommand(sql.ToString, Connessione)
                Using Reader As OleDbDataReader = Comando.ExecuteReader()
                    Dim sb As New StringBuilder()
                    Do While (Reader.Read)
                        sb.Append(NullToString(Reader("cognome_nome")))
                        sb.Append("
    ")
                    Loop
                    Me.Risultato.Text = sb.ToString
                End Using
            End Using
        
        End Sub
        
        Public Function NullToString(ByVal v As Object) As String
            If v Is DBNull.Value Then
                Return ""
            Else
                Return DirectCast(v, String)
            End If
    
        End Function
    
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <label for="txtStringa">Nome</label>
    
            <asp:TextBox ID="txtStringa" runat="server" />
            
    
    
    
            <asp:Button ID="Cerca" runat="server" Text="Cerca" OnClick="Cerca_Click" />
            
    
    
            <asp:Literal ID="Risultato" runat="server"></asp:Literal>
        </div>
        </form>
    </body>
    </html>
    Pietro

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    4
    Grazie mille Pietro...
    ho avuto qualche problema nel tirare fuori qualche record dalle colonne avente Tipo di dati Numerico , lo script mi andava KO, " Return DirectCast(v, String)" , credoa causa di voler convertire un tipo String in Double, però ho modificato il db access, ed ho risolto, per le esigenze attuali + che sufficiente.

    Grazie ancora

    Horus76

  9. #9
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Per postare il codice usa i tag CODE pero'. Ciao

  10. #10
    Originariamente inviato da Horus76
    in pratica l'utente dispone di due textBox, cognome e nome, e un pulsante cerca.
    La ricerca avviene su due colonne cognome e nome, l'utente deve inserire minimo 3 lettere nel campo cognome per poter scatenare la ricerca sul db di access.
    Ok abbastanza chiaro.
    Dunque, se hai due campi distinti per nome e cognome, non capisco perché ti metti a fare lo split delle parole inserite.
    Per caso vuoi fare ricerche multiple?
    è possibile che un utente scriva nel campo cognome:
    rossi micheletti
    per cercare sia i "rossi" che i "micheletti"????

    solo che quando il campo cognome , trova un cognome del tipo DE SANTIS
    mi va in errore, lo spazio lo porta in criticità.
    se un utente vuole cercare De santis, sicuramente anche sul DB ci sarà scritto "De Santis", ecco perché non dovresti fare lo split delle parole.


    P.S.: il codice che hai trovato mi pare che sia di ASP, non di ASP.NET
    Tu cosa stai usando?

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.