Newsgroup: it.comp.lang.delphi
Titolo: Update SQL che non funziona

Ciao a tutti,
avrei un problema nel fare l'UPDATE SQL di un record presente in un DB
MySQL.
Il problema si pone solo su una maschera, tutte le altre sembrerebbero
funzionare perfettamente.
In pratica cosa succede? Dunque, quando effettuo l'UPDATE non ho
nessun tipo di errore e la query SQL l'ho testata direttamente nel DB
e ha funzionato alla perfezione. Una volta che esegue l'UPDATE,
recupero di nuovo tutte le info tramite una SELECT e sembra che la
modifica sia avvenuta ma andando direttamenete nel DB, non ce n'è
traccia. Infatti se chiudo il form e lo riapro, la modifica appena
eseguita risulta inesistente visualizzando ancora i dati originali.
Questo è il codice:
ZConnection1.StartTransaction;
    ZQueryRotolo.Close;
    ZQueryRotolo.SQL.Clear;
    StringaSQL := 'UPDATE magazzino_lodi.tb_rotoli SET materiale =
'''+materiale+''', descrizione = '''+DescRizioneM+''', spessore_base =
'+ReplaceText(Spb,',','.')+', sviluppo_base =
'+ReplaceText(SvilB,',','.')+', data_ordine = '''+DataOrdine+''',
data_consegna = '''+DataConsegna+''', cod_rotolo = '''+CodiceRotolo
+''', spessore_reale = '+ReplaceText(SpR,',','.')+', sviluppo_reale =
'+ReplaceText(SvilR,',','.')+', ps_base =
'+ReplaceText(FloatToStr(PsB),',','.')+', ps_reale =
'+ReplaceText(FloatToStr(PsR),',','.')+', colore = '''+Colore+''',
desccolore = '''+DescrizioneC+''', fornitore = '''+Fornitore+''',
mt_lineare = '+ReplaceText(FloatToStr(mtlineare),',','.')+', note =
'''+memoMod.Text+''', peso = '''+EditPesoMod.Text+''', DDT =
'''+EditDDTMod.Text+''', Conto = '''+Conto+''' WHERE ID =
'+IntToStr(ComboRotoloMod.KeyValue)+'';
    ZQueryRotolo.SQL.Add(StringaSQL);
    try
      ZQueryRotolo.ExecSQL;
      ZConnection1.Commit;
    except
      ZConnection1.RollBack;
      raise
    end;
    ZConnection1.StartTransaction;
    ZQueryRotolo.Close;
    ZQueryRotolo.SQL.Clear;
    ZQueryRotolo.SQL.Add('select ID, fornitore, materiale,
data_ordine, data_consegna, peso, descrizione, colore, desccolore,
spessore_base, sviluppo_base, spessore_reale, sviluppo_reale,
cod_rotolo, note, DDT from magazzino_lodi.tb_rotoli');
    try
      ZQueryRotolo.Open;
      ZConnection1.Commit;
    except
      ZConnection1.RollBack;
      raise
    end;
    if NOT ZQueryRotolo.Active then
      ZQueryRotolo.Active;
    ClientDataSet6.Close;
    ClientDataSet6.Open;
Mi sta venendo il dubbio che io stia sbagliando completamente la
logica dei componenti ma allora come mai tutte le altre maschere
funzionano e questa no? Eppure la logica tra le varie maschere è
sempre la stessa.
Sapete darmi qualche dritta? Grazie mille.

...
Ti sconsiglio vivamente di creare manualmente le query di modifica, 
innanzitutto perché non sai quale tipo di localizzazione (formati di data, 
numeri, ecc...) sarà presente sul computer di destinazione, quindi 
l'espressione *ReplaceText(Spb,',','.')* non necessariamente genera un 
valore in formato decimale corretto (ad esempio il computer potrebbe 
utilizzare la virgola come separatore decimale anziché il punto), e poi per 
una maggior leggibilità del codice e per una maggior sicurezza sul tipo di 
dati da passare ti conviene usare query parametriche ed assegnare poi i 
valori specifici ai parametri.
Infatti da quello che posso leggere la variabile Spb è di tipo String 
(mentre il formato sul DB sarà Double), e sei proprio certo che questa 
variabile con contenga un valore nullo o vuoto? In questo caso la query 
generata sarebbe:
*UPDATE magazzino_lodi.tb_rotoli SET spessore_base=, sviluppo_base =....* 
che ovviamente è sbagliata.
Saluti,
    Antonio 

On 4 Apr, 14:07, "Antonio Scarpelli"

Grazie del consiglio, cercherò di seguirlo. Per quanto riguarda il
problema del post, la query generata è sicuramente corretta perchè
l'ho visualizzata in un campo memo e inserita come stringa SQL in
MySQL e funziona perfettamente. Inoltre ho anche provato a eliminare i
valori double dalla stringa SQL mantenendo solo l'update dei primi due
campi che sono semplici stringhe e l'update non funziona ugualmente.
Nessun errore ma nemmeno nessuna modifica.

 Nessun errore ma nemmeno nessuna modifica.
Da quello che hai scritto l'unico dubbio (banale) che mi viene in mente e 
che tu stia eseguendo la query su una connessione ad un database (o server) 
diverso da quello su cui poi vai effettivamente a verificare i dati. Forse 
potrebbe essere di aiuto se tu postassi la stringa sql di update che viene 
generata per verificare l'eventuale utilizzo di apici e caratteri jolly.
Antonio