Autore Topic: [RISOLTO] Valori null nelle query  (Letto 948 volte)

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
[RISOLTO] Valori null nelle query
« il: 02 Maggio 2018, 20:45:44 »
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:
Codice: [Seleziona]
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.
 
« Ultima modifica: 05 Maggio 2018, 21:27:18 da naderit »

Offline Arco

  • Gambero
  • **
  • Post: 93
    • Mostra profilo
Re:[RISOLTO] Valori null nelle query
« Risposta #1 il: 03 Maggio 2018, 09:32:50 »
Vuole un dato numerico non una stringa.
Togli le virgolette allo 0
tua versione 
If rsdiff!TotVers > "0" Then

Prova
 If rsdiff!TotVers > 0 Then

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:[RISOLTO] Valori null nelle query
« Risposta #2 il: 03 Maggio 2018, 14:07:33 »
ciao si già provato e mi restituisce : type mismatch: wanted Integer, got Null instead
con print rsdiff!TotVers mi restituisce il dato memorizzato nel database, non capisco se sia un problema di libreria sqlite o gestione delle variabili. Prima dell'aggiornamento funzionava regolarmente.
è un programma che uso per la fatturazione, l'unica cosa che posso dire che non ho creato un pacchetto d'installazione, ma direttamente l'eseguibile, nella cartella del progetto, sta di fatto che avviando l'applicazione mi  da lo stesso problema. Fortunatamente non è una parte del programma essenziale.   

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:[RISOLTO] Valori null nelle query
« Risposta #3 il: 03 Maggio 2018, 14:31:19 »
Come ti ha detto Arco per i numeri devi togliere le virgolette altrimenti ricevi Stringhe al loro posto
Quindi devi rivederti le query e togliere le virgolette "'" a tutto ciò che è numero e non stringa a partire dai numeri di codice e così proseguendo.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:[RISOLTO] Valori null nelle query
« Risposta #4 il: 03 Maggio 2018, 14:48:50 »
Ciao Gianluigi  hai ragione, ho fatto come mi avete detto ma mi restituisce sempre il solito problema....
Citazione
Quindi devi rivederti le query e togliere le virgolette "'" a tutto ciò che è numero e non stringa a partire dai numeri di codice e così proseguendo.

il campo della tabella e un formato numerico float (real) per poter eseguire un SUM sei valori presenti.

alla fine ho risolto creando una variabile stinga, anche se non mi piace, poco elegante. 

dim pippo as string
pippo = rsdiff!TotVers
 if pippo >"0" then .... ect ect

in questo modo funziona regolarmente.... però non mi è ancora chiaro il motivo per cui funziona solo se è stringa... se la variabile Pippo è Variant o Float mi restituisce sempre lo stesso errore, pure togliendo le virgolette.  :-[ mistero

Offline Arco

  • Gambero
  • **
  • Post: 93
    • Mostra profilo
Re:[RISOLTO] Valori null nelle query
« Risposta #5 il: 03 Maggio 2018, 14:58:20 »
Ricordati anche che quando fai un confronto tipo il tuo
If rsdiff!TotVers > 0 Then
Senza virgolette fai il confronto con i numeri quindi If è vero se la variabile è 1 o maggiore
Nel caso di stringa
If rsdiff!TotVers > "0" Then
Il confronti non il numero ma il numero ascii di 0 (48) quindi sarà vero quando la variabile diventa un carattere ascii con numero superiore a quello dello 0 quindi sia numeri che lettere.
Spero di essere stato chiaro.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:[RISOLTO] Valori null nelle query
« Risposta #6 il: 03 Maggio 2018, 15:50:09 »
Come ti ha detto Arco non puoi confrontare una stringa come faresti con un numero funziona in modo differente.
Devi ritornare all'origine, quando il codice ti dava questo errore:
Codice: [Seleziona]
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
   

Da li devi rivederti le query come detto prima.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:[RISOLTO] Valori null nelle query
« Risposta #7 il: 03 Maggio 2018, 16:38:25 »
Citazione
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ì:
 
Codice: [Seleziona]
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?
« Ultima modifica: 03 Maggio 2018, 16:44:46 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Arco

  • Gambero
  • **
  • Post: 93
    • Mostra profilo
Re:[RISOLTO] Valori null nelle query
« Risposta #8 il: 03 Maggio 2018, 16:55:44 »
Gianluigi hai riscritto la query e vedo adesso che naderit nel suo codice non ha inserito il ; alla fine.

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:[RISOLTO] Valori null nelle query
« Risposta #9 il: 04 Maggio 2018, 19:55:28 »
eccoci.... dunque per prova ho seguito alla lettera i vostri consigli ma sfortunatamente il problema rimane
Citazione
Nota: Gli spazi nelle query sono inutili perchè eliminati ma io preferisco metterli per una migliore leggibilità.
in realtà gli spazi ci vogliono altrimenti mi restituisce syntax error, il ";" sembrerebbe ininfluente. Mentre contino ad avere il problema (a questo punto relativo ), ovvero  la condizione If rsdiff!TotVers > "0" Then mi accetta solo valore stringa.
un'altra cosa che ho notato, ma questo dipende dall'ide di gambas che ugni volta che scrivo nel codice un apice aggiunge il secondo in automatico, è un po' fastidioso.
comunque per il momento vi ringrazio per la disponibilità.   

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:[RISOLTO] Valori null nelle query
« Risposta #10 il: 05 Maggio 2018, 13:52:25 »
eccoci.... dunque per prova ho seguito alla lettera i vostri consigli ma sfortunatamente il problema rimane
Citazione
Nota: Gli spazi nelle query sono inutili perchè eliminati ma io preferisco metterli per una migliore leggibilità.
in realtà gli spazi ci vogliono altrimenti mi restituisce syntax error, il ";" sembrerebbe ininfluente. Mentre contino ad avere il problema (a questo punto relativo ), ovvero  la condizione If rsdiff!TotVers > "0" Then mi accetta solo valore stringa.
un'altra cosa che ho notato, ma questo dipende dall'ide di gambas che ugni volta che scrivo nel codice un apice aggiunge il secondo in automatico, è un po' fastidioso.
comunque per il momento vi ringrazio per la disponibilità.

Io intendevo questo (vedi immagine allegata).

Dovresti fare un piccolo progetto che riproduce il malfunzionamento, altrimenti diventa impossibile aiutarti.
« Ultima modifica: 05 Maggio 2018, 13:52:58 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:[RISOLTO] Valori null nelle query
« Risposta #11 il: 05 Maggio 2018, 21:26:36 »
ciao. alla fine con l'intuizione di Gianluigi ne sono venuto a capo:
la query
Codice: [Seleziona]
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:
Codice: [Seleziona]
 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:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.269
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[RISOLTO] Valori null nelle query
« Risposta #12 il: 06 Maggio 2018, 00:34:22 »
Mi spiace per un errata valutazione aver usato la sezione "Bug" del forum

...magari Gianluigi sposta la discussione in una Sezione più confacente. 

« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:[RISOLTO] Valori null nelle query
« Risposta #13 il: 06 Maggio 2018, 10:13:05 »

la query
Codice: [Seleziona]
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 ).


E come hai risolto? Cambiando di default i NULL con zero, oppure...?
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:[RISOLTO] Valori null nelle query
« Risposta #14 il: 06 Maggio 2018, 18:50:03 »
scusate pensavo di averlo indicato  ;D, in questo modo funziona tutto alla perfezione non mi restituisce nessun errore:
Codice: [Seleziona]
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