Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Valore booleano sbagliato con ADO --ma non sempre sbagliato...--

Ciao a tutti.
Questa cosa mi sta facendo impazzire...
Uso ADO per accedere via ODBC a PgSQL via LAN.
...
    IstruzioneSQL = "SELECT * FROM macchine_vendute " _
        & "WHERE matricola=" _
        & txtMatricola.Text & ";"
    Comando.ActiveConnection = VariabiliGlobali.Connessione
    Comando.CommandText = IstruzioneSQL
 
    Rs.Open Comando, , adOpenKeyset, adLockOptimistic
...
Fin qui, niente di strano.
Il problema sta qua:
...
    With Rs
        txtMatricola.Text = .Fields(0).Value
        txtSerie.Caption = .Fields(1).Value
        txtProprietario.Caption = .Fields(2).Value
        txtAgente.Caption = .Fields(3).Value
        txtConsegnaGiorno.Caption = Right(.Fields(4).Value, 2)
        txtConsegnaMese.Caption = Left(Right(.Fields(4).Value, 4), 2)
        txtConsegnaAnno.Caption = Left(.Fields(4).Value, 4)
        chkSpeciale.Value = .Fields(5).Value
    End With
...
.Fields(5) e' un campo booleano e, come tale, sul db vale true o false
e in Visual Basic vedo --anzi, dovrei vedere-- 0 o 1.
Il fatto e' che:
- se compilo l'applicazione e la lancio, il valore di .Fields(5) e'
*sempre* 0, sia che il campo del db sia true o false
- se lancio l'esecuzione del sorgente dentro VB, come sopra: sempre 0
- se lancio l'esecuzione con l'"esegui istruzione (f8)", dentro VB,
come sopra: sempre 0
- se lancio l'esecuzione con l'"esegui istruzione (f8)", *MA* subito
dopo la rs.open apro la finestra "variabili locali", poi apro rs, poi
apro fields, poi apro il sesto elemento, poi guardo il .value, *IN
QUESTO CASO* il valore e' 0 od 1 correttamente, come estratto dal
database.
Tutte le prove le faccio con lo stesso database, senza cambiare una
virgola nei dati e senza modificare nulla nel codice.
Mi sapete dire perche'?
Grazie in anticipo, come sempre.
Saluti.
-- 
      Gianni "bugbarbeq" Rondinini, 25, RA, 242, 152
  VBR - Vero Birro Romagnolo®, diffidate dalle imitazioni!
 Opel/ECC Calibrezio EVO-V --- Kawasaki "Gas Gas" ZZ-R 1100
 ICQ# 36893168 - IRCNet: bugbarbeq, @ on #linux-it & #NetBSD

    End With
]zac[
O stai vedendo le streghe o un bug.
Metti un break point su .Fields(5), poi vai in debug e scrivi
?Rs.Fields(5).Value, quello e' il valore 'reale'.
Magari per non prendere abbagli usa un db dove il campo 5 di tutti i record
sia posto a true (il db accetta true o 1?).
Salve
                Dbg

fare i controlli del caso.
Dunque, a parte questi --giusti-- controlli che mi consigli, il
problema e' che .fields(5) vale sempre e comunque 0. Sia che lo usi
per impostare il valore del checkbox, sia che lo metta in una textbox,
sia che lo schiaffi in una msgbox.
La cosa che mi fa ridere e' che vale 0 anche se guardo con la finestra
variabili locali avendo messo un breakpoint *ovunque* *dopo* la open.
Se, invece, il breakpoint e' *la* open, premo f8 e *in quel momento*
apro la finestra variabili locali, allora .value diventa,
correttamente, 1.
Non so piu' che pesci pigliare...


sia posto a true (il db accetta true o 1?).
Il db li accetta entrambi. Qualsiasi cosa non 0 la considera true e
quando fai una query ritorna 1.


nella immediate compare 1.
]zac[