Newsgroup: it.comp.lang.visual-basic
Titolo: Non trovo l'errore in questo ciclo while...

Dunque ho messo sicuramente un errore logico in questo ciclo while:
While rs.EOF = False
    If InStr(rs("Descrizione").Value, "al Calciomercato") > 0 Then
    rs.MoveNext
    Else
    desc = rs("Descrizione").Value
'QUESTO E' CICLO IF THEN GENERARE L'ERRORE
|    If Txtdata.Text = rs("DataTransazione").Value Then
|        rs.MoveNext
|    End If
     crediti = rs("Crediti").Value
     If InStr(desc, "Recupero") > 0 Then
     desc = Replace(rs("Descrizione").Value, "Valore Sabagliato", "")
     desc2 = "--"
     Else
     pas1 = Replace(rs("Descrizione").Value, " Valore di A:", "")
     pas2 = Replace(pas1, " Valore di D:", "")
     pas3 = Replace(pas2, "Valore di C:", "")
     pas4 = Replace(pas3, "Valore di  P:", "")
     desc2 = Replace(pas4, "Valore di E:", "")
     desc = "--"
     End If
    Print #1, "... tutte le variabili [cut] "
    rs.MoveNext
    End If
  Wend
Il codice funziona perfettamente ma nel ciclo IF che ho indicato devo aver
commesso un errore che però non so ritrovare.
Praticamente il ciclo IF che dovrebbe filtrare tutti i valori per cui
[Txtdata.Text = rs("DataTransazione").Value] ed evitarne la stampa, ma non
filtra tutti i record letti!
Non so se può influire il fatto che sia Txtdata.Text che
rs("DataTransazione").Value sono delle date in formato gg\mm\aaaa.
Grazie dell'aiuto.

 rs("DataTransazione").Value sono delle date in formato gg\mm\aaaa.
Se DataTransazione, nel db, è di tipo Data, questa tua ultima 
affermazione è un'eresia.
Supponendo quindi che DataTransazione sia di tipo Stringa, e contenga 
una rappresentazione di una data in formato gg/mm/aaaa, il codice 
dovrebbe funzionare (sempre che le date siano scritte esattamente nello 
stesso modo).
Se invece DataTransazione è di tipo DateTime, allora devi prestare 
attenzione al fatto che il tuo codice è, in realtà, il seguente:
If CDate(Txtdata.Text) = rs("DataTransazione").Value Then
oppure
If Txtdata.Text = CStr(rs("DataTransazione").Value) Then
Non ricordo esattamente quale dei due avviene (io evito tassativamente 
le conversioni implicite perchè sono fonte di bug non individuabili).
Nel secondo caso, avresti malfunzionamenti (ma non errore) su sistemi 
operativi in inglese, nel primo caso avresti errore e/o 
malfunzionamenti su sistemi con lingua inglese.
Ciao
Alberto
-- 
Ma noi no

 rs("DataTransazione").Value sono delle date in formato gg\mm\aaaa.
O sono date o hanno il formato, le due cose insieme non possono verificarsi.
Ciao 

Non so' dove fosse l'errore, non era nel formato ho risolto comunque
spostando il ciclo If in questione subito prima dell'istruzione print#
Grazie dell'aiuto.

 Non so' dove fosse l'errore, non era nel formato ho risolto comunque
Beh, allora potevi anche mettere On Error Resume Next...


Puz740 wrote:
[cut]
 > 'QUESTO E' CICLO IF THEN GENERARE L'ERRORE
 > |    If Txtdata.Text = rs("DataTransazione").Value Then
 > |        rs.MoveNext
 > |    End If
[cut]
 >
 >   Wend
 >
 > Il codice funziona perfettamente ma nel ciclo IF che ho indicato devo aver
 > commesso un errore che però non so ritrovare.
 > Praticamente il ciclo IF che dovrebbe filtrare tutti i valori per cui
 > [Txtdata.Text = rs("DataTransazione").Value] ed evitarne la stampa, ma non
 > filtra tutti i record letti!
 >
 > Non so se può influire il fatto che sia Txtdata.Text che
 > rs("DataTransazione").Value sono delle date in formato gg\mm\aaaa.
 >
 > Grazie dell'aiuto.
cosi' come lo hai scritto, il programma filtra il primo record con
Txtdata.Text = rs("DataTransazione").Value e prosegue con quello seguente
che non viene piu' testato.
se invece vuoi che vengano controllati anche i record successivi devi
cambiare la logica.
io la scriverie cosi':
While rs.EOF = False
  If InStr(rs("Descrizione").Value, "al Calciomercato") = 0 Then
   Desc = rs("Descrizione").Value
   If Txtdata.Text <> rs("DataTransazione").Value Then
    crediti = rs("Crediti").Value
    If InStr(Desc, "Recupero") > 0 Then
     Desc = Replace(rs("Descrizione").Value, "Valore Sabagliato", "")
     desc2 = "--"
    Else
     pas1 = Replace(rs("Descrizione").Value, " Valore di A:", "")
     pas2 = Replace(pas1, " Valore di D:", "")
     pas3 = Replace(pas2, "Valore di C:", "")
     pas4 = Replace(pas3, "Valore di  P:", "")
     desc2 = Replace(pas4, "Valore di E:", "")
     Desc = "--"
    End If
    Print #1, "... tutte le variabili [cut] "
   End If
  End If
  rs.MoveNext
Wend
con un solo rs.MoveNext prima del Wend
cosi' non ti incasini a seguire il flusso dei dati
hth
bye
r

 filtra tutti i record letti!
Ma non puoi filtrare i record a livello di select?
Cioè
SELECT * FROM tabella WHERE "DATATRANSAZIONE" <> txtData (formattata
bene ovviamente)
-- 
Freccia@Bulldozer63 :D

 Grazie dell'aiuto.
cosi' come lo hai scritto, il programma filtra il primo record con
Txtdata.Text = rs("DataTransazione").Value e prosegue con quello seguente
che non viene piu' testato.
se invece vuoi che vengano controllati anche i record successivi devi
cambiare la logica.
io la scriverie cosi':
While rs.EOF = False
  If InStr(rs("Descrizione").Value, "al Calciomercato") = 0 Then
   Desc = rs("Descrizione").Value
   If Txtdata.Text <> rs("DataTransazione").Value Then
    crediti = rs("Crediti").Value
    If InStr(Desc, "Recupero") > 0 Then
     Desc = Replace(rs("Descrizione").Value, "Valore Sabagliato", "")
     desc2 = "--"
    Else
     pas1 = Replace(rs("Descrizione").Value, " Valore di A:", "")
     pas2 = Replace(pas1, " Valore di D:", "")
     pas3 = Replace(pas2, "Valore di C:", "")
     pas4 = Replace(pas3, "Valore di  P:", "")
     desc2 = Replace(pas4, "Valore di E:", "")
     Desc = "--"
    End If
    Print #1, "... tutte le variabili [cut] "


 ha scritto nel messaggio
news:432ffc2b$0$8489$5fc...@news.tiscali.it...


  ....
Oltre ai problemi già segnalati, se entri nell'If critico e sei sull'ultimo 
record, la "rs.Movenext" ti manda alla fine del file e la "crediti = 
rs("Crediti").Value" ti va in errore. Come dice Nerone, usa una sola 
Movenext prima del Wend e fai una nidifcazione di If per gestire il flusso.
Ciao
Elef