Ciao a tutti, dopo l'ultimo aggiornamento di Gambas ho riscontrato un problema non da poco, che mi blocca l'esecuzione del codice ( ho lo stesso problema anche con l'eseguibile generato ), che nelle versioni precedenti non succedeva:
For Each rstotali
Codicli = rstotali[0]
Numefatt = rstotali[1]
TotFatt = rstotali[2]
rsdiff = Mod_Open.$conn.Exec("SELECT SUM(Versati) AS TotVers FROM giornale WHERE '" & Codicli & "' = CodCli AND '" & Numefatt & "' = NFatt")
totale1 = totale1 + TotFatt
If rsdiff!TotVers > "0" Then ' In questo punto si blocca con errore : type mismatch wanted float, got string instead'
totale2 = totale2 + rsdiff!TotVers
End If
Inc it
Next
Non so come risolvere, grazie.
rsdiff = Mod_Open.$conn.Exec("SELECT SUM(Versati) AS TotVers FROM giornale WHERE '" & Codicli & "' = CodCli AND '" & Numefatt & "' = NFatt")
Qui la query è poco chiara, ti converrebbe scriverle così:
Dim sMySql As String
sMySql = "SELECT SUM(Versati)"
sMySql &= " AS TotVers"
sMySql &= " FROM giornale"
sMySql &= " WHERE CodCli = '" & Codicli & "'"
sMySql &= " AND NFatt = " & Numefatt & ""
sMySql &= ";"
Si capiscono meglio gli errori
Nota: Gli spazi nelle query sono inutili perchè eliminati ma io preferisco metterli per una migliore leggibilità.
nella query potrei aver invertito i valori oppure li hai invertiti tu?
ciao. alla fine con l'intuizione di Gianluigi ne sono venuto a capo:
la query rsdiff = Mod_Open.$conn.Exec("SELECT SUM(Versati) AS TotVers FROM giornale WHERE '" & Codicli & "'= CodCli AND '" & Numefatt & "'= NFatt")
mi restituisce anche valori nulli e quindi nella dichiarazione If rsdiff!TotVers > 0 Then il valore nullo mi da errore ( se non trattato come stringa ).
infatti facendo questa prova:
Print CFloat(rsdiff!TotVers) 'type mismatch: wanted Float, got Null instead'
Print CInteger(rsdiff!TotVers) 'type mismatch: wanted Integer, got Null instead'
Print CVariant(rsdiff!TotVers) 'ok'
Print CString(rsdiff!TotVers) 'ok'
Mi spiace per un errata valutazione aver usato la sezione "Bug" del forum :hard:
scusate pensavo di averlo indicato ;D, in questo modo funziona tutto alla perfezione non mi restituisce nessun errore:
If CString(rsdiff!TotVers) > "0" Then
totale2 = totale2 + rsdiff!TotVers
End If
fino a quando non trovo il modo di escludere i valori Null all'interno della query . Tipo:
rsdiff = Mod_Open.$conn.Exec("SELECT SUM(Versati) AS TotVers FROM giornale WHERE '" & Codicli & "'= CodCli AND '" & Numefatt & "'= NFatt AND TotVers IS NOT NULL")..... che ovviamente in questo caso non funge... ;D