Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Numeri Mancanti

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,183

    Numeri Mancanti

    Ciao a tutti,
    in questo modo prelevo dei numeri di tessera da un db

    dim objcmd_ver as new oledbcommand (" select * from num_tes ", objconn)

    dim read as oledbdatareader

    objconn.open
    read=objcmd_ver.executereader

    dim la_tessera as integer

    dim i as integer

    while read.read
    la_tessera=read.getint32(1)


    response.Write(la_tessera)


    end while
    read.close
    objcmd_ver.connection.close()
    Il problema è che le tessere dovrebbero essere consecutive es:1-2-3-4 ecc...

    Ma per errore alcune tessere inserite non sono consecutive a quella prima.
    Quindi ci sono dei numeri saltati es: 1-3-4-6 ecc...


    Come faccio ad evidenziare i numeri saltati?

    Grazie
    victor
    ----------------------

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    nella tabella metto: 1,3,4,6,10
    i numeri mancanti sono: 2,5,7,8,9

    listo in nero i numeri e in rosso i numeri mancanti

    codice:
    <%@ Page Language="VB" %>
    <%@ Import Namespace="l=libreria.ModuloWeb" %>
    
    <!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 Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim dr As OleDbDataReader = l.GetDataReader(gl.StringaConnessioneTest, "SELECT Numero FROM Tabella7 ORDER BY Numero")
            Dim numeroPrecedente As Integer = -1
            Dim numero As Integer = 0
            Dim sb As New StringBuilder()
            Do While dr.Read
                numero = CInt(dr("numero"))
                If numeroPrecedente = -1 Then
                    numeroPrecedente = numero
                    sb.Append(String.Format("<div style=""color:black;"">{0}</div>", numero))
                    
                Else
                    For i As Integer = numeroPrecedente + 1 To numero - 1
                        sb.Append(String.Format("<div style=""color:red;"">{0}</div>", i))
                    Next
                    numeroPrecedente = numero
                    sb.Append(String.Format("<div style=""color:black;"">{0}</div>", numero))
                End If
            Loop
            
            Me.div1.InnerHtml = sb.ToString()
            dr.Close()
        End Sub
        
        
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Pagina senza titolo</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div id="div1" runat="server"></div>
        </form>
    </body>
    </html>
    Pietro

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,183
    mi da questo errore

    'OleDbDataReader' is not defined.


    e poi non ho capito una cosa....
    devo copiare interamente il listato cosi come tu lo hai postato?

    Considera che la tabella si chiama num_tes ed il campo tes


    grazie infinite

    p.s.
    con questo
    <%@ Import Namespace="l=libreria.ModuloWeb" %>
    devo percaso iportare qualche altra cosa o va bene cosi
    victor
    ----------------------

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Non puoi copiarlo tale e quale ma lo devi considerare come uno spunto che tu devi fare tuo e adattarlo.

    Guarda i due codici, il tuo e il mio.

    Nel tuo aggiungi la variabile numeroPrecedente e Numero che servono per cercare i numeri mancanti. Poi concentrati sul ciclo while tuo e Do While mio, che fanno le stesse cose. Osserva come io innesto un ciclo for per cercare i numeri mancanti.
    Puoi semplificare benissimo usando response.Write.

    :master: Se ti va, ti consiglio di usare Excel, cioè il suo editor basic. Ti fai una procedura di prova con un vettore riempito con 1,3,4,6,10 e provi a pescarne gli elementi individuando quelli mancanti. La sintassi è quasi la stessa, ma hai il vantaggio di un ambiente semplificato per fare prove. Ciao

    ps. questa è la procedura di prova da adattare fatta in excel come detto
    codice:
    Option Explicit
    
    Sub prova()
        Dim dr(4) As Integer
        Dim numeroPrecedente As Integer, numero As Integer
        Dim i As Integer, j As Integer
        
        dr(0) = 1
        dr(1) = 3
        dr(2) = 4
        dr(3) = 6
        dr(4) = 10
        
        numeroPrecedente = -1
        For j = 0 To 4
            numero = dr(j)
            If numeroPrecedente = -1 Then
                numeroPrecedente = numero
                Debug.Print (numero)
                
            Else
                For i = numeroPrecedente + 1 To numero - 1
                    Debug.Print (i & " mancante")
                Next
                numeroPrecedente = numero
                Debug.Print (numero)
            End If
        Next
        
        
    End Sub
    Pietro

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    1,183
    Ciao Pietro
    sto usando questo tuo codice..e funziona...pero' mi da errore quando la cella num_ric è vuota

    dim objcmd_ver34dsmitnstcabe as new oledbcommand (" select * from mov where anno="& anno_in_corso &" order by num_ric desc ", objconn)
    dim read34dsmitnstcabe as oledbdatareader

    objconn.open
    read34dsmitnstcabe=objcmd_ver34dsmitnstcabe.execut ereader


    dim eccotot as integer
    dim eccotot2 as integer

    Dim numeroPrecedente As Integer = -1
    Dim numero As Integer
    Dim sb As New StringBuilder()

    while read34dsmitnstcabe.read


    numero = CInt(read34dsmitnstcabe("num_ric"))

    If numeroPrecedente = -1 Then
    numeroPrecedente = numero
    sb.Append(String.Format("<div style=""color:black;"">{0}</div>", numero))
    Else
    For i As Integer = numeroPrecedente + 1 To numero - 1
    sb.Append(String.Format("<div style=""color:red;"">{0}</div>", i))
    Next
    numeroPrecedente = numero
    sb.Append(String.Format("<div style=""color:black;"">{0}</div>", numero))
    End If


    Me.div1.InnerHtml = sb.ToString()
    end while
    read34dsmitnstcabe.close
    objcmd_ver34dsmitnstcabe.connection.close()


    end if
    ecco l'errore

    Cast non valido dal tipo 'DBNull' al tipo 'Integer'. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.InvalidCastException: Cast non valido dal tipo 'DBNull' al tipo 'Integer'.

    Source Error:

    Line 59:
    Line 60:
    Line 61: numero = CInt(read34dsmitnstcabe("num_ric"))
    mi daresti una mano?
    grazie mille
    victor
    ----------------------

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Basta un po' di logica:

    1) fra i campi della SELECT estrai anche uno con la funzione MAX("campo numero tessera"), che supponiamo risulti = X (...oppure prima fai un'altra query)

    2) crea un array con X+1 elementi, di contenuto vuoto

    3) cicla sul DataReader e -visto che si tratta di numeri interi- usa ogni valore come indice per l'array di appoggio, riempendo il valore dell'elemento dell'array di appoggio con una stringa (es. hai trovato il numero di tessera 2, e l'elemento con indice 2 dell'array di appoggio conterra' una "Tessera 2 trovata")

    4) cicla nell'array di appoggio e saprai quali numeri tessera sono in tabella e quali no: se l'elemento è vuoto (null) vuol dire che è un numero tessera mancante.

    Non so se mi sono spiegato.

    ================================
    Esempio che funziona:
    (con un array chiamato Array_Select al posto del DataReader)

    codice:
    protected void Page_Load(object sender, EventArgs e)
    {
        // simulazione del risultato della query principale
        int[] Array_Select = new int[6] { 0, 1, 3, 9, 10, 11 };
    
        // array dimensionato con il numero massimo trovato nel risultato
        string[] Array_Appoggio = new string[Array_Select.Max() + 1];
    
        // Costruzione dell'array che conterrà gli elementi trovati e quelli mancanti     
        foreach (int TesseraTrovata in Array_Select) Array_Appoggio[TesseraTrovata] = "Tessera " + TesseraTrovata + " esistente";
    
        int n = 0;
        foreach (string valore in Array_Appoggio)
        {
            if (valore != null) Response.Write(valore + "<br />");
            else Response.Write("Tessera " + n.ToString() + " non esistente.<br />");
            n++;
        }
    }
    Ultima modifica di djciko; 27-10-2016 a 02:36

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Comunque il thread è del 01 Dicembre 2007, per favore Victor se le soluzioni che ti abbiamo dato non risolvono il tuo problema, riaprilo copiando il codice necessario per cui vuoi l'aiuto.

    (questo poi devo chiuderlo e settarlo appositamente per una futura pulizia, altrimenti non viene considerato nelle cancellazioni cicliche dei vecchi thread)

    Grazie

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.