Torna indietro   Hardware Upgrade Forum > Software > Programmazione

KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo
KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo
KTC lancia il nuovo monitor gaming H27E6, un modello da 27 pollici che promette prestazioni estreme grazie al pannello Fast IPS con risoluzione 2K QHD (2560x1440). Il monitor si posiziona come una scelta cruciale per gli appassionati di eSport e i professionisti creativi, combinando una frequenza di aggiornamento di 300Hz e un tempo di risposta di 1ms con un'eccezionale fedeltà cromatica
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Realizzato da Lenovo e installato presso il Cineca di Casalecchio di Reno, Pitagora offre circa 44 PFlop/s di potenza di calcolo ed è dedicato alla simulazione della fisica del plasma e allo studio dei materiali avanzati per la fusione, integrandosi nell’ecosistema del Tecnopolo di Bologna come infrastruttura strategica finanziata da EUROfusion e gestita in collaborazione con ENEA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Rullo di lavaggio dei pavimenti abbinato a un potente motore da 28.000 Pa e a bracci esterni che si estendono: queste, e molte altre, le caratteristiche tecniche di Z60 Ultra Roller Complete, l'ultimo robot di Mova che pulisce secondo le nostre preferenze oppure lasciando far tutto alla ricca logica di intelligenza artificiale integrata
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-11-2008, 21:44   #1
jackk87
Senior Member
 
Iscritto dal: Jan 2007
Messaggi: 404
[VB6] Problema textbox su 2 pc!

Buonasera,
ho creato un programma e in un determitato form inserisco un valore in euro cioè sarebbe il prezzo...è una textbox questo valore viene salvato in un database access. se lo provo sul pc dove ciò installato visual basic se inserisco un valore come 250 o 250.50 o 250,50 non ho problemi nel primo mi inserisce 250 nei secondi 250.50. Mentre ho provato a installarlo su un'altro pc e se inserisco 250 va bene se inserisco 250.50 nel database salva 25050 mentre se inserisco 250,50 mi da errore sull'istruzione sql come mai?i due programmi sono identici. grazie
jackk87 è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2008, 10:29   #2
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da jackk87 Guarda i messaggi
Buonasera,
ho creato un programma e in un determitato form inserisco un valore in euro cioè sarebbe il prezzo...è una textbox questo valore viene salvato in un database access. se lo provo sul pc dove ciò installato visual basic se inserisco un valore come 250 o 250.50 o 250,50 non ho problemi nel primo mi inserisce 250 nei secondi 250.50. Mentre ho provato a installarlo su un'altro pc e se inserisco 250 va bene se inserisco 250.50 nel database salva 25050 mentre se inserisco 250,50 mi da errore sull'istruzione sql come mai?i due programmi sono identici. grazie
I due programmi sono identici, ma potrebbero non esserlo le versioni di Access che hai sulle 2 macchine.
Access, a seconda della versione ( intendo anche la versione di ADO ), può accettare un dato passato non proprio correttamente, interpretandolo nel modo giusto, oppure rifiutarlo.
Devi anzitutto controllare in Access se quel campo è impostato correttamente per accettare un numerico con virgola.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2008, 13:56   #3
jackk87
Senior Member
 
Iscritto dal: Jan 2007
Messaggi: 404
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
I due programmi sono identici, ma potrebbero non esserlo le versioni di Access che hai sulle 2 macchine.
Access, a seconda della versione ( intendo anche la versione di ADO ), può accettare un dato passato non proprio correttamente, interpretandolo nel modo giusto, oppure rifiutarlo.
Devi anzitutto controllare in Access se quel campo è impostato correttamente per accettare un numerico con virgola.
Avevo pensato a questo problema infatti dove ciò installato visual basic ho office 2003 mentre dove ho provato sull'altro pc ho office 2007, infatti per togliermi ogni dubbio ho provato su un'altro pc che ha office2003 ma niente ho sempre il problema.cmq il campo è un numerico con precisione doppia
jackk87 è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2008, 15:20   #4
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da jackk87 Guarda i messaggi
Avevo pensato a questo problema infatti dove ciò installato visual basic ho office 2003 mentre dove ho provato sull'altro pc ho office 2007, infatti per togliermi ogni dubbio ho provato su un'altro pc che ha office2003 ma niente ho sempre il problema.cmq il campo è un numerico con precisione doppia
Se il campo è numerico con precisone doppia allora devi fare in modo di evitare che l'utente possa scrivere "250,50".
VB6 passa i decimali con il punto.
250.50 non dovrebbe creare mai problemi.
Se inoltre nella INSERT fai riferimento diretto alla TextBox ( cosa che sarebbe sempre meglio evitare ) puoi risolvere, da così :

Codice:
    strINSERT = "INSERT INTO nomeTabella (camponumero) " & _
                "VALUES (" & Text1.Text & ")"
a così :

Codice:
    strINSERT = "INSERT INTO nomeTabella (camponumero) " & _
                "VALUES (" & Replace(Text1.Text, ",", ".") & ")"
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2008, 16:10   #5
jackk87
Senior Member
 
Iscritto dal: Jan 2007
Messaggi: 404
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Se il campo è numerico con precisone doppia allora devi fare in modo di evitare che l'utente possa scrivere "250,50".
VB6 passa i decimali con il punto.
250.50 non dovrebbe creare mai problemi.
Se inoltre nella INSERT fai riferimento diretto alla TextBox ( cosa che sarebbe sempre meglio evitare ) puoi risolvere, da così :

Codice:
    strINSERT = "INSERT INTO nomeTabella (camponumero) " & _
                "VALUES (" & Text1.Text & ")"
a così :

Codice:
    strINSERT = "INSERT INTO nomeTabella (camponumero) " & _
                "VALUES (" & Replace(Text1.Text, ",", ".") & ")"

Antonio sono d'accordo con te però io ho il problema che se l'importo lo scrivo con il punto per esempio 250.56 non mi considera proprio il punto cioè mi considera 25056 cosa che sul pc dove ho visual basic mi prende 250.56. E' questa la cosa strana infatti io alla textbox gli proibisco tutto tramite questa funzione:
Private Sub importo_KeyPress(KeyAscii As Integer)
'Controllo per non far inserire caratteri errati
Select Case KeyAscii
Case Is < 32
Case 44 To 46
Case 48 To 57
Case Else
KeyAscii = 0
End Select
End Sub
per escludere la virgola basta che al posto di 44 metto 45 però ho il problema che su altri pc il punto non lo considera e se metto la virgola lo prende come carattere errato.
Cmq cerco di fare altre prove e ti faccio sapere
jackk87 è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2008, 18:12   #6
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Ok la sparo: non potrebbe avere a che fare con le impostazioni di formato per le cifre in Access?

In passato ho avuto un problema analogo, in un'applicazione java momentaneamente appoggiata su Access come db (per rapida prototipazione) con risultati diversi nell'inserimento di valori via SQL nei campi a doppia precisione se le impostazioni locali consideravano il punto '.' come separatore dei decimali piuttosto che separatore delle migliaia (e la virgola di conseguenza).

Non ricordo se e come abbiamo risolto, dato che una volta impostate le tabelle abbiamo migrato tutto su HSQL, il db target.

P.S.: Java dialogava con Access via JDBC, quindi la faccenda potrebbe essere diversa, non sono un esperto in materia.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2008, 10:19   #7
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da jackk87 Guarda i messaggi
Antonio sono d'accordo con te però io ho il problema che se l'importo lo scrivo con il punto per esempio 250.56 non mi considera proprio il punto cioè mi considera 25056 cosa che sul pc dove ho visual basic mi prende 250.56. E' questa la cosa strana infatti io alla textbox gli proibisco tutto tramite questa funzione:
Private Sub importo_KeyPress(KeyAscii As Integer)
'Controllo per non far inserire caratteri errati
Select Case KeyAscii
Case Is < 32
Case 44 To 46
Case 48 To 57
Case Else
KeyAscii = 0
End Select
End Sub
per escludere la virgola basta che al posto di 44 metto 45 però ho il problema che su altri pc il punto non lo considera e se metto la virgola lo prende come carattere errato.
Cmq cerco di fare altre prove e ti faccio sapere
"Antonio" ?

1. Problema della virgola : è forse dovuto al fatto che quando concateni la stringa Insert, quella virgola può essere interpretata come separatore dei valori ( l'errore dice che il numero dei campi non corrisponde col numero dei valori passati nella Insert... ). La soluzione è semplice. Basta trattare il numero decimale come stringa :

Codice:
    Dim val As Double
    val = CDbl(Text1.Text)
    Dim strINSERT As String
    strINSERT = "INSERT INTO nomeTabella (numero) " & _
                "VALUES (" & "'" & val & "'" & ")"
Access capirà...

2. Problema del separtore decimale : credo abbia ragione banryu, forse non è un'impostazione di Access, bensì proprio l'impostazione locale di sistema sul separatore dei decimali.
Da VB6 puoi conoscere via codice l'impostazione locale, ad esempio, con queste chiamate ( da mettere in un modulo - la Function da usare è GetDecimalSep ) .

Codice:
Public Declare Function GetLocaleInfo Lib "KERNEL32" _
    Alias "GetLocaleInfoA" _
    (ByVal Locale As Long, _
    ByVal LCType As Long, _
    ByVal lpLCData As String, _
    ByVal cchData As Long) As Long
 
Public Const LOCALE_SDECIMAL = &HE
Public Declare Function GetThreadLocale Lib "KERNEL32" () As Long
Public Declare Function GetSystemDefaultLCID Lib "KERNEL32" () As Long
Public Declare Function GetUserDefaultLCID Lib "KERNEL32" () As Long
 
Public Function GetDecimalSep() As String

    Dim LCID As Integer
    Dim Data As String
    Dim Ret As Integer
    Dim DataLen As Long
    LCID = GetThreadLocale
    Ret = GetLocaleInfo(LCID, LOCALE_SDECIMAL, Data, DataLen)
    If Ret <> 0 Then
         DataLen = Ret
         Data = Space(DataLen)
         Ret = GetLocaleInfo(LCID, LOCALE_SDECIMAL, Data, DataLen)
    End If
    GetDecimalSep = Left(Data, DataLen - 1)
 
End Function
In questo modo dovresti intercettare ogni eccezione, e riuscire ad inserire su tutti i sistemi in ogni caso ( chiaro che se su un sistema l'utente avesse fantasiosamente definito "@" come separatore decimale, dovrai gestire anche quello... ).
Perciò soluzione 1. + soluzione 2. :

Codice:
    Dim val As Double
    Dim separatoreDec As String
    separatoreDec = GetDecimalSep
    If separatoreDec = "," Then
        val = CDbl(Replace(Text1.Text, ".", ","))
    End If
    If separatoreDec = "." Then
        val = CDbl(Replace(Text1.Text, ",", "."))
    End If
    Dim strINSERT As String
    strINSERT = "INSERT INTO nomeTabella (numero) " & _
                "VALUES (" & "'" & val & "'" & ")"
Prova...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo KTC H27E6 a 300Hz e 1ms: come i rivali ma a met&...
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare Cineca inaugura Pitagora, il supercomputer Lenov...
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA Mova Z60 Ultra Roller Complete: pulisce bene gra...
Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
GeForce RTX 50 SUPER cancellate o rimand...
Windows 11 si prepara a vibrare: Microso...
La “Burnout Season” colpisce l’Italia: i...
QNAP annuncia il JBOD TL-R6020Sep-RP: ol...
Siemens e NVIDIA uniscono le forze: arri...
Ricarica veloce e durata batteria: miti ...
Le "navi volanti" di Candela a...
Bambini su misura? Il caso della startup...
Iliad porta le SIM Express in edicola: r...
Offerte Amazon sui TV Mini LED Hisense 2...
Il silenzio digitale che fa male: come i...
Il responsabile del programma Cybertruck...
Domanda alle stelle per SSD e RAM: in Gi...
Zuckerberg vuole eliminare tutte le mala...
Otto suicidi, un solo chatbot: si moltip...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:45.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v