Newsgroup: it.comp.lang.delphi
Titolo: Update di campi float su DBExpress+MySql

ciao
come da oggetto ho un campo float su un ClientDataSet
che attivo con una query parametrizzata sulla chiave primaria,
per ottenere sempre un unico record, ed ho collegato un datasource
e come al solito dei componenti DBAware
in modifica eseguo dei cambiamenti dai componenti d'interfaccia,
do il post al clientDataSet e tutto va bene ... appena eseguo
With cdsCustomers do
  If ChangeCount>0 Then
    applayChange(0);
Mi restituisce una eccezione con messaggio
"Record not found or changed by another user"
allora ho connesso un SQLMonitor ed ho trovato in
questa parte di Log il problema
====================
SET AUTOCOMMIT=0
MySQL - mysql_real_query
BEGIN WORK
MySQL - mysql_real_query
MySQL - mysql_escape_string
MySQL - mysql_escape_string
MySQL - mysql_escape_string
MySQL - mysql_escape_string
MySQL - mysql_escape_string
MySQL - mysql_escape_string
MySQL - mysql_escape_string
update Customers  set
 catalogDiscount = '5.540000'
where
 idCustomer = '2' and
 code = 'AAA-002-03' and
 catalogDiscount = '5.550000'
MySQL - mysql_real_query
MySQL - mysql_field_count
MySQL - mysql_affected_rows
ROLLBACK
MySQL - mysql_real_query
SET AUTOCOMMIT=1
===================
altre tabelle modificate nello stesso identico modo
vanno che è una bellezza, l'unica differenza è che in questa tabella
c'è il campo Float catalogDiscount, come si nota dall'SQL di
update scritto dai componenti di connessione.
nel DB (MySQL) il campo è definito come Float(3,2) dove
3 sta per la dimensione della parte intera e 2 per la decimale.
mentre dall'SQL vedo che i componenti qui passano,
lo stesso numero, ma in un'altro formato cioè 1 Intero(che magari conta poco)
ma 6 decimali... :s
il campo nella lista fieldsDef del clietDataSet è definito come ftFloat
Qualcuno ha mai avuto questo genere di problema?
o ha qualche bel consiglio da darmi per uscirne?
	Ciao
	MassimoB
 
	------------------------[OT]------------------------
	"La vera autenticita' non sta nell'essere come si e',
	ma nel riuscire a somigliare il piu' possibile
	al sogno che si ha di se stessi".
	Di Huma Rojo in "Tutto su mia madre".
	-----------------------------------------------------

il campo nella lista fieldsDef del clietDataSet è definito come ftFloat
effettivamente il problema della query di update è che nella clausola
Where il filtro catalogDiscount = '5.550000' torna sempre false e quindi
non seleziona il record da aggiornare e mi da un errore di
riconciliazione dei dati sul DB
o definitivamente individuato l'errore in quanto detto eseguendo
la stessa query di update dalla console e fallisce ancora,
poi o provato a usare il Like invece dell'uguale come operatore
catalogDiscount LIKE '5.55' e va tutto liscio
per il momento ho messo una "pezza" impostando sul dataset
le ProviderFlags del campo corrispondente a [pfInUpdate]
solamente e non [pfInUpdate,pfInWhere] in maniera che,
il componente DataSet, non me lo scriva nella clausola WHERE
dell'SQL.
ma in questa maniera mi gioco la posibilità di intercettare
un problema di Riconciliazione dovuto 
alle modifiche di altri utenti :(
il chè non è il "top"...
come posso far si che scriva nella clausola 
where una ricerca corretta?
	Ciao
	MassimoB
 
	------------------------P.S.[OT]--------------------
