|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
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
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
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. |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Quote:
|
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
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 & ")"
Codice:
strINSERT = "INSERT INTO nomeTabella (camponumero) " & _
"VALUES (" & Replace(Text1.Text, ",", ".") & ")"
|
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Quote:
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 |
|
|
|
|
|
|
#6 |
|
Senior Member
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) |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
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 & "'" & ")"
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
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 & "'" & ")"
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:14.










Buonasera,









