[Risolto] Sintassi criterio Where, comando Update SQL

di il
13 risposte

[Risolto] Sintassi criterio Where, comando Update SQL

Buonasera,
Grazie mille, questo forum è fonte di costanti spunti interessanti.

Mi trovo in difficoltà (causa ignoranza) nella stesura di un comando UPDATE con criterio WHERE; Il mio problema è sul criterio, premesso che funziona se inserisco un parametro "statico" come da esempio, non riesco a farlo funzionare dando un parametro "dinamico" ad esempio ciò che è selezionato su una ComboBox della maschera stessa.
Stiamo parlando di un codice che è inserito nell'evento Click di un Pulsante in una MascheraSingola.

Su una maschera ho una ComboBox (cboIDTab), e altre TextBox in cui inserisco i dati che mi servono (txtNome, txtSpesa ecc.)
Funzionante ?

Dim SpesaTot As Currency
SpesaTot = CCur(Me.txtSpesaTot)
'Dim Tab As String
'Tab = Me.cboIDTab
Dim strSQL As String
strSQL = "UPDATE Tabella1 SET [Spesa] = [Spesa]-[Spesa]+(" & Replace(SpesaTot, ",", ".") & ") WHERE (IDTab= '123')"
Vorrei quindi sostituire il "CriterioStatico" con ciò che viene selezionato dalla "cboIDTab"... ci sbatto la testa da giorni e alla fine sono giunto alla conclusione che potrebbe essere forse un problema di sintassi.
Me la date una spintarella?

p.s. se per caso vedete qualche cialtroneria dite pure...ben vengano consigli.

Grazie mille
Ciao

13 Risposte

  • Re: [Risolto] Sintassi criterio Where, comando Update SQL

    Giuro che non ho capito molto... ma questa cosa...:
    strSQL = "UPDATE Tabella1 SET [Spesa] = [Spesa]-[Spesa]+(" & Replace(SpesaTot, ",", ".") & ") WHERE (IDTab= '123')"
    Fare [Spesa]-[Spesa] non serve a nulla darà sempre ZERO.... e Spesatot da dove salta fuori...? (lo vedo che è la txtBox... ma razionalmente cosa rappresenta...?)
    Per convertire un Numero meglio usare STR(valore) almeno utilizza il separatore decimale di Sistema e non quello che tu forzi in quel modo.
  • Re: [Risolto] Sintassi criterio Where, comando Update SQL

    Biagio91 ha scritto:


    Me la date una spintarella?
    Dipende da dove sei. Sei sull'orlo del baratro? La spintarella è meglio no darla e nemmeno "fare un passo avanti". Fine della sciocchezza.
    Ehm... a cosa serve mettere questa cosa? (già chiesto da @Alex)
    =[Spesa]-[Spesa]+...
    Non si capisce però quali sono le parti statiche che vorresti sostituire. In generale, quello che è variabile va fuori dal doppio apice ma detto così è troppo generico
  • Re: [Risolto] Sintassi criterio Where, comando Update SQL

    *EDIT, eliminati quote *
    Grazie.
    Urca....ok beh...premettendo che alla fine tramite un fortuito refuso ho capito dove sbagliavo, e la soluzione trovata al dilemma iniziale è stata...
    Dim SpesaTot As Currency
    SpesaTot = CCur(Me.txtSpesaTot)
    'Dim Tab As String
    'Tab = Me.cboIDTab
    Dim strSQL As String
    strSQL = "UPDATE Tabella1 SET [Spesa] = [Spesa]-[Spesa]+(" & Replace(SpesaTot, ",", ".") & ") WHERE (IDTab='" & Me.cboIDTab & "')"
    CurrentDb.Execute strSQL
    Ora però mi dispiacerebbe lasciare migliorabile le parti che avete detto;

    Spesatot è una TextBox in cui c'è come origine dati la somma di alcuni campi provenienti dalla tabella associata es. ParzArticolo1+ParzArticolo2 ecc.
    strSQL = "UPDATE Tabella1 SET [Spesa] = [Spesa]-[Spesa]+(" & Replace(SpesaTot, ",", ".") & ") WHERE (IDTab= '123')"
    Quest'altra parte era stata inserita proprio per "azzerare" un eventuale dato già presente (con il parametro Where fisso avevo fatto varie prove e quindi per controllare di star facendo realmente l'Update del campo corretto ho aggiunto questa parte per evitare di andare ad azzerare manualmente ogni record usato come bozza) confermate che è strano/assurdo lasciarlo? Dovrei definire piuttosto [Spesa] = 0 +...????

    Philcattivocarattere ha scritto:


    Non si capisce però quali sono le parti statiche che vorresti sostituire. In generale, quello che è variabile va fuori dal doppio apice ma detto così è troppo generico
    Causa ignoranza, errori di refusi ecc.. ho odiato veramente quei due apici

    @Alex ha scritto:


    Per convertire un Numero meglio usare STR(valore) almeno utilizza il separatore decimale di Sistema e non quello che tu forzi in quel modo.
    Alex deduco sbagliato a pensare che basti fare:
    Dim SpesaTot As String
    SpesaTot = Me.txtSpesaTot
    
    oppure dovrei proprio scrivere
    Dim SpesaTot As String
    SpesaTot = Str (Me.txtSpesaTot)
    Grazie mille
  • Re: [Risolto] Sintassi criterio Where, comando Update SQL

    Non quotare quello che non serve.... soprattutto se non aiuta a dare dettagli.

    Non ho capito cosa non ti è chiaro delle osservazioni puramente matematiche fatte.
  • Re: [Risolto] Sintassi criterio Where, comando Update SQL

    Se per utilizzare il metodo Srt per la conversione, e renderla più pratica, devo impostare SpesaTot As String oppure As Currency; e non mi è molto chiaro se devo usare la sintassi dell'opzione 1 o della 2

    Grazie mille
  • Re: [Risolto] Sintassi criterio Where, comando Update SQL

    Prova a ragionare... anche leggendo cosa fa la funzione STR(..)
  • Re: [Risolto] Sintassi criterio Where, comando Update SQL

    Ok, visto che Str restituisce una stringa convertendo un valore numerico, deduco che la corretta sia la opzione 2, ovvero:
    Dim SpesaTot As String
    SpesaTot = Str (Me.txtSpesaTot)
    Grazie mille per le dritte
  • Re: [Risolto] Sintassi criterio Where, comando Update SQL

    Biagio91 ha scritto:


    ...Dovrei definire piuttosto [Spesa] = 0 +...????
    A costo di riscrivere quanto credo @Alex intendesse con

    @Alex ha scritto:


    Non ho capito cosa non ti è chiaro delle osservazioni puramente matematiche fatte.
    a cosa serve quello [0 + .... ] ?
  • Re: [Risolto] Sintassi criterio Where, comando Update SQL

    Ciao Phil, a nulla, infatti l'ho levato e ho lasciato solamente = (" & Replace(SpesaTot, ",", ".") & ") WHERE...
    anzi forse avrei potuto fare casini se successivamente avessi ampliato la formula, dando luogo ad eventuali cambi di segno ecc..

    Sto utilizzando in alcune formule la funzione che mi ha suggerito @Alex per la conversione, per Str, poi ho scoperto la CLng, ora volevo usare la CDec (con valore della Scala pari a 2), ma non riesco a dimensionare la variabile come
    Dim Numero As Decimal 
    , mi da errore, eppure dalla guida online di microsoft leggo che si fa così, ma effettivamente non la trovo come opzione tra le scelte del completamento automatico. Usare la CLng non mi va bene, perché mi serve registrare i decimali, almeno i primi 2. Come posso muovermi?
  • Re: [Risolto] Sintassi criterio Where, comando Update SQL

    Biagio91 ha scritto:


    Ciao Phil, a nulla, infatti l'ho levato
    ma dopo, perché nella parte che avevi pubblicato c'era ancora.

    Biagio91 ha scritto:


    ma non riesco a dimensionare la variabile come
    Dim Numero As Decimal 
    , mi da errore, eppure dalla guida online di microsoft leggo che si fa così
    Quale guida? dove l'hai letto?
    Attento che vba non è vb.net.
    Vb.Net = https://docs.microsoft.com/it-it/dotnet/visual-basic/language-reference/data-types/decimal-data-type
    VBA =https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/decimal-data-type
    che testualmente dice:
    At this time, the Decimal data type can only be used within a Variant; that is, [U]you cannot declare a variable to be of type Decimal. You can, however, create a Variant whose subtype is Decimal by using the CDec function.
    Il Decimal, sottotipo di Variant, si usa quando serve una precisione estrema nella gestione dei decimali, molti decimali.
    Quand'anche non fosse un valore monetario (ma se parli di spesa dovrebbe esserlo), potrebbe bastarti il Currency, che non soffre degli "errori di calcolo" dei tipi a vigola mobile Single e Double. Però è evidente che se la precisione deve andare oltre le 4 cifre decimali e ti servono calcoli perfetti, il Decimal è inevitabile. Fai le tue valutazioni.
  • Re: [Risolto] Sintassi criterio Where, comando Update SQL

    Confermo che devi usare Currency.
  • Re: [Risolto] Sintassi criterio Where, comando Update SQL

    Grazie Philcattivocarattere,
    Grazie @Alex,
    Mi serve per evitare di inserire campi calcolati nella tabella di origine, usare quindi una Maschera1 con alcuni campi non associati, per calcolare il rapporto tra MassaPesata (Non associato; Numero con max 2 decimali) e Densità (Non Associato; Numero con max 2 decimali), e quindi trovare il volume(Non associato, ml) della massa pesata. In altre TextBox non associate della stessa maschera commuto i Grammi in Kg e i Millilitri in Litri, e calcolo a partire dalla SpesaTotale la SpesaPerLitro e la SpesaPerKg. In questo frangente nei risultati dei calcoli (Kg, ml, Litri, SpesaKg e SpesaLitro) mi compaiono una caterba di decimali nonostante il Formato sia impostato su Standard e con 2 decimali.
    Quindi andando ad aggiornare la tabella di destinazione dell'UPDATE (dell'esempio in questione) Tab1 con i campi che mi interessano, quando li aggiorno si salvano come InteroLungo (visto che li sto convertendo con CLng) e non compaiono i decimali (volendo scriverci per l'appunto dei numeri con decimali, i campi sono impostati come decimale, scala 2, decimali 2; ).

    Apro quindi una Maschera2 (Correzione) per modificare qualcuno dei parametri, ad esempio, si vuole ricalcolare la spesa per Litro o per Kilo in base ad una Densità e/o SpesaTotale diversa, insomma...correggere i dati già salvati; la Maschera2 con i campi associati alla Tab1 ovviamente mostra i numeri senza decimali e i risultati non sono veritieri. Per questo cercavo il modo di salvarli in Tab1 da Maschera1 con UPDATE inserendoli direttamente come valori decimali;

    Philcattivocarattere ha scritto:


    Quale guida? dove l'hai letto?
    Attento che vba non è vb.net.
    Vb.Net = https://docs.microsoft.com/it-it/dotne ... -data-type
    VBA =https://docs.microsoft.com/en-us/offic ... -data-type
    L'avevo letto proprio nel primo link che hai messo, e avevo consultato pure il secondo...La parte evidenziata delle note mi era sfuggita caspita
    Grazie mille per la dritta. Sarei andato avanti giorni prima di arrivarci. E forse avrei usato un formato che non mi sarebbe servito come valore aggiunto, in quanto non necessito di un dato con una tale precisione, mi bastano i primi 2 decimali.

    Uso allora Currency anche per tutti questi altri valori e queste altre stringhe, con il Replace al seguito
    Vi tengo aggiornati.

    Ovviamente se per caso vi sembra che io stia facendo una castronata o che potrei usare metodi più consoni ben vengano consigli, dritte e suggerimenti.

    Grazie ancora
    Ciao
  • Re: [Risolto] Sintassi criterio Where, comando Update SQL

    Perfetto, funziona alla grande!!!

    Grazie ancora mille per il supporto.
Devi accedere o registrarti per scrivere nel forum
13 risposte