Newsgroup: it.comp.lang.vo-clipper
Titolo: MySql e campi carattere

Ciao a tutti.
In un campo di tipo carattere(3) di un file dbf, salvo una stringa allineata 
a destra es. ("  3"),
(" 24") ecc.
Trasportato l'archivio in MySql, modificando opportunamente quanto 
necessario, quando salvo la stringa allineata a destra, me la ritrovo 
comunque allineata a sinistra. Lavoro con VO 2.7b e la libreria demo 
DeVoxMySql di Danilo Giuliani.
Es. oArchivio := MioArchivio{} //MySqlTable o MySqlSelect
        oArchivio:SetOrderBy("Codice")
        oArchivio:SetWhere([Codice="]+cVar+["])
        oArchivio:Execute()
Quando salvo
        oArchivio:Codice1 := self:cCampo ("  3")
        oArchivio:Commit()
        oArchivio:Close()
Il codice registrato è ("3  ).
Lo stesso comportamento si ha modificando il campo dal programma 
SqlManager41.
Se invece eseguo una EseguiSql([Update archivio set miocampo="  3" where 
<codizione>]) funziona tutto ed il valore salvato è ("  3").
E' un problema di MySqlTable o sbaglio qualcosa io?
Qualche idea?
Ciao. Enzo. 

Ciao.
Aggiornamento.
Se il campo è di tipo char(3) o varchar(3) si presenta il problema 
descritto, ma se cambio tipo di dato, per esempio TinyText o Text, funziona 
tutto regolarmente (ma con spreco di dimensioni in quanto vi sono 30 campi 
con queste caratteristiche) o comunque l'impegno di memoria è funzione della 
lunghezza della stringa memorizzata (L+1 come descritto) e quindi sempre 4 
bytes anche se tinytext?
Altra precisazione. Cambio la struttura dell'archivio, da char(3) a 
TinyText, ma non cambio il fieldspec della MySqlTable che resta sempre di 
tipo character li lunghezza 3.
Questo fatto mi sta bloccando. Dove sto sbagliando? e perchè utilizzando per 
salvare la update tutto funziona anche con campo di tipo char(3)?.
Aiutatemi.
Ciao Enzo.

 Usa il tradizionale 003 che mi pare tra l'altro più corretto.
Dovrei cambiare le abitudini di chi già possiede il programma (12 anni, 
prima in clipper e poi in VO) e digita il codice direttamente.
E poi perchè se eseguo una EseguiSql([update MioFile set Campo1="  3", 
campo2="  4" .....  where ...])  funziona allineandomi il valore a destra? 
Non capisco la differenza di comportamento.
Grazie e ciao. Enzo. 

 ha scritto nel messaggio 
news:U0ord.440547$35.19...@news4.tin.it...


 Es: 2.01 il prossimo record può essere 2.02?
Lo puoi definire float ma sarà sempre 1.00000 2.00000, quindi ........
Danilo 

 ha scritto nel messaggio 
news:ihJrd.246787$b5.12...@news3.tin.it...

Perchè nel secondo caso esegui un comando direttamente, e quindi MySql 
demanda all'utente l'onere di preoccuparsi di errori, se esegui :
update clienti set ragsoc =  "Ristorante "Il Caminetto" di Pinco Pallino" 
oppure update clienti set ragsoc =  'Ristorante 'Il Caminetto' di Pinco 
Pallino'
dà errore.
Trasforma allora il codice in numero, è molto più comodo in quanto potresti 
usare un campo autoincrement per aggiornare il codice, quindi ti sgravi 
della preoccupazione di tenere memoria dei numeri immessi, e soprattutto 
pesa di meno
Danilo 

 Es: 2.01 il prossimo record può essere 2.02?
Al limite lo dividi per 100 prima di utilizzarlo.
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg


Grazie Danilo. Peccati veniali o errori di gioventù (si fa per dire) in Dbf 
diventano seri in MySql. Sarò costretto a modificare alcune tabelle e le 
relative ricerche. Un'ultima cosa sull'autoincrement. Può essere di tipo 
float? e se si si può incrementare il secondo decimale?
Es: 2.01 il prossimo record può essere 2.02?
Grazie e ciao. Enzo