Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


decimaltal i VB till Access

Postades av 2009-04-27 14:12:55 - Gunnar Feltborg, i forum visual basic - allmänt, Tråden har 27 Kommentarer och lästs av 1925 personer

Jag har en SQL som skall överföra tal till en Access databas. Följande kod skriven i VB6:

talet = 100.2
tabell = "lista"
SQL = "INSERT INTO " & tabell & "" _
& "(ingbal)" _
& "VALUES(" & talet & ")"
Set databas = Conn.Execute(SQL)

När jag sätter talet=100 fungerar det (får inget felmeddelande)
Sätter jag talet=100,2 får jag syntax-error
Och vid talet=100.2 får jag Runtime error. Antalet värden i frågan och antalet målfält är olika.
I databasen har jag fältstorleken Double och formatet Standard (ex 100,20). Hur gör jag för att VB och Access skall "prata samma decimalspråk"?



Svara

Sv: decimaltal i VB till Access

Postades av 2009-04-27 15:14:43 - Sven Åke Persson

Ja det är en djä... soppa.
Felet är att du har (,) komma som decimalavskiljare i dina nationella inställningar.

Som jag ser det är det enklaste att du lagrar talet som en String
När du sedan vill ha tillbaka det i din VB app för matematik får du omvandla igen med Val(talet)
'Edit : Tvärtom skall det vara Så här
<code>
Dim talet As String
talet = "100.2"
talet = Replace(talet, ".", ",") ' byt ev punkt till komma
talet = Cdbl(talet)
</code>


Svara

Sv:decimaltal i VB till Access

Postades av 2009-04-27 16:05:08 - Gunnar Feltborg

Detta låter inte speciellt roligt!! Det är inte så enkelt för att i själva verket är "talet" en array tal(i) i en nästlad loop. Det kanske inte finns någon enkel lösning på detta problem?


Svara

Sv: decimaltal i VB till Access

Postades av 2009-04-27 18:22:41 - Niklas Jansson

Använd något i stil med:

talet = 100.2
tabell = "lista"
SQL = "INSERT INTO " & tabell & "" _
& "(ingbal)" _
& "VALUES(" & format("0,0", talet) & ")"
Set databas = Conn.Execute(SQL)

Dvs, se till så att "talet" formateras som "100,2". Det gör du lämpligtvis i en testgrej utanför, dvs utan db-kommunikation.


Svara

Sv: decimaltal i VB till Access

Postades av 2009-04-27 21:09:38 - Martin Adrian

>Hur gör jag för att VB och Access skall "prata samma decimalspråk"?

Det finns 2 funktioner "Val" och "Str" som är gjorda för precis detta, använd dem!

"Values(" & Str(talet) & ")"


Svara

Sv:decimaltal i VB till Access

Postades av 2009-04-27 21:16:27 - Sven Åke Persson

mmm... riktigt så enkelt verkar det inte vara.

Håller med Niklas att Format är nog den bästa lösningen eftersom talet från början är av typ Double
Då kan du lösa det efter denna princip innan du läser in talet i Access
Med denna metod behöver Du inte blanda in String
<code>
Dim talet As Double
talet = 100.2
talet = Format(talet, "0. 00")
</code>


Svara

Sv: decimaltal i VB till Access

Postades av 2009-04-28 01:12:16 - Sven Åke Persson

Det här kommer förmodligen också att funka. Martin:s lösning.
<code>
talet = 100.2
tabell = "lista"
SQL = "INSERT INTO " & tabell & "" _
& "(ingbal)" _
& "VALUES(" & Val(Str(talet)) & ")"
Set databas = Conn.Execute(SQL)
</code>


Svara

Sv:decimaltal i VB till Access

Postades av 2009-04-28 08:16:35 - Martin Adrian

>Val(Str(talet))

Krångla inte till det Sven. Vi vet att implicit konvertering till sträng är problemet så undvik det.


Svara

Sv: decimaltal i VB till Access

Postades av 2009-04-28 12:18:34 - Sven Åke Persson

Nja det håller jag inte med på. Testade denna korta snutt.
<code>
Dim talet As Double
talet = 100.2
talet = Val(talet)
MsgBox talet
</code>

Svaret blev då 100 dvs decimaldelen försvann.

Skriver jag så här
<code>
Dim talet As Double
talet = 100.2
talet = Val(Str(talet))
MsgBox talet
</code>

Svaret blir då 100,2 som han förmodligen vill ha det.

Skriver jag <b>"Values(" & Str(talet) & ")"</b> som du vill, så blir talet 1002. Sicken djä... soppa.


Svara

Sv:decimaltal i VB till Access

Postades av 2009-04-28 12:59:19 - Martin Adrian

Sven nu skall jag förklara hur det fungerar (om du vill veta)

<code>
Dim talet As Double
talet = 100.2
talet = Val(talet)
MsgBox talet
</code>

Val tar en sträng som argument, därför får du en implict konevertering från double till sträng vilket använder nationella inställningarna. dvs "100,2"
Uttrycket blir alltså samma som:
talet = Val("100,2")

Detta ger en double med värdet 100 eftersom Val bara fungerar med decimalpunkt.

<code>
Dim talet As Double
talet = 100.2
talet = Val(Str(talet))
MsgBox talet
</code>

Det här är rena rappakaljan. Str gör en explicit konvertering av double till sträng med decimalpunkt, dvs "100.2"
Så första steget blir

Val("100.2")

Val gör sen en explicit konvertering av strängen till en double vilket blir 100 och 2 tiondelar (dvs samma som vi startade med). Anledningen till att du ser "100,2" är att MsgBox tar en sträng som argument så du får en implict konvertering igen (som vi vet använder decimalkomma).

Sluta med implicta konverteringar så försvinner huvuddelen av problemen.


Svara

Sv: decimaltal i VB till Access

Postades av 2009-04-28 13:47:40 - Sven Åke Persson

Ok jag köper det.Har aldrig tänkt i dom banorna. Men Jag som är kontrollfreek !

Hur kan jag visualisera att det blir rätt. Ex.
<code>
Dim talet As Double
talet = 100.2
talet = Str(talet) + Str(talet)
</code>

Jag vill se 200.4 eller 200,4


Svara

Sv:decimaltal i VB till Access

Postades av 2009-04-28 17:26:54 - Gunnar Feltborg

Tack för en intressant diskussion. Jag har testat förslagen men har inte fått någondera att funka. Jag ändrade i Windows nationella inställningar från , (kommatecken) till . (punkt). Detta gjorde att allt fungerade som det skulle men det är frågan vad detta får för konsekvenser i övrigt????


Svara

Sv: decimaltal i VB till Access

Postades av 2009-04-28 17:36:35 - Sven Åke Persson

Jag återgår till Niklas lösning den är korrekt. Det här löser problemmet.
<code>
talet = 100.2
tabell = "lista"
SQL = "INSERT INTO " & tabell & "" _
& "(ingbal)" _
& "VALUES(" & Format(talet,"0.00") & ")" 'Lägg till fler (0) nollor efter behov
Set databas = Conn.Execute(SQL)
</code>
Niklas skrev <b>Format(talet,"0,0")</b> därför blev hans svar fel dvs (,) fel


Svara

Sv:decimaltal i VB till Access

Postades av 2009-04-28 20:56:50 - Sven Åke Persson

Tycker du skall återgå till ursprunget och kolla mitt förslag.

Väntar med spänning på resultatet.


Svara

Sv: decimaltal i VB till Access

Postades av 2009-04-28 21:54:10 - Gunnar Feltborg

Låter spännande att kolla. Jag återkommer imorgonkväll.


Svara

Sv:decimaltal i VB till Access

Postades av 2009-04-29 05:55:46 - Martin Adrian

Gunnar: varför tar du inte och skriver ut variablen SQL så du kan se hur den ser ut innan du skickar den till databasen.

Sven: I dokumentationen till funktionen Format står det (om punkten i formatsträngen)
"The decimal placeholder determines how many digits are displayed to the left and right of the decimal separator. ... <b>The actual character used as a decimal placeholder in the formatted output depends on the Number Format recognized by your system.</b>"

dvs om du använder Format så får du decimalkomma.


Svara

Sv: decimaltal i VB till Access

Postades av 2009-04-29 08:52:44 - Sven Åke Persson

<b>dvs om du använder Format så får du decimalkomma. </b>

mmm... exakt. Om jag fattat rätt så är det just det han vill ha.

Han har (,) komma i sina Nationella inställningar och när han skall lägga in i Tabellen Value
så vill hans Access ha DataTyp Double med (,) som decimalavskiljare.

Så har jag fattat det.


Svara

Sv:decimaltal i VB till Access

Postades av 2009-04-29 10:16:37 - Sven Åke Persson

<b>Gunnar: varför tar du inte och skriver ut variablen SQL så du kan se hur den ser ut</b>

Djä... bra fråga. Hur gör man ?.
Jag körde med MsgBox och Label men det funkar tydligen inte enl Martin.

Jag köper vad Martin skriver om
(Sluta med <b>implicta</b> konverteringar så försvinner huvuddelen av problemen. )

DVS det blir "dubbelstöt"

Hur gör man !? för att se vad som går in i systemet.


Svara

Sv: decimaltal i VB till Access

Postades av 2009-04-29 11:05:24 - Joacim Kindvall

SVEN:
I asp skriver man bara response.write sql men i vb vet ja inte, kanske label1.caption sql om man nu har någon sådan.


Svara

Sv:decimaltal i VB till Access

Postades av 2009-04-29 17:26:29 - Sven Åke Persson

mmm... förstår men Label1.Caption MsgBox mm. skruvar ju om enl implicta konverteringar.

Phuuuuuuuuuuuuuuuuuuuuuuuuuuu.

Måste nog använda Debug på något vis.


Svara

Sv: decimaltal i VB till Access

Postades av 2009-04-29 19:47:51 - Gunnar Feltborg

Nu har jag suttit i ett par timmar och testat med de olika förslag jag har fått men inget funkar!! Jag har gjort Debug med Breakpoints genom hela beräkningen. talet=inb(i) får kommatecken som avgränsare ex.vis 100,2. Access vill väl ha kommatecken? Det borde funka men det gör det inte. Detta var klurigt värre.


Svara

Sv:decimaltal i VB till Access

Postades av 2009-04-29 21:58:14 - Martin Adrian

SQL (och Access) använder decimalpunkt.

Använd Str så fungerar det.

>talet=inb(i) får kommatecken

Har du en strängvariabel som heter talet? Låter förvillande tycker jag.

Hursomhelst
Str(inb(i)) ger en sträng med decimalpunkt


Sven:
Det finns två former av explicit konvertering till sträng
Str - ger alltid decimalpunkt
CStr - följer de nationella inställningarna på datorn

Dim x As Double
x = 3.14

MsgBox Str(x) ' "3.14"
MsgBox CStr(x) ' "3,14"
MsgBox x ' Samma som CStr(x)


Svara

Sv: decimaltal i VB till Access

Postades av 2009-04-30 08:17:58 - Sven Åke Persson

Oki Martin
Nu har jag tagit det.

Det är väl själva fae..... om Vi inte skall lösa Gunnars problem
utan att han skall ställa om Nationell inställningar.

Är det fel på hela SQL satsen ?

100.2 skall bli 100,2 när det matas in till Access

Uhhhhhhhh.


Svara

Sv:decimaltal i VB till Access

Postades av 2009-04-30 08:51:50 - Sven Åke Persson

Som avslutning, ! Period ;-)

Varför i helvete kan Vi inte komma överens om att (.) Punkt gäller som decimalavskiljare.

Globalt.


Svara

Sv:decimaltal i VB till Access

Postades av 2009-04-30 09:38:44 - Gunnar Feltborg

Skönt, nu fungerar det. Hade tydligen glömt att testa denna variant även om det kanske var den första man skulle testat:
talet = Val(inb(i))
tabell = "lista"
SQL = "INSERT INTO " & tabell & "" _
& "(ingbal)" _
& "VALUES(" & talet & ")"
Set databas = Conn.Execute(SQL)

Nu får jag ändra detta på hundratals ställen i projektet.. Helgen är räddad!!!

Tack för allt engagemang och ha en bra helg.


Svara

Sv:decimaltal i VB till Access

Postades av 2009-04-30 09:46:00 - Martin Adrian

>100.2 skall bli 100,2 när det matas in till Access

Det har inget med Access att göra. Vad Gunnar gör är att han bygger ihop en SQL sträng som han skickar till Access. SQL använder decimalpunkt. Kommatecken är listseparator.

Om du tittar på det ursprungliga felmeddelandet så var det

>Antalet värden i frågan och antalet målfält är olika.

Detta beror på att resultatet av SQL byggandet

SQL = "INSERT INTO " & tabell & "" _
& "(ingbal)" _
& "VALUES(" & talet & ")"
blir
"INSERT INTO tabellnamn (ingbal) VALUES(100,2)"

Eftersom komma är listseparator tolkas ovanstående som att man vill stoppa in värdena 100 och 2 i tabellen men det är bara en kolumn angiven "ingbal". Därav felemeddelandet att antalet värden (100 & 2) och målfält (ingbal) är olika.

För att det skall fungera så skall man göra så här:
SQL = "INSERT INTO " & tabell & " (ingbal) VALUES(" & Str(talet) & ")"

Eftersom Gunnar säger att detta inte fungerar så misstänker jag att han inte gett oss all information. Det skulle kunna vara så att variabeln talet är en sträng och inte en double. Då uppstår felet tidigare i koden.

Sven, du borde kunna lista ut var felet med följande kod är!

Dim talet As String
talet = 100.2
SQL = "INSERT INTO " & tabell & "" _
& "(ingbal)" _
& "VALUES(" & talet & ")"


>Varför i helvete kan Vi inte komma överens om att (.) Punkt gäller som decimalavskiljare. Globalt.

Eller sluta använda implicita konverteringar. Borde vara lättare då antalet programmerare som gör det är färre än antalet människor som inte använder decimalpunkt.


Svara

Sv: decimaltal i VB till Access

Postades av 2009-04-30 11:29:37 - Sven Åke Persson

Braaaaaaaaaaaaaaaaa analys.


Svara

Sv:decimaltal i VB till Access

Postades av 2009-04-30 12:43:59 - Sven Åke Persson

<b>Borde vara lättare då antalet programmerare som gör det är färre än
antalet människor som inte använder decimalpunkt.</b>

Haaa *LOL* observerde in ditt skämt. GULD


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 725
27 958
271 751
239
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies