[ASP] SQL query runt wel in access maar niet in ASP

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

  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 23:35
Ik ben bezig met een soort van partyagenda script.
De database die ik hiervoor gebruik is ingevoerd in access en verdeeld in enkele tabellen.

Events
Organisatie
Locatie
Stijlen

In Events worden alle evenementen opgenomen en die worden weer intern gerefereerd aan de overige tabellen.

Nu heb ik een beheersapplicatie gemaakt in ASP om records in alle tabellen te kunnen toevoegen, bewerken en verwijderen. Dat lukt in alle tabellen behalve Events zelf.

Als ik bijv. deze statement wil uitvoeren:
code:
1
2
INSERT INTO Events (Datum,Naam,Website,Open,Sluiten,Locatie,Organisatie,Bezoekers,Stijlen) 
VALUES('1/1/2004','test','x','21','7','1','1','2','1')


Dan lukt dat wél in de SQL query uitvoeren methodiek van Access, maar niet als ik het via ASP doe. Wat kan hier mis gaan :?

Zou er iets mis gaan door die referentietabellen ? Maar waarom krijg ik dan in Access geen melding en via ASP wel? :?

Ik gebruik ASP op Windows Server 2003 en Access 2000 voor de DB.

[ Voor 7% gewijzigd door ScuL op 06-07-2004 14:53 ]

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
Rond numerieke waarden zet je geen quotes, tenzij die nummertjes wel degelijk in een 'tekst' - veld moeten komen.
Het probleem zal 'm waarschijnlijk zitten in die datum, maar dat is moeilijk zeggen als je gewoon zegt 'het werkt niet'.

https://fgheysels.github.io/


  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 23:35
Mja het probleem is dat ik geen specifieke foutmelding terug krijg. Ik ga eens ff kijken wat er gebeurd als ik die quotes weghaal.

-edit-
nee de quotes voor de numerieke velden weghalen maakt geen verschil.

na een debug blijkt dat inhoud van waarde 'err' -2147217900 is.

[ Voor 41% gewijzigd door ScuL op 06-07-2004 15:03 ]

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 23:35
toch maar een nieuwe post

dit is de SQL query nu
code:
1
2
INSERT INTO Events (Datum,Naam,Website,Open,Sluiten,Locatie,Organisatie,Bezoekers,Stijlen) 
VALUES(1-1-2004,'test','test',21,7,1,1,222,1);


dit is mijn custom error message:
Niet alle velden zijn volledig ingevuld of er is een database fout opgetreden!

en hier komt ASP mee:
Description: De instructie INSERT bevat een syntaxisfout.
Help context: 5003134
Help file:
Native error: Error number: 438
Error source: Runtimefout Microsoft VBScript
SQL state:

[ Voor 3% gewijzigd door ScuL op 06-07-2004 15:25 ]

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
waarschijnlijk gaat het fout met je datum (als je access gebruikt als DB)

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 23:35
ja.. wat moet ik veranderen aan de syntax om dat wel te corrigeren?

moet ik de datum invoeren met of zonder quotes? :?
moet ik het NL of Amerikaans invoeren? :? (dus 21-1-2004 of 1/21/2004)
:o

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 18-05 15:53

Jaspertje

Max & Milo.. lief

Bij SQL Server is het het meest verstandig om 1-Sep-2004 in te voeren, of deze syntax bij acces werkt weet ik niet (Op die manier maakt het niet uit welke datum je neemt)

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
Staat die query zo hardcoded in je asp-code, of bouw je die query zelf op ?

https://fgheysels.github.io/


  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 23:35
die query wordt gevuld dmv van variabelen .. hier de volledige code
code:
1
2
3
    sql = "INSERT INTO Events (Datum,Naam,Website,Open,Sluiten,Locatie,Organisatie,Bezoekers,Stijlen) VALUES
(" & maand & "-" & dag & "-" & jaar & ",'" & naam & "','" & website & "'," & open & "," & sluiten & "," 
& locatie & "," & organisatie & "," & bezoekers & "," & stijl & ");"

[ Voor 35% gewijzigd door ScuL op 06-07-2004 15:37 ]

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
Haha....
Gebruik parametrized queries. :P
(Zie de FAQ waarom, onder het SQL kopje staat er een stukje).

En wat eigenlijk helemaal ranzig is, is de manier waarop je die datum opbouwt. Wat als het date-scheidingsteken nu eens geen - is?
Maar goed, met parametrized queries wordt dit allemaal opgelost.

https://fgheysels.github.io/


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
gooi eens een Cdate() om je datum heen.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • amiga1260
  • Registratie: Juni 2003
  • Laatst online: 02-05 16:11
Probeer de datum als tekst item te gebruiken, misschien werkt het dan wel. Of probeer de insert-statement per item in te vullen dus eerst de eerste veld vullen en die testen en daarna de tweede enz.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
whoami schreef op 06 juli 2004 @ 15:39:
Haha....
Gebruik parametrized queries. :P
(Zie de FAQ waarom, onder het SQL kopje staat er een stukje).
en als je het waarom weet, kan je het op deze manier implementeren in ASP:
[rml]intrix in "[ ASP] parametrized queries"[/rml]

https://fgheysels.github.io/


  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 23:35
amiga1260 schreef op 06 juli 2004 @ 15:41:
Probeer de datum als tekst item te gebruiken, misschien werkt het dan wel. Of probeer de insert-statement per item in te vullen dus eerst de eerste veld vullen en die testen en daarna de tweede enz.
Ik had al geprobeerd om het veld voor veld te vullen maar de error bleef hetzelfde.


@whoami .. ik begrijp nu wat je bedoelt, ik ga zo even kijken hoe en of ik het kan implementeren.


-edit-

hmm Cdate heeft ook geen effect.
het implementeren van parametric queries heeft wel wat om 't hand omdat het asp bestand dat ik gebruik om de query uit te voeren niet alleen voor deze query wordt gebruikt.

in dat bestand zitten diverse routines die dmv de Querystring bepalen wat er aangepast moet worden in de database en dat vervolgens verwerken, dus als ik opeens voor code 'evt' (event) een parametric query ga inbouwen dan moet ik de rest van de routines ook aanpassen.

[ Voor 34% gewijzigd door ScuL op 06-07-2004 16:04 ]

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


Verwijderd

Ik heb dit probleem ook eens gehad. De oplossing was het plaatsen van hekjes ipv quotes bij de datum. Bv: #1/1/2004#

  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 23:35
Verwijderd schreef op 06 juli 2004 @ 16:03:
Ik heb dit probleem ook eens gehad. De oplossing was het plaatsen van hekjes ipv quotes bij de datum. Bv: #1/1/2004#
maakt geen verschil.

en ik heb nu ook geprobeerd om het dbveldtype te veranderen van 'datum/tijd' naar 'tekst' maar dat maakt ook geen verschil.

rest nog de vraag..
waarom werkt mijn query WEL in access en niet in ASP

[ Voor 13% gewijzigd door ScuL op 06-07-2004 16:10 ]

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
:X
Waarom zou je dat veld van type datetime naar tekst veranderen? Dat zorgt enkel voor nog meer problemen, zeker als je later wilt gaan rekenen met die datum, of als je bv. gegevens wilt ophalen van een bepaalde maand/jaar.
Daarnaast heb je dan ook geen garantie dat de datums in dat veld geldige datums zijn, en heb je de mogelijkheid dat die data in allerlei verschillende formaten wordt opgeslagen.

Ik zeg het nog 1x : gebruik parametrized queries, het is misschien wel wat meer werk, maar dan heb je ook wat: je hoeft je geen zorgen te maken over het datum-formaat, je hoeft je geen zorgen te maken over SQL injection, quotes in teksten, etc...

https://fgheysels.github.io/


  • watzie
  • Registratie: Juni 2001
  • Laatst online: 16-05 15:09
-ScuL- schreef op 06 juli 2004 @ 16:09:
[...]


maakt geen verschil.

en ik heb nu ook geprobeerd om het dbveldtype te veranderen van 'datum/tijd' naar 'tekst' maar dat maakt ook geen verschil.

rest nog de vraag..
waarom werkt mijn query WEL in access en niet in ASP
Omdat je ASP command eerst nog door je ODBC bridge heengaat. Je bent dus GEEN native Access SQL meer aan het uitvoeren!
Daarom was de opmerking van ## om je datum heen wel heel belangrijk omdat dat in ieder geval zowel door odbc als door access heen geaccepteerd wordt als een 'dit is een datum' marker. Of dat het nou oplost of niet, laat het er wel in.
Verder: lees what whoami schrijft. Altijd altijd ALTIJD parameterized queries gebruiken! In elke taal, op elk platform, voor elk DBMS. Geen uitzonderingen.

[ Voor 13% gewijzigd door watzie op 06-07-2004 16:16 . Reden: naar whoami verwijzen ]


  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 23:35
whoami schreef op 06 juli 2004 @ 16:11:
:X
Waarom zou je dat veld van type datetime naar tekst veranderen? Dat zorgt enkel voor nog meer problemen, zeker als je later wilt gaan rekenen met die datum, of als je bv. gegevens wilt ophalen van een bepaalde maand/jaar.
Daarnaast heb je dan ook geen garantie dat de datums in dat veld geldige datums zijn, en heb je de mogelijkheid dat die data in allerlei verschillende formaten wordt opgeslagen.


Ik zeg het nog 1x : gebruik parametrized queries, het is misschien wel wat meer werk, maar dan heb je ook wat: je hoeft je geen zorgen te maken over het datum-formaat, je hoeft je geen zorgen te maken over SQL injection, quotes in teksten, etc...
omdat het hierboven werd aangegeven en het waard was te testen (zo ontdek je iig of de syntaxis van de datum de oorzaak van de error is).. maar zoals gezegd het maakte geen verschil.

volgens mij zit mijn probleem ergens anders in (referenties oid).. ik ben er niet van overtuigd dat ik met een query die op een andere manier is opgebouwd (parametrized) deze fout voorkom alhoewel ik wel ben overtuigd in het nut ervan ;)

[ Voor 48% gewijzigd door ScuL op 06-07-2004 16:15 ]

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


  • watzie
  • Registratie: Juni 2001
  • Laatst online: 16-05 15:09
Heb je wel ## om 1/1/2004 gezet? #1-1-2004# gaat natuurlijk NIET werken! Bij odbc hebben ze nooit van localization gehoord

  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 23:35
ja ik heb #1/1/2004# gebruikt :)
(sterker nog, als ik het datum veld geheel weg laat uit de INSERT statement dan krijg ik de error alsnog)

[ Voor 63% gewijzigd door ScuL op 06-07-2004 16:19 ]

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
-ScuL- schreef op 06 juli 2004 @ 16:15:
[...]


volgens mij zit mijn probleem ergens anders in (referenties oid).. ik ben er niet van overtuigd dat ik met een query die op een andere manier is opgebouwd (parametrized) deze fout voorkom alhoewel ik wel ben overtuigd in het nut ervan ;)
Try it, and you will see.

https://fgheysels.github.io/


Verwijderd

Misschien dat er een woord in query voorkomt dat verkeerd wordt geïnterpreteerd. Ik weet niet precies welke woorden dit zijn, maar het lijkt mij dat hier alleen 'open' en 'events' voor in aanmerking komen. Zet hier eens rechte haken omheen dus:

INSERT INTO [Events] (Datum,Naam,Website,[Open], .... blah blah blah

Verwijderd

Jaspertje schreef op 06 juli 2004 @ 15:35:
Bij SQL Server is het het meest verstandig om 1-Sep-2004 in te voeren, of deze syntax bij acces werkt weet ik niet (Op die manier maakt het niet uit welke datum je neemt)
zelf ben ik meer fan van 2004-12-31. Werkt in alle taalinstellingen en is wat makkelijker te fabrieken dan een textuele maand

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

En dicht. Dit gaat zo nergens meer over; na 23 posts is er nog niets een bekend waar de fout zit. Welk element zorgt er voor dat het mis gaat. Zo lang dat niet bekend is, kunnen we gaan gokken, zweven, alles roepen wat er mogelijk is, maar dat schiet niet echt op. :)

Voor de topicstarter: Ga eerst eens uitzoeken waar het fout gaat, Welk element, door onderdelen van je query te verwijderen / te wijzigen, het fout gaat.
Dit is een kwestie van debuggen; iets wat je zelf moet kunnen. In de PW-FAQ heb ik destijds al een en ander hierover geschreven hoe je dat moet doen.

Pas als je de oorzaak gevonden hebt, kunnen we pas iets zeggen.

[ Voor 15% gewijzigd door gorgi_19 op 06-07-2004 16:30 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

Ik geloof dat de Topicstarter nog wat wilde toevoegen :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 23:35
Verwijderd schreef op 06 juli 2004 @ 16:27:
Misschien dat er een woord in query voorkomt dat verkeerd wordt geïnterpreteerd. Ik weet niet precies welke woorden dit zijn, maar het lijkt mij dat hier alleen 'open' en 'events' voor in aanmerking komen. Zet hier eens rechte haken omheen dus:

INSERT INTO [Events] (Datum,Naam,Website,[Open], .... blah blah blah
En JIJ gaat door voor de magnetron :+

Het kwam dus inderdaad door het woordje 'open'.
Ik gebruik het in de zin van openingstijd, maar SQL snapt het niet en ziet het als een statement.

Dat veroorzaakt de error.

In al mijn debugging pogingen heb ik dit over het hoofd gezien, echter toen ik begon met een kale query en alleen het veld 'naam' begon me iets te dagen.

Voor toekomstige GoT-ers met problemen dus:
Gebruik niet veldnaam 'Open' in een query zonder brackets []

en whoami nog bedankt voor je parametric gebeuren, ik ga daar in de toekomst zeker naar kijken als ik een ander projectje begin :)

[ Voor 11% gewijzigd door ScuL op 06-07-2004 17:00 ]

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
-ScuL- schreef op 06 juli 2004 @ 17:00:
[...]


en whoami nog bedankt voor je parametric gebeuren, ik ga daar in de toekomst zeker naar kijken als ik een ander projectje begin :)
Mjah, niet dus....
Je doet het het best al voor alle projecten. Inclusief dit.

https://fgheysels.github.io/

Pagina: 1