[VB6] Getal formaat Access

Pagina: 1
Acties:
  • 173 views sinds 30-01-2008
  • Reageer

  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
Ok, probleem leek me triviaal, maar kan het niet zo 123 vinden.
Ik heb voor een programma een Access back-end hierin staan komma-getallen.

Probleem laat zich raden.,.... bij de engelse instelling is het scheidingskarakter voor "komma-getallen" een punt en bij de nederlandse instellen is dit gewoon een komma.

Is dit op een "simpele" manier op te lossen? (zoals bij datum?)

Wat niet kan is nog nooit gebeurd


  • Bu588
  • Registratie: Maart 2000
  • Laatst online: 22-12-2025
Ik gebruik Format(getal,"General Number") zodra ik ergens een waarde moet toekennen, werkt bij mij prima.

Nothing is fool-proof to a sufficiently talented fool...


  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
Juist, voor weergave is dat perfect.
Nu nog voor het wegschrijven. Access gaat met deze waarden per taalinstelling anders om.

Wat niet kan is nog nooit gebeurd


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:21

.oisyn

Moderator Devschuur®

Demotivational Speaker

lijkt me stug dat het in text wordt weggeschreven, dat neemt nogal veel overhead in beslag

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Bu588
  • Registratie: Maart 2000
  • Laatst online: 22-12-2025
Kort voorbeeld:
code:
1
Me.Width = Format(2.56,"General Number")

Werkt altijd in iedere taalinstelling. In VB is de punt altijd het scheidingskarakter, dus het getal kun je zo opgeven. Dankzij de Format snapt de PC bij iedere instelling voor het scheidingskarakter wat je wilt instellen.

Nothing is fool-proof to a sufficiently talented fool...


  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
Aha, ok zal het proberen. THX results morgen, nu eerst maar eens slapen... :)

Wat niet kan is nog nooit gebeurd


  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
code:
1
2
3
Dim s As String
s = "2,50"
Text1.Text = Format(CDbl(s), "General Number")

Gaat niet werken, geeft me nu 250 ipv 2.50.

Wat niet kan is nog nooit gebeurd


  • Bu588
  • Registratie: Maart 2000
  • Laatst online: 22-12-2025
Probeer gewoon
code:
1
2
3
Dim s as string
s="2.50"
Text1.Text=Format(CDbl(s),"General Number")

Dus met een punt als scheidingskarakter. Waarom maak je trouwens überhaupt een string aan, die je daarna naar een Double verandert :? Je kunt toch gewoon
code:
1
Text1.Text = Format(2.5,"General Number")

gebruiken, dus direct in 1x zonder een string te declareren? Scheelt weer wat geheugengebruik, snelheid en vooral moeite.

Nothing is fool-proof to a sufficiently talented fool...


  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
Ik krijg de waardes aangeleverd via DAO, deze staan in het formaat van de gebruiker. Dus . of ,
De string in het voorbeeld is puur als voorbeeld.

Wat niet kan is nog nooit gebeurd


  • Bu588
  • Registratie: Maart 2000
  • Laatst online: 22-12-2025
Volgens mij rekent Access in VB altijd met een punt als scheidingsteken, dus als je in de string die je krijgt de eventueel voorkomende komma laat vervangen door een punt ben je er toch ook? Daarna gebruik je CDbl() pas.

Nou werk ik zelf (nog) niet met DAO, dus ik weet niet exact hoe je de waarde binnenkrijgt. Volgens jouw voorbeeld krijg je een string met daarin het cijfer, hierin kun je gelijk zoeken en vervangen. Als je een Double krijgt via DAO, moet je die eerst omzetten naar een String (functie Str()), en daarna bovenvermelde bewerkingen pas uitvoeren.

Ik neem aan dat je niet een string krijgt met punten én komma's erin, anders wordt het iets moeilijker (dan moet je kijken welke van de 2 het meest rechts staat, dat is het scheidingskarakter voor decimalen, de andere voor duizendtallen).

Nothing is fool-proof to a sufficiently talented fool...


  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
Probleem is dat Access wel deze verschillende scheidingstekens gebruikt. (gebruikers instelling afhankelijk)
Ik moet op de een of andere manier, de globale instellingen hievan op kunnen vragen.

Wat niet kan is nog nooit gebeurd


  • Squall-sX
  • Registratie: April 2002
  • Laatst online: 19-08 11:11
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function Makepoint(tmp) As String

Dim tmpStr As String

Dim t As Integer
    For t = 1 To Len(tmp)
        If (Mid(tmp, t, 1) <> ",") Then
            tmpStr = tmpStr & Mid(tmp, t, 1)
        Else
            tmpStr = tmpStr &  "."
        End If
    Next
    Makepoint = tmpStr

End Function



Hiermee zet je heel makkelijk die hatelijke , van je om in een .. Dan moet je je niks van die general format in Nederland en andere landen aantrekken.

  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
Lijkt me een goede optie ja,
thx

Toch raar dat het zo "moeilijk" moet.

Wat niet kan is nog nooit gebeurd


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 28-08 15:30

sopsop

[v] [;,,;] [v]

Kun je toch ook zo doen?
Visual Basic:
1
2
3
Dim s as string
s="2.50"
Text1.Text=Format(CDbl(replace(s,",","."),"General Number")

  • Squall-sX
  • Registratie: April 2002
  • Laatst online: 19-08 11:11
werkt dit zo? Wist dit niet.

  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
[mierenneuk modes]
er mist nog een sluithaak
[/mierenneuk modes]
Ik maak nu gewoon een test tabel waarin een double staat. Deze bevat het juiste scheidingsteken die ik nu dus gewoon kan ophalen.

Wat niet kan is nog nooit gebeurd


  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50
boppert schreef op 11 November 2002 @ 15:13:
Kun je toch ook zo doen?
Visual Basic:
1
2
3
Dim s as string
s="2.50"
Text1.Text=Format(CDbl(replace(s,",","."),"General Number")
Ja klopt helemaal, check dit:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Private Sub Command1_Click()
Dim cnnDB As ADODB.Connection
Set cnnDB = New ADODB.Connection

cnnDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & App.Path & "\db1.mdb"
        

Dim s As Double
Dim rsTST As New ADODB.Recordset
Dim strSQL As String
strSQL = "SELECT * FROM tblTest"
Set rsTST = cnnDB.Execute(strSQL)
s = CDbl(rsTST.Fields(0))
Text1.Text = s


        
cnnDB.Close
Set cnnDB = Nothing


End Sub

Private Sub Command2_Click()
Dim cnnDB As ADODB.Connection
Set cnnDB = New ADODB.Connection

cnnDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & App.Path & "\db1.mdb"
        

Dim s As Double
Dim rsTST As New ADODB.Recordset
Dim strSQL As String
s = Val(Replace(Text2.Text, ",", "."))

strSQL = "INSERT INTO tblTest VALUES( " & Replace(s, ",", ".") & ")"

Set rsTST = cnnDB.Execute(strSQL)
       
cnnDB.Close
Set cnnDB = Nothing

End Sub


Werkt nu goed.
Thx voor het mee denken _/-\o_

Wat niet kan is nog nooit gebeurd

Pagina: 1