Variabile Decimal su MySql

di il
7 risposte

Variabile Decimal su MySql

Devo popolare una base dati MySql tramite Access.
Il problema viene fuori nell'inserimento di dati in campi MySql di tipo Decimal.
L'origine del dato è contenuto in variabili stringa.
Ho provato con una variabile Variant e convertendo al momento dell'inserimento con CDec.
Al momento dell'Update va in errore.

Varie prove con altri tipi di dati.
Esiste una soluzione?

7 Risposte

  • Re: Variabile Decimal su MySql

    Che tipo di errore ti da?
    Ora dico la prima soluzione che mi è venuta in mente, ma sicuramente è una castroneria.
    Esporti la tabella acces, in excel o altro formato.
    Poi con la procedura guidata, importi tutto in access, scegliendo manualmente i tipi di dato per ogni campo.
    Poi riprovi ad assegnarli a mysql
  • Re: Variabile Decimal su MySql

    Difficile comprendere il problema, occorre circoscrive le casistiche.
    Nelle mie impostazioni ho scelto questo formato Decimal per tutti i campi di tipo valuta ovvero 17 cifre in totale di cui 4 decimali.
    Tipo di dato in MySql : Decimal (17,4)
    Tipo di dato visto in Access tramite ODBC : Decimal (17,4)
    Se dalla vista tabellare di Access provi ad inserire/modificare direttamente il campo Decimal tutto funziona?
    Se inserisci più cifre decimali di quelle previste (nel caso di specie > di 4 cifre) ottieni un errore, un troncamento o che altro?
    Quando trasformi da stringa in decimal sei sicuro di NON superare i limiti del campo (n° max di cifre, n° max di cifre decimali)?
  • Re: Variabile Decimal su MySql

    Max.riservo.
    O forse, trattandosi di un campo testo, convertendolo in decimale, non riconosce il separatore virgola usato in europa e punto usato nel formato americano.
    Oggi sono un po polemico.
    Perché quando dite: da errore, non indicate il tipo di errore?
    Access ha migliaia di messaggi di errore. Come facciamo a dare consigli se non sappiamo di cosa si parla?
  • Re: Variabile Decimal su MySql

    fratac ha scritto:


    Max.riservo.
    O forse, trattandosi di un campo testo, convertendolo in decimale, non riconosce il separatore virgola usato in europa e punto usato nel formato americano.
    Potrebbe essere un'altra possibilità anche se mi pare di ricordare che in questo specifico caso (punto vs virgola) la funzione Cdbl dovrebbe semplicemente convertire la parte intera ignorando la parte decimale (ma potrei sbagliarmi).

    Attendiamo info più esplicative dall'OP ... e come giustamente chiedi tu che ci dica anche che errore rileva.
  • Re: Variabile Decimal su MySql

    Grazie a tutti
    Leggendo i post ho trovato due errori.
    Il primo era nella definizione del campo Mysql come decimal(10,2), mentre i decimali presenti possono essere maggiori. Ridefinito come decimal(10,5).
    Secondo: erroneamente ho convertito tutti i separatori decimali da virgola a punto. Invertita conversione. Il campo origine è stringa, con valori inseriti a mano e non controllati.

    Adesso mi rimane il problema di aggiornare MySql.
    Ho provato ad aggiornare con variabile stringa, single, double e currency.
    Il codice:
    RecListino.Edit
    RecListino.Fields("Prezzo") = wPrezzo
    RecListino.Update

    Dei record vengono aggiornati. Altri vanno in errore, molto famoso 3197 "il motore di database di microsoft access ha interrotto l'elaborazione. Un altro utente..."
  • Re: Variabile Decimal su MySql

    Pensionato ha scritto:


    Il primo era nella definizione del campo Mysql come decimal(10,2), mentre i decimali presenti possono essere maggiori. Ridefinito come decimal(10,5).
    Bene ... in parte.
    Quante cifre intere ti servono?
    Realmente ti servono 5 cifre decimali? Può essere anche se in genere con 4 cifre dovresti essere abbastanza al sicuro.
    Ti consiglio di valutare l'occupazione del campo Decimal in funzione delle cifre totali in modo da utilizzare la capacità massima disponibile (in funzione dei byte occupati dal campo).

    Pensionato ha scritto:


    Secondo: erroneamente ho convertito tutti i separatori decimali da virgola a punto. Invertita conversione. Il campo origine è stringa, con valori inseriti a mano e non controllati.
    Se non mi sono rincitrullito i valori numerici con decimali vanno assegnati con il punto (e non con la virgola).
    Indica, se vuoi, campo di partenza, campo di arrivo e modalità di conversione da stringa a numero

    Pensionato ha scritto:


    Dei record vengono aggiornati. Altri vanno in errore, molto famoso 3197 "il motore di database di microsoft access ha interrotto l'elaborazione. Un altro utente..."
    Quelli aggiornati evidentemente sono corretti anche formalmente (ovvero sono numeri, le cifre intere NON superano il max consentito così come le cifre decimali).
    L'errore della (possibile) modifica contemporanea dello stesso record (anche quando sei l'unico ad usare il DB) può essere determinato da diverse casistiche, in genere riconducibili ad errori di programmazione e/o a sottovalutazione di comportamenti del DBMS diversi da quello che si pensa.
    Della serie :
    - potresti aver aperto più recordset sulla stessa tabella/query
    - potresti essere dentro una transazione pendente
    - potresti aver aperto il recordset in qualche modalità di aggiornamento più critica da gestire
    - DAO oppure ADO
    - potresti aver utilizzato recordset disconnessi
    - potresti avere dei trigger lato DBMS
    - potresti ... chissà cos'altro

    Più info/codice fornisci più hai speranza che ti si possa aiutare.

    Per il codice sei pregato di inserirlo dentro l'apposito tag CODE (il pulsante </> )
  • Re: Variabile Decimal su MySql

    Sembra risolto.
    Mi è stato chiesto
    Quante cifre intere ti servono?
    Realmente ti servono 5 cifre decimali? Può essere anche se in genere con 4 cifre dovresti essere abbastanza al sicuro.
    Ti consiglio di valutare l'occupazione del campo Decimal in funzione delle cifre totali in modo da utilizzare la capacità massima disponibile (in funzione dei byte occupati dal campo).
    Ho esagerato a 5 per essere pronto a qualsiasi evenienza. Le cifre totali sono più che sufficiente, la parte intera non supera mai l'unità o quanto meno le decine.
    Se non mi sono rincitrullito i valori numerici con decimali vanno assegnati con il punto (e non con la virgola).
    Indica, se vuoi, campo di partenza, campo di arrivo e modalità di conversione da stringa a numero
    Pensavo anch'io di essermi rincitrullito. Chi ha revisionato la struttura della base dati con il charset europeo. Quindi virgola.
    Quelli aggiornati evidentemente sono corretti anche formalmente (ovvero sono numeri, le cifre intere NON superano il max consentito così come le cifre decimali).
    Il problema si aveva quando si cercava di aggiornare con un valore uguale a quello presente. L'errore stava nel controllo di tra i due valori fatto tra una decimale e una stringa, mea culpa. Convertita la variabile, controllo eseguito correttamente e aggiornamento esatto.

    Penso di essere stato chiaro nelle spiegazioni, in caso contrario chiedete.
    Grazie a tutti e specialmente all'ostinato max.riservo
Devi accedere o registrarti per scrivere nel forum
7 risposte