[ASP]ODBC Drivers error '80040' en discussie met klant

Pagina: 1
Acties:

  • Beaves
  • Registratie: Februari 2000
  • Laatst online: 05-05 16:53

Beaves

Usque ad Finem

Topicstarter
We draaien een Windows 2000 webserver waarop shared hosting wordt aangeboden. Op die machine draaien ongeveer 20 klanten, die onder andere zelf een Access database kunnen gebruiken of MySQL. Nu is er een klant die access gebruikt en die verschillende errors krijgt als hij met die database werkt. Een van die foutmeldingen is
code:
1
2
3
4
5
6
INSERT INTO Tbl_auto (auto_id, merk, model, prijs, bouwjaar, apk, carrosserie, kleur, kmstand, brandstof, transmissie, omschrijving, date_added) VALUES (5, 'Ford', 'Focus', , '', '', 'Personenauto', '', 0, 'Benzine', 'Handgeschakeld (5)', '', '6/28/2005') 
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 

[Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement. 

/beheer/Auto_Frm_Post.asp, line 107

Nu is er op internet genoeg te vinden over deze errot en volgens mij zit de fout bij de klant (de ontwikkelaar eigenlijk) en niet bij ons, maar hij blijft volhouden dat het bij de rest van zijn klanten wel werkt, dus op servers van andere providers. Ik heb daarom de complete configuratie al langs gelopen (is namelijk een Windows 2000 machine met IISLockdown en andere security aanpassingen). Zo heb ik het complete document wat op http://support.microsoft.com/kb/271071 staat doorgelopen en heb de security op de map waarin de access database staat (staat niet in webroot maar een niveau hoger uit veiligheidsoverwegingen) alle rechten gegeven voor zowel de user zelf als voor de IUSR. Ik zou niet weten wat er nog anders aangepast zou moeten worden om dit werkend te krijgen.

De klant gebruikt overigens ADODB om de database aan te spreken. Er is ook een System DSN aangemaakt met als naam de naam van de klant.
code:
1
2
3
4
5
6
<%
   set conn = Server.Createobject("ADODB.Connection")
   DataSource = "DRIVER={Microsoft Access Driver (*.mdb)}; "
   DataSource = DataSource & "DBQ=" & server.mappath("pad naar database")
   conn.open DataSource
%>


Al onze andere klanten gebruiken Jet OLEDB als connectie manier.
Wie o wie kan mij zeggen wat ik nog meer kan testen/configureren?

Schotlandofiel | Godzijdank ben ik atheïst
Canon 7D / 20D / 300D + glas | Just Light | Flickr


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:36
Er zit wel degelijk een syntax error in die SQL string; de fout zit 'm dus bij diegene die die query geschreven heeft.
VALUES (5, 'Ford', 'Focus', , '',
(Zie die 2 komma's na elkaar).

[ Voor 26% gewijzigd door whoami op 28-06-2005 09:17 ]

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Volgens mij moet je bij Access # om datumwaardes gebruiken, en geen ' .Daarnaast is er een dubbele komma achter Focus. Duidelijk een geval van de fout ligt bij de klant. Er zitten syntax errors in het insert into statement.

Overigens zou ik willen aanraden geen DSN meer te gebruiken, maar DSN-less OLE DB connecties te gebruiken. Maar ook dat moet de klant doen.

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


  • Beaves
  • Registratie: Februari 2000
  • Laatst online: 05-05 16:53

Beaves

Usque ad Finem

Topicstarter
Dat dacht ik al, zeker omdat je bij te weinig rechten een hele andere SQL error krijgt. Over dat DSN gedoe, ik heb dat even aangemaakt om als test zeker te weten dat het daar niet aan zou liggen.

In ieder geval bedankt, ik ga nu even de klant bellen. :)

[ Voor 68% gewijzigd door Beaves op 28-06-2005 09:21 ]

Schotlandofiel | Godzijdank ben ik atheïst
Canon 7D / 20D / 300D + glas | Just Light | Flickr


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:36
P_de_B schreef op dinsdag 28 juni 2005 @ 09:17:
Volgens mij moet je bij Access # om datumwaardes gebruiken, en geen ' .
Mja, wie weet stopt die klant wel een datum in een tekst-veld. :+

https://fgheysels.github.io/


  • Beaves
  • Registratie: Februari 2000
  • Laatst online: 05-05 16:53

Beaves

Usque ad Finem

Topicstarter
Dit is overigens zijn code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sql = "INSERT INTO Tbl_auto " _
                & "(auto_id, merk, model, prijs, bouwjaar, apk, carrosserie, kleur, kmstand, brandstof, transmissie, omschrijving, date_added) " _
                & "VALUES (" _
                & next_id & ", " _
                & "'" & merk & "', " _
                & "'" & model & "', " _
                & prijs & ", " _
                & "'" & bouwjaar & "', " _
                & "'" & apk & "', " _
                & "'" & carrosserie & "', " _
                & "'" & kleur & "', " _
                & kmstand & ", " _
                & "'" & brandstof & "', " _
                & "'" & transmissie & "', " _
                & "'" & omschrijving & "', " _
                & "'" & date() & "'" _
                & ")"
                returnstring = "?auto_id=" & next_id

Schotlandofiel | Godzijdank ben ik atheïst
Canon 7D / 20D / 300D + glas | Just Light | Flickr


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:36
Lekker veilig ook....

Ff uit interesse; hoe bepaalt ie z'n 'next_id' ?

Nuja, dat met die datum is in ieder geval niet goed; of hij bewaart z'n datum in een tekst-veld :X, of hij doet dat niet, maar dan moet hij idd # gebruiken ipv '.

[ Voor 110% gewijzigd door whoami op 28-06-2005 09:27 ]

https://fgheysels.github.io/


  • Beaves
  • Registratie: Februari 2000
  • Laatst online: 05-05 16:53

Beaves

Usque ad Finem

Topicstarter
whoami schreef op dinsdag 28 juni 2005 @ 09:25:
Lekker veilig ook....

Ff uit interesse; hoe bepaalt ie z'n 'next_id' ?
Zo:
code:
1
next_id = nextid("auto_id","Tbl_auto")


Ik kan helaas niet zijn access database openen, ik heb geen access op mijn pc dus ik kan helaas niet kijken hoe de velden gedefinieerd zijn.

[ Voor 30% gewijzigd door Beaves op 28-06-2005 09:29 ]

Schotlandofiel | Godzijdank ben ik atheïst
Canon 7D / 20D / 300D + glas | Just Light | Flickr


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:36
En hoe ziet die nextid method eruit ?
Ik hoop voor 'm dat hij geen SELECT MAX() doet om het id te bepalen...

https://fgheysels.github.io/


Verwijderd

whoami schreef op dinsdag 28 juni 2005 @ 09:17:
Er zit wel degelijk een syntax error in die SQL string; de fout zit 'm dus bij diegene die die query geschreven heeft.


[...]


(Zie die 2 komma's na elkaar).
Die 2 kommas zijn niet noodzakelijk een syntaxerror. Als er een numeriek veld leeg blijft, wordt dat zo aangeduid.(tekstveld is dan '')
De fout kan hem zitten in het feit dat hij een numerieke waarde (zonder quotes rond) in een tekstveld probeert te zetten, of omgekeerd.
In de code kun je niet zien of dat het geval is, daarvoor zouden we ook de tabeldefinitie moeten zien.
De fout ligt bijna zeker bij de programmeur, aangezien het een syntaxfout is. Het zou aan de serverconfiguratie kunnen liggen indien het een connection-fout ofzo is.
De sql-syntax blijft altijd en overal gelijk en het feit dat het over een sql-fout gaat wil eigenlijk zeggen dat er op dat moment wel degelijk verbinding is geweest met de database...

  • Beaves
  • Registratie: Februari 2000
  • Laatst online: 05-05 16:53

Beaves

Usque ad Finem

Topicstarter
Ik zal even kijken, even uit pure nieuwschierigheid, hoe dient de query wél te zijn? Dit om de klant ook duidelijk te melden hoe het wel moet.

Schotlandofiel | Godzijdank ben ik atheïst
Canon 7D / 20D / 300D + glas | Just Light | Flickr


Verwijderd

Beaves schreef op dinsdag 28 juni 2005 @ 09:18:
Dat dacht ik al, zeker omdat je bij te weinig rechten een hele andere SQL error krijgt.
Bij te weinig rechten is het iets van 'must use updatable query' ofzo...

  • Beaves
  • Registratie: Februari 2000
  • Laatst online: 05-05 16:53

Beaves

Usque ad Finem

Topicstarter
Yep, klopt, op precies te zijn Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver] Operation must use an updateable query.
:)

Schotlandofiel | Godzijdank ben ik atheïst
Canon 7D / 20D / 300D + glas | Just Light | Flickr


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:36
Verwijderd schreef op dinsdag 28 juni 2005 @ 09:39:
[...]


Die 2 kommas zijn niet noodzakelijk een syntaxerror. Als er een numeriek veld leeg blijft, wordt dat zo aangeduid.(tekstveld is dan '')
Dat is kwatsch.

Probeer het maar uit, maak een access DB, met een simpele tabel en probeer het eens; het zal niet werken, je zult een syntax error krijgen.

Als je niets in dat veld wilt zetten, dan zet je daar NULL, ofwel neem je het volledig niet op in uw insert statement.

Die klant zou trouwens beter parametrized queries gaan gebruiken, ipv z'n queries mbhv string concatenation aan elkaar te plakken.

[ Voor 24% gewijzigd door whoami op 28-06-2005 09:50 ]

https://fgheysels.github.io/


Verwijderd

whoami schreef op dinsdag 28 juni 2005 @ 09:44:
[...]


Probeer het maar uit, maak een access DB, met een simpele tabel en probeer het eens; het zal niet werken, je zult een syntax error krijgen.
inderdaad,
kwas er nogthans van overtuigd. Ik verwar het waarschijnlijk met iets anders... 8)7

  • Beaves
  • Registratie: Februari 2000
  • Laatst online: 05-05 16:53

Beaves

Usque ad Finem

Topicstarter
Ik heb net Access geïnstalleerd en er wordt voor de datum niet gebruik gemaakt van een textveld, maar van een date/time veld. De prijs wordt in een numeriek veld opgeslagen.

Schotlandofiel | Godzijdank ben ik atheïst
Canon 7D / 20D / 300D + glas | Just Light | Flickr


Verwijderd

Beaves schreef op dinsdag 28 juni 2005 @ 10:11:
Ik heb net Access geïnstalleerd en er wordt voor de datum niet gebruik gemaakt van een textveld, maar van een date/time veld. De prijs wordt in een numeriek veld opgeslagen.
Voila, dan ligt het probleem hoogstwaarschijnlijk aan die ,, is de sql-string. De inhoud van 'prijs' moet dus NULL of 0 worden. Nu zit er blijkbaar niets in en blijkbaar wordt 'niets' niet als NULL weergegeven...
Ik zou opteren voor die 0 :)
Die datum mag gerust in een textveld staan, als het louter informatief is en er niet mee moet gerekend worden.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Verwijderd schreef op dinsdag 28 juni 2005 @ 10:19:
[...]

Die datum mag gerust in een textveld staan, als het louter informatief is en er niet mee moet gerekend worden.
Dat mag nooit, je krijgt geheid ooit een keer problemen. Waarom niet direct de goede oplossing? Als het een Datetime veld is, moeten er dus ook nog # gebruikt worden om de waarde.

Hoe komt die klant erbij dat het wel werkt op andere servers?

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


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:36
Verwijderd schreef op dinsdag 28 juni 2005 @ 10:19:
[...]


Voila, dan ligt het probleem hoogstwaarschijnlijk aan die ,, is de sql-string. De inhoud van 'prijs' moet dus NULL of 0 worden. Nu zit er blijkbaar niets in en blijkbaar wordt 'niets' niet als NULL weergegeven...
Ik zou opteren voor die 0 :)
Als de prijs niet gekend is, dan zet je er NULL in, als de prijs 0 is, als in gratis, dan zet je er 0 in.
Er is een verschil tussen NULL (niet gekend) en 0 (gratis).
Die datum mag gerust in een textveld staan, als het louter informatief is en er niet mee moet gerekend worden.
Datums moet je nooit in een textveld zetten, dat geeft de gebruiker zowiezo te veel vrijheid, en wie garandeert je dat je er niet moet mee 'rekenen' ?
Stel bv dat je alle auto's wilt, die in 2004 zijn toegevoegd .

Als de datum in een tekstveld staat, dan heb je teveel vrijheid; je kan de datum dan zo invoeren:
14 juni 2005
of
14/06/2005
of
2005/06/14
etc...
en voor je het weet, zit je met een onoverzichtelijk kluwen.

Als die programmeur nu eens parametrized queries gebruikt, dan zullen er toch al een hoop problemen voor 'm opgelost zijn.
P_de_B schreef op dinsdag 28 juni 2005 @ 10:20:
[...]


Hoe komt die klant erbij dat het wel werkt op andere servers?
Dat vraag ik me ook af; waarschijnlijk gewoon bluf; ik zie geen reden waarom het bij anderen wel zou werken.
(Tenzij die klant op andere servers een andere versie van z'n app draaien heeft).

[ Voor 14% gewijzigd door whoami op 28-06-2005 10:23 ]

https://fgheysels.github.io/


  • Beaves
  • Registratie: Februari 2000
  • Laatst online: 05-05 16:53

Beaves

Usque ad Finem

Topicstarter
Dank jullie wel, ik heb net de klant gebeld en helaas was hij nog niet aanwezig, ik zal jullie op de hoogde houden in ieder geval :)

Schotlandofiel | Godzijdank ben ik atheïst
Canon 7D / 20D / 300D + glas | Just Light | Flickr

Pagina: 1