[asp] SQL insert Date in SQLserver-type mismatch

Pagina: 1
Acties:

  • Cai
  • Registratie: December 2001
  • Laatst online: 21-08 11:47
Als ik mijn Insert query uit wil laten voeren krijg ik deze foutmelding:
Microsoft VBScript runtime error '800a000d'

Type mismatch: 'MM_editQuery'

/nl/support/sla/slasubmit.asp, line 123
//regel20
Ik heb response.write Date() gedaan, en het type datum wat ik krijg dd-mm-yyyy staat gelijk aan wat er in m'n sqlserver ingevoerd moet worden, veld datum heeft het domein datetime.

wat ik geprobeerd heb is in m'n sql server de exacte string gecopy paste(sqlcommando) en de varnamen vervangen door waardes en het werkt.
Alles moet tussen quote's behalve datum.

Via de search kwam ik ook niet echt verder.

Dit is m'n code

ASP.NET 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
  dim q_deb
  dim q_type
  dim q_datum
  dim q_mail
  dim q_cp
  dim q_artikel
  dim q_serie
  
  q_deb=SLA.Fields.Item("debiteurnr").Value
  q_type=request.form("select")
  q_datum=Date()
  q_mail=request.form("t_mail")
  q_cp=request.form("t_cp")
  q_artikel=(SLA.Fields.Item("Artikelnr").Value)
  q_serie=(SLA.Fields.Item("serienr").Value)
  
  MM_editQuery = "insert into [dbo].[AK_sup_SLA] (debiteurnr, type_sla, datum, email, contactpersoon, artikel_nummer, serie_nummer) values ('"
  MM_editQuery =MM_editQuery +q_deb+"','"
  MM_editQuery =MM_editQuery +q_type+"',"
  MM_editQuery =MM_editQuery  +q_datum+",'"
  MM_editQuery =MM_editQuery   +q_mail+"','"
  MM_editQuery =MM_editQuery   +q_cp+"','"
  MM_editQuery =MM_editQuery   +q_artikel+"','"
  MM_editQuery =MM_editQuery   +q_serie+"')"


Iemand een idee wat ik over het hoofd zie

[ Voor 55% gewijzigd door Cai op 25-09-2003 11:39 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Maak eens gebruik van parameters in je query ipv die query mbv string concatenation samen te stellen.
Als je gebruik maakt van parameters, zal je je geen zorgen hoeven te maken over het formaat waarin je datum staat, en hoe die in sql server wordt opgeslagen.

https://fgheysels.github.io/


  • Cai
  • Registratie: December 2001
  • Laatst online: 21-08 11:47
????
Heb je een klein voorbeeldje van wat je bedoeld

Verwijderd

Moeten er niet gewoon "#" om de datum heen staan???
Bij access in ieder geval wel...

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Probleem lijkt te zijn dat je datum niet omsluit met hekjes (#). Deze hekjes geven aan dat het een datum is. Gebruik dan ook de oplossing van whoami, aangezien dat snel, safe en simpel werkt... (het is net als betalen met je PIN! :Y))

Overigens vind ik het wel een beetje eng dat je al je variabelen Dim't zonder aan te geven als wat je ze declareert...

My personal website


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Cai schreef op 25 september 2003 @ 11:40:
????
Heb je een klein voorbeeldje van wat je bedoeld
Ik weet niet precies hoe je dat in ASP/VbScript doet, maar je kunt je query bv zo samenstellen:
code:
1
sSQL  = "INSERT INTO tabel (veld1, veld2) VALUES (? ,  ?)"

en dan mbhv Parameters vul je je command aan met de juiste waarden.

Zoek anders even op MSDN op 'ASP' of 'vbscript' en parametrized queries.

https://fgheysels.github.io/


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 12-08 16:04

Jaspertje

Max & Milo.. lief

OZ-Gump schreef op 25 September 2003 @ 11:42:
Probleem lijkt te zijn dat je datum niet omsluit met hekjes (#). Deze hekjes geven aan dat het een datum is. Gebruik dan ook de oplossing van whoami, aangezien dat snel, safe en simpel werkt... (het is net als betalen met je PIN! :Y))

Overigens vind ik het wel een beetje eng dat je al je variabelen Dim't zonder aan te geven als wat je ze declareert...
Hij programeert in ASP.. niet VB..

Overigens kan je query ook op de volgende manier 'overzichtelijk' opbouwen:

ASP:
1
2
SQL = "Insert Int tabel (temp, temp1) " & _
           "Values ('" & waarde1 & "','" & waarde2 & "')"


Dan is het (vind ik) een stuk overzichtelijker..

[ Voor 7% gewijzigd door Jaspertje op 25-09-2003 11:44 ]


  • Cai
  • Registratie: December 2001
  • Laatst online: 21-08 11:47
shit zit te denken(ik weet het moet je aan een paard overlaten)

De fout zit niet in het uitvoeren van de query, maar in het toevoegen van de datum in de query string

Is het mogelijk om die datum zo om te zetten dat tie in de query string past

Verwijderd

Dat probleem had ik ook, als je nl met de enterprise manager je db bekijkt wordt de datum als dd-mm-yyyy weergegeven terwijl je hem toch echt als yyyy-mm-dd in de db via je query moet invoeren, althans, toen was bij mij het probleem opgelost...

[edit...]

Heb ff de functie erbij gepakt, kan waarschijnlijk wel effecienter mbv van regex, misschien heb je er wat aan

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
FUNCTION transDate (datum)
    DIM dArray
    IF IsDate(datum) THEN
        dArray = Split(datum, "-")
        IF LEN(dArray(1)) = 1 THEN
            dArray(1) = "0" & datumArray(1)
        END IF
        transDate = dArray(2) &"-"& dArray(1) &"-"& dArray(0)
    ELSE
        transDate = null
    END IF
    SET dArray = NOTHING
END FUNCTION

[ Voor 49% gewijzigd door Verwijderd op 25-09-2003 11:50 ]


Verwijderd

als je toch Date() gebruikt,waarom dan dit:

code:
1
MM_editQuery =MM_editQuery  +q_datum+",'"


niet zo:
code:
1
MM_editQuery =MM_editQuery  "getdate(),"


is dezelfde functie maar dan in SQLServer

[ Voor 8% gewijzigd door Verwijderd op 25-09-2003 11:50 ]


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:17

TeeDee

CQB 241

Even een paar dingetjes:

Gebruik geen Dreamweaver Ultradev om je query's te bouwen. Gebruik (als het echt niet anders kan) de Command / Stored Procedure optie.

Beter is om zoals whoami zegt: de boel met het handje op te bouwen. Heb je meer controle en minder onoverzichtelijke code.

Verder lijkt mij dit hele probleem met een Session.LCID = 1033 opgelost.

[ Voor 23% gewijzigd door TeeDee op 25-09-2003 11:54 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Cai
  • Registratie: December 2001
  • Laatst online: 21-08 11:47
[dumb]Verder lijkt mij dit hele probleem met een Session.LCID = 1033 opgelost.?????[/dumb]

snap ut niet, wat bedoel je daarmee.

ik bouw m'n query niet met DW op, maar m'n db connectie

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:17

TeeDee

CQB 241

Heb jij ook gezien hoe je query eruit ziet?

Print die eens naar het scherm?
ASP:
1
2
' zet dit bovenaan je pagina
Session.LCID = 1033

Dat scheelt ook wel eens....
Verder refereerde ik aan DW omdat dat typisch zooi van DW is :)

Heart..pumps blood.Has nothing to do with emotion! Bored


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Jaspertje schreef op 25 september 2003 @ 11:44:
[...]


Hij programeert in ASP.. niet VB..
Wel of geen # heeft niet te maken met de programmeertaal maar met het betreffende RDBMS. Access heeft # voor zgn. 'dateliterals', terwijl bijv. SQL Server ' heeft.

Het is al gezegd, maar ik zou zoveelmogelijk de datum functie van de database gebruiken.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

P_de_B schreef op 25 September 2003 @ 12:27:
[...]


Wel of geen # heeft niet te maken met de programmeertaal maar met het betreffende RDBMS. Access heeft # voor zgn. 'dateliterals', terwijl bijv. SQL Server ' heeft.

Het is al gezegd, maar ik zou zoveelmogelijk de datum functie van de database gebruiken.
dat ging niet over het gebruik van die #, maar over de opmerking dat ie slechts dim gebruikte zonder datatype..

je kan geen datatype specificeren in vbscript

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 12-08 16:04

Jaspertje

Max & Milo.. lief

Verwijderd schreef op 25 September 2003 @ 12:34:
[...]

dat ging niet over het gebruik van die #, maar over de opmerking dat ie slechts dim gebruikte zonder datatype..

je kan geen datatype specificeren in vbscript
Inderdaad, ik heb wat teveel laten staan bij de quote maar het ging inderdaad om het dimmen.. Daar hoef je alleen maar dim te doen..en niet dim a as integer..

  • Cai
  • Registratie: December 2001
  • Laatst online: 21-08 11:47
Session.LCID = 1033

Wat doet dir precies? om zoiets klakkeloos over te tikken, leer ik weinig van

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:17

TeeDee

CQB 241

Dit zet de "language setting" van je pagina goed. Ongeacht de language setting van de gebruiker.

Hier de MSDN Codebase. Altijd handig...

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

zet de taal van je pagina op Engels

  • pasz
  • Registratie: Februari 2000
  • Laatst online: 16-08 23:04
Session.LCID = 1033 is een land instelling. Weet effies niet welke.

Is het script weer zo'n fokking gegenereerd script ?

woei!


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
TeeDee schreef op 25 september 2003 @ 15:05:
Dit zet de "language setting" van je pagina goed. Ongeacht de language setting van de gebruiker.

Hier de MSDN Codebase. Altijd handig...
Net niet....
Nu staat de Culture altijd op Engels. Ik kan me voorstellen dat een Belgische, Franse, Nederlandse, Arabische, .... bezoeker dat niet leuk gaat vinden, al die region - instellingen op Engels.

https://fgheysels.github.io/


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:17

TeeDee

CQB 241

Dat zeg ik toch? Dat de setting altijd op Engels staat. Niet gezegd dat het wenselijk is, maar toch.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Jij laat uitschijnen dat het handig is, en ik ben het daar niet mee eens. ;)

https://fgheysels.github.io/


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:17

TeeDee

CQB 241

De MSDN is handig. :+

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Goed,

Allereerst is kan het nog korten en ovezichtelijker "

INSERT INTO blah (var1, var2) values (@var1, @var2)

Dan heb je in je query ook niets te maken met haakjes e.d.
De variabelen vul je dan via de replace functie...

Ennuh wat betreft die Type mismatch als je een datum naar een SQL database overzet, zorg er dan wel voor dat het veld waar je naartoe probeert te schrijven ook een datetime veld is. Dit kan tricky zijn in verband met regional settings, zowel op de machine waar SQL draait, als ook op je webserver....

Let ook op syntax sting waarden gaan zo naar een SQL database : 'tekst'
Numerieke waarden zo : 1000
Datum weet ik niet uit m'n hoofd, maar het kan dus ook zijn dat er single quotes omheen moeten.
Pagina: 1