Avatar billede steen_hansen Forsker
08. juni 2022 - 21:37 Der er 6 kommentarer og
2 løsninger

'80004005' Column count doesn't match value count at row 1

Jeg har en formular, som smider data i 8 recordsets:

    If Request.Form("mode") = "insert_todays_weight" Then
        Dim dato, vUser, ideal_weight, todays_weight, RSYesterdaysWeight, YesterdaysWeight, DiffFromYesterdayInKG, DiffFromYesterdayInPercent, losegain
        dato = Day(Date) & "/" & Month(Date) & "/" & Year(Date) & " " & Time()
        vUser = SQLEncode(Session("username"))
        ideal_weight = Trim(Request.Form("ideal_weight"))
        todays_weight = Trim(Request.Form("todays_weight"))
        losegain = Request.Form("losegain")

        Set RSYesterdaysWeight = Conn.Execute("SELECT * FROM ideal_weight WHERE todays_weight > 0 AND username = '" & SQLEncode(Session("username")) & "' ORDER BY ideal_weightID DESC LIMIT 1")

        If Not RSYesterdaysWeight.EOF Then
            YesterdaysWeight = FormatNumber(RSYesterdaysWeight("todays_weight",1))
            DiffFromYesterdayInKG = FormatNumber((todays_weight - YesterdaysWeight),1)
            DiffFromYesterdayInPercent = (YesterdaysWeight - DiffFromYesterdayInKG / RSYesterdaysWeight) * 100
        Else
            YesterdaysWeight = 0
            DiffFromYesterdayInKG = 0
            DiffFromYesterdayInPercent = 0
        End If

        Conn.Execute("INSERT INTO ideal_weight (dato, username, ideal_weight, todays_weight, YesterdaysWeight, DiffFromYesterdayInKG, DiffFromYesterdayInPercent, losegain) VALUES (" & _
            "'" & dato & "', " & _
            "'" & vUser & "', " & _
            "" & ideal_weight & ", " & _
            "" & YesterdaysWeight & ", " & _
            "" & DiffFromYesterdayInKG & ", " & _
            "" & DiffFromYesterdayInPercent & ", " & _
            "" & todays_weight & ", " & _
            "" & losegain & ")")
        Conn.Close

I MySQL har jeg flg:

ideal_weightID (fortløbende, primary)
dato
username
ideal_weight
todays_weight
RSYesterdaysWeight
DiffFromYesterdayInKG
DiffFromYesterdayInPercent
losegain

Jeg prøvede at udskrive variablerne inden INSERT INTO, og her er der rigtigt nok 8 værdier til 8 kolonner

Jeg har tjekket og dobbelttjekket for  tal og strengvariabler, både i databasen og i scriptet, samt kommaer i scripts. Og alligevel får jeg dette:

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[MySQL][ODBC 5.3(w) Driver][mysqld-5.7.38-41-log]Column count doesn't match value count at row 1

/membersarea/profile/myweight/todaysweight/default.asp, line 51

Linie 51 = Conn.Execute("INSERT INTO ideal_weight (dato, username, ideal_weight, todays_weight, YesterdaysWeight, DiffFromYesterdayInKG, DiffFromYesterdayInPercent, losegain) VALUES (" & _

Hvor hopper kæden af?
Avatar billede arne_v Ekspert
08. juni 2022 - 21:59 #1
Det ser lidt mystisk ud.

Mit bedste gæt er hvis et af tallene er et decimal tal og de er formateret til dansk d.v.s. med komma og at det fucker SQL'en op.
Avatar billede steen_hansen Forsker
08. juni 2022 - 22:07 #2
S'føli, man skal bruge . (punktum), og ikke komma. Du er sq hurtig, Arne!

Har du nogen idé til hvordan man kun kan indtaste tal og punktum? Altså så hvis man forsøger at indtaste , (komma), så reagerer tastaturet ikke. Der skal måske noget JavaScript til?
Avatar billede steen_hansen Forsker
08. juni 2022 - 23:59 #3
<input type="text" onkeypress='return event.charCode == 46 || (event.charCode >= 48 && event.charCode <= 57)'>

Det virker
Avatar billede arne_v Ekspert
09. juni 2022 - 01:30 #4
JavaScript er måden at teste client side.

Du kan også teste server side i ASP/VBS.
Avatar billede arne_v Ekspert
09. juni 2022 - 01:31 #5
Den rigtige måde at gøre det på ville nok være at:
- konvertere form input strenge til tal
- lave insert med parameters
Avatar billede steen_hansen Forsker
09. juni 2022 - 01:38 #6
"Den rigtige måde at gøre det på ville nok være at:
- konvertere form input strenge til tal
- lave insert med parameters"

Kan du uddybe, Arne? Jeg kan se det afrunder på mærkværdig vis.
Avatar billede arne_v Ekspert
09. juni 2022 - 01:54 #7
talsomstreng = Request("formfelt")
talsomtal = CDbl(talsomstreng)

vil give dig et tal.

Og så lave en ADODB.Command og sætte SQL med placeholders og sætte de enkelte parametre.

Der er ASP eksempler her: https://www.vajhoej.dk/arne/articles/prepparam.html#right
Avatar billede steen_hansen Forsker
27. juli 2022 - 22:55 #8
Tak for hjælpen, Arne
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester