Decimali in una stringa

di il
7 risposte

Decimali in una stringa


    Public Sub rigenera()
        query = "Select data, proprietario,importo From Entrate where id_ana=" & id_condominio & " and anno=" & id_anno & " order by proprietario"
        cmd = New OleDbCommand(query, cnn)
        cnn.Open()
        dr = cmd.ExecuteReader
        While dr.Read
            Dim vdata As String = MonthName(Month(dr(0)))
            Dim vproprietario As String = dr(1)
            Dim vimporto As Double = dr(2)
            query2 = "SELECT condomino, id FROM proprietari WHERE condomino='" & vproprietario & "' and id_ana=" & id_condominio & " AND anno=" & id_anno & " ORDER BY condomino"
            cmdproprietari = New OleDbCommand(query2, cnn)
            drproprietari = cmdproprietari.ExecuteReader
            If drproprietari.HasRows Then
                drproprietari.Read()
                Dim vId As String = drproprietari(1)
                drproprietari.Close()
                query2 = "Update proprietari set " & vdata & "=" & vdata & "+" & vimporto & " where id=" & vId
                cmdproprietari = New OleDbCommand(query2, cnn)
                cmdproprietari.ExecuteNonQuery()
            End If
        End While
        cnn.Close()
        MsgBox("Fine lavoro")
End sub
Le linee che mi danno errore sono di sintassi nella query UPDATE sono le seguenti:

                query2 = "Update proprietari set " & vdata & "=" & vdata & "+" & vimporto & " where id=" & vId
                cmdproprietari = New OleDbCommand(query2, cnn)
                cmdproprietari.ExecuteNonQuery().
In sintesi,l'errore è dovuto al fatto che vimporto può contenere valore anche decimali.
L'errore non è più rilevato da Access se sostituisco le "," con il punto "."
Ho provato ad usare Replace su query2 ,ma la query continua a contenere il valore decimale con la virgola.
L'uso di arrotondamenti non è possibile,perchè il calcolo deve essere preciso.

7 Risposte

  • Re: Decimali in una stringa

    Come hai usato la replace?

    Comunque dovresti usare i Parametri per evitare questi problemi
  • Re: Decimali in una stringa

    Grazie,Oregon.
    1)vimporto=replace(vimporto,".",",").
    Però,se poi leggo la query che andrà in esecuzione trovo "Update proprietari set gennaio=gennaio+200,2 where id=3"
    
    2)query2 = "Update proprietari set " & vdata & "=" & vdata & "+ @vimporto"
                    cmdproprietari = New OleDbCommand(query2, cnn)
                    cmd.Parameters.Add(New OleDbParameter("@vimporto", OleDbType.Double)).Value = vimporto
                    cmdproprietari.ExecuteNonQuery()
                    
    questa la query che andrà in esecuzione : query2="Update proprietari set giugno=giugno+ @vimporto"
    L'esito è però un errore :Nessun valore specificato per alcuni parametri necessari.
  • Re: Decimali in una stringa

    Innanzitutto si dovrebbe evitare le conversioni implicite, e usare quindi vimporto.ToString
    Comunque ti consiglio la conversione esplicita specificando la "culture"
    
    query2 = "Update proprietari set " & vdata & "=" & vdata & "+" & vimporto.ToString(Globalization.CultureInfo.InvariantCulture) & " where id=" & vId
    
    Anche la variabile "data" che hai messo in questa query dovrebbe avere la conversione esplicita, se la lasci così vedrai quanti problemi avrai
    vimporto=replace(vimporto,".",",")
    ORRIBILE !!!
    prendi la variabile vimporto, la converti in stringa, sostituisci il punto con la virgola (e invece dovevi fare il contrario) e poi la riconverti in double

    Nelle opzioni del VB.NET ricordati che DEVI sempre abilitare l'opzione "Option Explicit"
  • Re: Decimali in una stringa

    Jan ha scritto:


    2)query2 = "Update proprietari set " & vdata & "=" & vdata & "+ @vimporto"
    cmdproprietari = New OleDbCommand(query2, cnn)
    cmd.Parameters.Add(New OleDbParameter("@vimporto", OleDbType.Double)).Value = vimporto
    cmdproprietari.ExecuteNonQuery()
    [/code]
    Prepari la cmdproprietari e poi fai la Parameters.Add su cmd?
  • Re: Decimali in una stringa

    SirJo ha scritto:


    Nelle opzioni del VB.NET ricordati che DEVI sempre abilitare l'opzione "Option Explicit"
    in verità "Option Explicit On" in VB.Net è già attivo di default
    invece "Option Strict On", no.

    @Jan
    se nei tuoi programmi in Vb.Net metti all'inizio:
    
    Option Strict On
    Option Explicit On
    
    Imparerai molteplici cose sulle dichiarazioni, conversioni esplicite e associazioni tardive tra tipi di dati.
    Queste conoscenze ti aiuteranno a padroneggiare le conversioni esplicite, indispensabili per scrivere codice che faccia sempre quello che ti prefiggi, infatti in C# le conversioni implicite non esistono e quando scriverai codice in questo linguaggio sarai pronto a padroneggiare le conversioni di tipo che con le due paroline magiche in VB.Net, diventano come in C#.

    In sintesi, le conversioni implicite che il compilatore VB.Net fa al posto tuo, ti agevolano ma allo stesso tempo ti nascondono una parte importante della programmazione.
  • Re: Decimali in una stringa

    Nel mentre ringrazio tutti per le critiche,le osservazioni al mio codice, critiche che terrò da subito nella dovuta attenzione,devo però dire GRAZIE ad Oregon , che ha visto il mio gravissimo errore nel seguente codice
    
    2)query2 = "Update proprietari set " & vdata & "=" & vdata & "+ @vimporto"
    cmdproprietari = New OleDbCommand(query2, cnn)
    cmd.Parameters.Add(New OleDbParameter("@vimporto", OleDbType.Double)).Value = vimporto
    cmdproprietari.ExecuteNonQuery()
    
    .

    Ho detto decine di volte quel codice per capire perchè di dava errore e non mi sono accorto di aver scritto cmd.Parameter e NON cmdProprietari.Parameters.

    Grazie a tutti.Ho così risolto il mio problema.
  • Re: Decimali in una stringa

    Rubik ha scritto:


    SirJo ha scritto:


    Nelle opzioni del VB.NET ricordati che DEVI sempre abilitare l'opzione "Option Explicit"
    in verità "Option Explicit On" in VB.Net è già attivo di default
    invece "Option Strict On", no.
    Ops mi è scivolato un Explicit al posto di Strict
Devi accedere o registrarti per scrivere nel forum
7 risposte