Newsgroup: it.comp.lang.visual-basic
Titolo: UPDATE...con il puntino?

Ciao ragazzi,
DEVO eseguire una cosa del tipo:
dati.execute "UPDATE Importi SET Valore = " & variabile
Il problema è che il contenuto della variabile è un valore in euro (50,45).
il database è access e il campo è un Valuta-Euro-2 decimali. Quando tento di
eseguirla, mi da "errore nell'istruzione SQL", mentre la cosa non accade se
il valore non ha decimali...
ho provato anche una cosa del tipo (ok, ero in preda al panico!)
dati.execute "UPDATE Importi SET Valore = " & format(variabile, "#,###.##")
...con scarsi risultati...
aiuto!
--
Starla. SP.

 dati.execute "UPDATE Importi SET Valore = " & variabile
In tutte le istruzioni SQL devi usare il puntino come separatore dei
decimali, e nulla come separatore delle migliaia. Alcuni DB permettono di
usare gli apici per delimitare il valore numerico, interpretando come
decimale tutto quello che rimane dopo un punto o una virgola, ma non mi
ricordo in quali occasioni succede questo (era comunque una sorgente ODBC
passthrough).
L'unica maniera intelligente per risolvere questi problemi è quella di farsi
delle funzioni per la gestione dei valori numerici con virgola, così come
dovresti aver già fatto per le stringhe (doppi apici e simboli strani), date
(ogni DB ha i proprio formato), valori booleani True o False (0, 1, -1,
ecc.), e qualsiasi altra tipologia di dato.
E' passato un po' di tempo dall'ultima volta che mi sono preoccupato di
queste cose (circa 5 anni), perchè poi mi sono creato un'interfaccia tra
programma e dati, con tutti i pro e contro di questa cosa ovviamente.
Michele
--
Per l'e-mail togli "xxx".
Home page: 
http://spazioweb.inwind.it/fochinet



"UPDATE Importi SET Valore=" & Replace(variabile,",",".")
Ciao

 programma e dati, con tutti i pro e contro di questa cosa ovviamente.
Come te la sei studiata l'interfaccia?
Vorrei farmene una anche io, hai qualche consiglio da darmi su come
iniziare?

 Come te la sei studiata l'interfaccia?
E' una DLL fatta sempre in VB che recupera i dati al posto delle classiche
DAO, ADO, RDO, ecc.
In pratica io scelgo il tipo di database (Access, Oracle, SQLServer, ...) e
poi chiedo di recuperare un certo insieme di dati (da query) o di fare
operazioni come UPDATE, INSERT, ecc. Una delle cose che e' rimasta
incompiute e' quella di utilizzare il protocollo migliore per la
comunicazione con i vari database, in modo da velocizzare il piu' possibile
gli accessi (ma questo richiede tempo che, purtroppo, ora manca). Per darti
un'idea dell'integrazione con il programma, nelle Reference compare solo
questa e non DAO/RDO/ADO.
Tutti i parametri sono passati separatamente tramite un array di variant
opzionale, e per ciascuno viene automaticamente recuperata la tipologia
(byte, longint, data, boolean, string, ecc). In base a tale proprieta' e al
tipo di database, il valore del parametro viene convertito nel formato
opportuno. In questo modo non mi devo preoccupare di raddoppiare gli apici,
di formattare le date, dei separatori per i decimali ed altre cose simili.
Ho in programma di separare questa interfaccia dal resto dell'applicazione,
in modo da usarla ovunque senza troppe modifiche e per snellire la
procedura. Visto il tempo che ho a disposizione, non ho idea di quando possa
terminarla pero'.
Se hai altre domande posso risponderti via mail, cosi' non corriamo il
rischio di andare OT.


grazie giovanni, in effetti mi serviva una cosa rapida, anche se
effettivamente farsi la propria dll è la cosa migliore.
(io manco conoscevo l'esistenza della funzione replace, maròòò sò lamer).
Starla.
--


 rischio di andare OT.
Afascinante....davvero, ma visto che di dll non ci capisco una mazza,
potrebbe essere possibile sviluppare una cosa analoga in un modulo?
Davide

 potrebbe essere possibile sviluppare una cosa analoga in un modulo?
In linea teorica si, ma con notevoli limitazioni. Alcuni problemi che mi
vengono in mente sono:
1) Devi per forza conoscere tutti i nomi delle funzioni/proc (quindi nessun
aiuto dall'IDE, però se usi delle classi ancora ci siamo)
2) Non puoi sfruttare la gerarchia delle varie componenti (Recordset dentro
Database, ecc.) Anche qui, con le classi qualcosina si fa
3) Devi comunque referenziare tutte le varie DAO/RDO/ADO, quindi siamo da
capo
4) Ogni volta che fai il debug dell'applicazione, passi step by step anche
da queste funzioni/procedure, che non hanno bisogno di essere debuggate
(=perdita di tempo inutile)
5) Devi mantenere il codice sorgente sempre allineato, visto che ogni volta
compili sempre tutto (se hai più applicazioni la cosa diventa un po'
scomoda)
6) Spreco di spazio per ciascuna applicazione, perchè ognuna avrà dentro di
se la gestione di questa interfaccia (ok, si parla di pochi kb....)
Non che non sia fattibile, ma si perde gran parte dei vantaggi. Per iniziare
comunque va bene: infatti io avevo fatto cosi' e poi, visto che funzionava
bene, decisi di staccarlo in un componente separato da riutilizzare in altri
programmi. Ora devo sistemare alcune cosette, visto che all'epoca non era
prevista la connessione ADO.
