Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    431

    [vb net 2010] problema con reader.hasrows

    Ciao ho questo codice
    codice:
    SQL = "select max(id) as MaxIdTestata from testateimg where codarch=" & codArch 
                Dim CMDT As New OleDbCommand(SQL, ConnDB)
                idTestata = CMDT.ExecuteScalar()
                
                SQLPacco = "select max(Pacco) as MaxPacco from testateimg where codarch=" & CodArch & " AND scatola=" & scatola
                'MsgBox(SQLPacco)
                CMDT.CommandText = SQLPacco
                CMDT.Connection = ConnDB
                Dim RDR As OleDb.OleDbDataReader = CMDT.ExecuteReader()
    
                If RDR.HasRows Then
                    Pacco = RDR("MaxPacco") + 1   <--- errore qui
                Else
                    Pacco = 1
                End If
                MsgBox(Pacco)
    quando arrivo alla lettura di RDR entra nell'if soltanto che il valore di RDR e' null e va in errore, come posso fare a sapere se il mio reader e' pieno o vuoto? in pratica il vecchio RS.eof
    Da un grande potere derivano grandi responsabilità

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    119
    Letto così ti a prima vista ti sei dimenticato di aprire la connessione

  3. #3
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    431
    ciao, no la connessione ce' ed e' aperta ho solo preso il pezzo dove ho l'errore. effettivamente non l'ho scritto nel post precedente, l'errore che mi da e' "Nessun dato esistente per la riga/colonna."
    Da un grande potere derivano grandi responsabilità

  4. #4
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    431
    ho provato anche a mettere al posto della riga

    If RDR.HasRows Then

    quest'altra

    If RDR("maxPacco") <> vbNull Then

    ma essendo vuoto il reader mi da questo errore: Nessun dato esistente per la riga/colonna.
    Effettivamente e' giusto perche nel caso che il reader sia vuoto deve partire da 1 il numero del pacco, non riesco a capire come mai se il reader e' vuoto la proprieta' hasrows mi da true. mi sapete aiutare?
    Da un grande potere derivano grandi responsabilità

  5. #5
    Utente di HTML.it L'avatar di alpynet
    Registrato dal
    Mar 2010
    Messaggi
    123
    Ciao, a parte il fatto che con quel tipo di select dovresti usare ExecuteScalar(), se usi Reader, prima di andare a leggere il campo, devi fare una lettura del record: TuoOggetto.read()
    pertanto qualcosa del genere:
    codice:
    If RDR.HasRows Then
       rdr.read()             
       Pacco = RDR("MaxPacco") + 1
    Else
    ....
    Endif

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    L'implementazione corretta della lettura - in generale - è questa:

    codice:
    While RDR.Read() Do
       Pacco = RDR("MaxPacco") + 1
    End While
    Se il dato da leggere è uno solo, meglio usare ExecuteScalar come già suggerito, oppure procedere semplicemente così:

    codice:
    If RDR.Read() Then
       Pacco = RDR("MaxPacco") + 1
    Else
       Pacco = 1
    End If
    Il metodo Read legge il record successivo disponibile e restituisce True se vi sono dati da leggere; quando restituisce False, la fine del flusso è stata raggiunta e quindi è possibile terminare il ciclo.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.