[ACCESS] Query werkt niet altijd?

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

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Ik heb een query welke als volgt is :

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT u.user_id, u.Username, u.Group_ID, u.mail, u.showmail, u.homepage, u.Signature, 
u.attach_sig_all, u.attach_sig, u.Post_No, u.Join_Date, u.Avatars, u.last_visit, 
u.Time_offset, u.Time_offset_hours, u.Snel_Reageren, u.Active_Users, u.Pm_Notify, 
u.SkinNumber, u.Forum_Descriptions, u.Post_Order, u.Show_preview_posts, 
u.Open_Topic_Action, u.Resize_images, u.Push_down_locked, u.language_user, u.Standard_action, 
s.Skin_ID, s.Skin_Name, s.Skin_Template_map, s.Skin_Css_File, l.Language_file, 
g.Group_Permission, se.IP_Address, se.IP_Connected, 
(SELECT COUNT(*) FROM tblpm p WHERE p.PM_Read = false AND p.RECEIVER_ID = u.User_ID) AS new_pm, 
(SELECT COUNT(*) FROM tblpm p2 WHERE p2.RECEIVER_DELETE = false AND p2.RECEIVER_ID = u.User_ID) AS aantal_pm 
FROM tblUsers u, tblSessions se, tblGroups g, tblLanguages l, tblskins s 
WHERE g.Group_ID = u.Group_ID 
AND se.User_ID = u.User_ID 
AND u.language_user = l.language_id 
AND s.Skin_ID = u.SkinNumber 
AND se.User_code = ' {usercode}'

Deze word gebruikt om gebruikersgegevens op te halen, en werkt meestal ook.
Echt komt het ook wel eens voor dat de query ineens niet meer werkt en dus een foutmelding genereert.

Ligt dit aan access of klopt er toch iets niet helemaal aan die query?
Ik kan namelijk niet vinden, wat er dout aan zou kunnen zijn.
Zou hij te ingewikkeld zijn voor access?

Verwijderd

Mischa,

wat voor foutmelding wordt er gegeven? Is het een SQL-foutmelding of een 'algemene' foutmelding uit Access zelf.

--Marc

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

gorgi_19

Kruimeltjes zijn weer op :9

Welke foutmelding? Onder welke omstandigheden gaat het fout?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
De omstandigheden zijn altijd hetzelfde, Soms doe je een refresh en ineens gaat het op die query fout.

Stom dat ik de foutmelding vergeet. Dit is hem in ieder geval:
Error Description: No value given for one or more required parameters.

Maar waar die foutmelding vandaan komt is mij een raadsel.

Verwijderd

Dit komt waarschijnlijk omdat 1 van de velden in de where-statements van je sub-selects af en toe een Null doorkrijgt. In Access ( en veel andere databases ) moet je een vergelijking met Null niet met "=" doen maar met "is"

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Verwijderd schreef op vrijdag 05 augustus 2005 @ 15:43:
Dit komt waarschijnlijk omdat 1 van de velden in de where-statements van je sub-selects af en toe een Null doorkrijgt. In Access ( en veel andere databases ) moet je een vergelijking met Null niet met "=" doen maar met "is"
bedoel je dit stukje?
code:
1
2
(SELECT COUNT(*) FROM tblpm p WHERE p.PM_Read = false AND p.RECEIVER_ID = u.User_ID) AS new_pm, 
(SELECT COUNT(*) FROM tblpm p2 WHERE p2.RECEIVER_DELETE = false AND p2.RECEIVER_ID = u.User_ID) AS aantal_pm

Maar hoe kan dat dan? De ene keer wel en de andere keer wel?
terwijl ik geen nieuwe pm's bij heb gekregen.
Btw, een wount returnt geen null maar altijd een getal lijkt me?

[ Voor 4% gewijzigd door Mischa_NL op 05-08-2005 16:27 ]


Verwijderd

Mischa_NL schreef op vrijdag 05 augustus 2005 @ 16:27:
[...]

bedoel je dit stukje?
code:
1
2
(SELECT COUNT(*) FROM tblpm p WHERE p.PM_Read = false AND p.RECEIVER_ID = u.User_ID) AS new_pm, 
(SELECT COUNT(*) FROM tblpm p2 WHERE p2.RECEIVER_DELETE = false AND p2.RECEIVER_ID = u.User_ID) AS aantal_pm

Maar hoe kan dat dan? De ene keer wel en de andere keer wel?
terwijl ik geen nieuwe pm's bij heb gekregen.
Btw, een wount returnt geen null maar altijd een getal lijkt me?
Het gaat ook niet over de count, maar over de regels "p.RECEIVER_ID = u.User_ID" en "p2.RECEIVER_ID = u.User_ID"

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Verwijderd schreef op vrijdag 05 augustus 2005 @ 16:30:
[...]

Het gaat ook niet over de count, maar over de regels "p.RECEIVER_ID = u.User_ID" en "p2.RECEIVER_ID = u.User_ID"
Verwijderd schreef op vrijdag 05 augustus 2005 @ 15:43:
Dit komt waarschijnlijk omdat 1 van de velden in de where-statements van je sub-selects af en toe een Null doorkrijgt. In Access ( en veel andere databases ) moet je een vergelijking met Null niet met "=" doen maar met "is"
Dat zijn toch geen subselects?
Maargoed, dat is onmogelijk.
Dus ik concludeer dat Access een baggerdatabase is.
Of kan het ook nog iets anders zijn?

Elke user heeft namelijk een group, session, language, skin en user_id.
Het is ook niet dat hij altijd niet werkt maar soms gaat het zo:
je surft op het forum en ineens (zonder dat je post oid, helemaalniks) wordt die query niet goed uitgenvoerd.
Dat moet toch bijna wel aan access liggen?

EDIT/ Zou het er misschien aan kunnen liggen dat hij het niet voor elkaar krijgt omdat het soms wel eens is dat ik een hoofdletter gebruik voor een column in de query maar niet in de database?
Lijkt me niet want dan moet hij altijd een error geven.
Ik snap er echt werkelijk niks van 8)7

[ Voor 15% gewijzigd door Mischa_NL op 05-08-2005 17:22 ]


Verwijderd

Vraagje : Vervang je in je query de waarde {usercode} door een tekst, en voer ja daarna het verkregen SQL-statement uit ? Komen er toevallig quotes in je usercodes voor ? Dat is namelijk ook een mogelijkheid !

Indien dit het geval is, haal dan eerst een Replace(usercode,"'","''") over je usercode heen
( vervang 1 enkele quote door 2 enkele quotes )

Access is niet hoofdlettergevoelig trouwens.

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Nee in de usercode komt geen ' voor.
Het is een md5 hash namelijk.
En ja, die usercode word vervangen door de md5 hash uit de cookie om te kijken welke user er ingelogd is.
Het gaat ook niet over de count, maar over de regels "p.RECEIVER_ID = u.User_ID" en "p2.RECEIVER_ID = u.User_ID"
Maar dat zou moeten beteken dat user_id null is en dat is 100% onmogelijk.

Ik raak er steeds meer van overtuigd dat het een tekortkoming in Access is of iets dergelijks.
Aan de query kan het gewoon niet liggen als ik het zo zie.

Want nogmaals als ik 2 keer dezelfde query heb en 1 keer doet hij het wel en de andere keer niet terwijl heel de situatie hetzelfde is, dan kan het toch niet aan de query liggen?

Verwijderd

Mischa_NL schreef op vrijdag 05 augustus 2005 @ 20:19:
Nee in de usercode komt geen ' voor.
Het is een md5 hash namelijk.
En ja, die usercode word vervangen door de md5 hash uit de cookie om te kijken welke user er ingelogd is.


[...]

Maar dat zou moeten beteken dat user_id null is en dat is 100% onmogelijk.

Ik raak er steeds meer van overtuigd dat het een tekortkoming in Access is of iets dergelijks.
Aan de query kan het gewoon niet liggen als ik het zo zie.

Want nogmaals als ik 2 keer dezelfde query heb en 1 keer doet hij het wel en de andere keer niet terwijl heel de situatie hetzelfde is, dan kan het toch niet aan de query liggen?
Access als database is echt niet slecht, en heel goed bruikbaar voor kleinere databases.

Maar om even verder te puzzelen wat er nu fout gaat :

De foutmelding "Error Description: No value given for one or more required parameters." die je aangeeft krijg je in Access wanneer je een tikfout maakt in een veldnaam, of in een constante waarde zodat Access het ziet als een variabele.

Heb je al een gekeken was het SQL-statement bevat wanneer het fout gaat ? Om eens echt te debuggen dus ? Geef bij fout het statement weer op het scherm, of log het in een bestand, grote kans dat je daar iets aan kunt zien.

Oh ja, en haal ook eens Access "Compact and Repair" optie over de database heen.

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
zal ik het log bestand eens posten, dan zie je dat het (zoals ik al een aantal keer zeg) niet aan de query ligt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
---------------------------------------------------
internal error :: database abstraction layer :: SELECT u.user_id, u.Username, u.Group_ID, u.mail, u.showmail, u.homepage, u.Signature, u.attach_sig_all, u.attach_sig, u.Post_No, u.Join_Date, u.Avatars, u.last_visit, u.Time_offset, u.Time_offset_hours, u.Snel_Reageren, u.Active_Users, u.Pm_Notify, u.SkinNumber, u.Forum_Descriptions, u.Post_Order, u.Show_preview_posts, u.Open_Topic_Action, u.Resize_images, u.Push_down_locked, u.language_user, u.Standard_action, s.Skin_ID, s.Skin_Name, s.Skin_Template_map, s.Skin_Css_File, l.Language_file, g.Group_Permission, se.IP_Address, se.IP_Connected, (SELECT COUNT(*) FROM tblpm p WHERE p.PM_Read = false AND p.RECEIVER_ID = u.User_ID) AS new_pm, (SELECT COUNT(*) FROM tblpm p2 WHERE p2.RECEIVER_DELETE = false AND p2.RECEIVER_ID = u.User_ID) AS aantal_pm FROM tblUsers u, tblSessions se, tblGroups g, tblLanguages l, tblskins s WHERE g.Group_ID = u.Group_ID AND se.User_ID = u.User_ID AND u.language_user = l.language_id AND s.Skin_ID = u.SkinNumber AND se.User_code = 'vuoo64hk62f5zz0ab2fj1abpux2b775w' :: 0 :: 1

Time: 5-8-2005 1:52:16
User: Guest
Die Message: Could not query user data.
Error File: /forum/index.asp
Error Source: Microsoft JET Database Engine
Error Description: No value given for one or more required parameters.
---------------------------------------------------





---------------------------------------------------
internal error :: database abstraction layer :: SELECT u.user_id, u.Username, u.Group_ID, u.mail, u.showmail, u.homepage, u.Signature, u.attach_sig_all, u.attach_sig, u.Post_No, u.Join_Date, u.Avatars, u.last_visit, u.Time_offset, u.Time_offset_hours, u.Snel_Reageren, u.Active_Users, u.Pm_Notify, u.SkinNumber, u.Forum_Descriptions, u.Post_Order, u.Show_preview_posts, u.Open_Topic_Action, u.Resize_images, u.Push_down_locked, u.language_user, u.Standard_action, s.Skin_ID, s.Skin_Name, s.Skin_Template_map, s.Skin_Css_File, l.Language_file, g.Group_Permission, se.IP_Address, se.IP_Connected, (SELECT COUNT(*) FROM tblpm p WHERE p.PM_Read = false AND p.RECEIVER_ID = u.User_ID) AS new_pm, (SELECT COUNT(*) FROM tblpm p2 WHERE p2.RECEIVER_DELETE = false AND p2.RECEIVER_ID = u.User_ID) AS aantal_pm FROM tblUsers u, tblSessions se, tblGroups g, tblLanguages l, tblskins s WHERE g.Group_ID = u.Group_ID AND se.User_ID = u.User_ID AND u.language_user = l.language_id AND s.Skin_ID = u.SkinNumber AND se.User_code = 'vuoo64hk62f5zz0ab2fj1abpux2b775w' :: 0 :: 1

Time: 5-8-2005 2:05:38
User: Guest
Die Message: Could not query user data.
Error File: /forum/index.asp
Error Source: Microsoft JET Database Engine
Error Description: No value given for one or more required parameters.
---------------------------------------------------


Het mooie is alleen dat de keer daarna de query het WEL deed, en je ziet dat dit al een hoop dezelfde query's zijn.
tussen 1:52 en 2:05 deed de query het dus gewoon. en hij was PRECIES hetzelfde.
Echt een ernstig vaag probleem.

Hij geeft aan bij user 'guest' omdat het gebeurd voordat bekend is welke user hij is, omdat dat dmv deze query uit de db gehaald word :).

Het gebeurd hier toevallig steeds op index.asp, maar het gebeurd in werkelijkheid in common.asp welke in alle andere is geinclude. de 0 :: 1 is lock/cursortype.
Dat is dus forwardonly en readonly.

EDIT/
Compact en repair haal ik er iedere dag overheen, neem niet aan dat het zovaak moet gebeuren, maar ik doe het toch maar, en nog steeds errors! ;)

[ Voor 93% gewijzigd door Mischa_NL op 05-08-2005 23:11 ]


Verwijderd

hmmm, al eens geprobeerd om zo'n foute SQL-statement uit je Errorlog (dus exact zoals het uitgevoerd is ) te copy-pasten naar Access en te kijken of het daar ook fout gaat ? En zo ja, wis dan stukjes van het statement totdat je kunt lokaliseren waar het fout gaat.

( Vind het probleem ook raar,ik zit nu een beetje met je mee te debuggen op de manier waarop ik het nu doen )

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
In Access heb ik iets van 50 keer op run gedrukt, en werkt ook 50 keer.
Het vervelende is dat hij wel 500 keer kan werken :') .

Ik blijf het een heel erg aparte error vinden. Vreselijk irritant.
Ik ga nog ff runnen :')

Verwijderd

Frustrerend kan dit soort fouten zijn hè ?

Sorry. Ik weet het ook niet meer, ik ben nu door mijn trukendoos heen. Het enige dat ik in dit geval nog zou doen is goed in de gaten houden wanneer het gebeurt, en er achter zien te komen wat de omstandigheden zijn. zoals je zelf al zegt, lijkt je SQL goed te zijn, dus lijkt het mij toch ergens in de data te zitten. Misschien dat de Lazy writing van Access in de weg zit.

Trouwens, even klein dingetje ernaast : Waarom maak je geen vaste query hiervan in Access, zodat je alleen een Select.....where usercode = <usercode> hoeft te doen. Een query in Access vastleggen kan voordelig zijn, en zou wel eens je probleem op kunnen lossen ( is dan reeds compiled aanwezig in de DB )

In ieder geval succes, en als je er ooit achter komt zou ik wel willen weten waar het nu aan lag.

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Kick.

Nu had ik het ook bij een andere query.
Is het misschien zo dat access soms moeite heeft met zeer ingewikkelde joins?
Ik join bv in deze query 5 tabellen en heb ook nog 3 subquery's in de select.

In principe moet dat toch geen probleem mogen zijn?
Pagina: 1