Ga naar inhoud

[ASP en Access-query] probleempje


Aanbevolen berichten

luitjes ik kom ergens helemaal niet uit. Het gaat te ver om het helemaal uit te doeken te doen, maar het komt op het volgende neer: ik ben een webapplicatie aan het ontwikkelen onder Win2000 en IIS5, met ASP en Access. De klant waar ik dit voor ontwikkel draait PWS en ik geloof WinNT5. Zij krijgen elke keer een kopie van de database die ik gebruik dus in principe zouden die hetzelfde moeten zijn. In de applicatie zit de mogelijkheid om een soort totaaloverzichten per periode uit te vragen. Op zeg maar pagina1.asp kies je d.m.v. 6 dropdowns een begin- en einddatum voor de betreffende periode. Deze waarden worden doorgestuurd naar pagina2.asp, waarin ik een StoredProcedure aanroep met deze waarden als parameter. Bij mij werkt het helemaal perfect, ik krijg er precies uit wat ik moet zien, bij de klant echter verschijnt de volgende error: [code:1:9dc314b5e5] 1 The page cannot be displayed There is a problem with the page you are trying to reach and it cannot be displayed. Please try the following: Click the Refresh button, or try again later. Open the bsl-562 home page, and then look for links to the information you want. 1.1 HTTP 500.100 - Internal Server Error - ASP error Internet Information Services -------------------------------------------------------------------------------- Technical Information (for support personnel) Error Type: ADODB.Recordset (0x800A0CC1) Item cannot be found in the collection corresponding to the requested name or ordinal. [b:9dc314b5e5]/Reports/EmployeeReport.asp, line 90[/b:9dc314b5e5] Browser Type: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461) Page: POST 117 bytes to /Reports/EmployeeReport.asp POST Data: txtDateBeginDay=01&txtDateBeginMonth=01&txtDateBeginYear=2002&txtDateEndDay=01&txtDateEndMonth=03&txtDateEndYear=2002 Time: Monday, March 11, 2002, 2:19:52 PM More information: [/code:1:9dc314b5e5] Ik denk dat nu de fout in mijn ASPcode zit en wel in de genoemde regel 90; dat hij dus een bepaald item uit de database niet zou kunnen vinden. Maar de databases van mij en van hun zijn exact gelijk (althans normaal gesproken), dus zou ook de query in Access die ik aanroep als StoredProcedure gelijk moeten zijn. Weet iemand wat hier het probleem zou kunnen zijn? Ik vermoed zelf dat door misschien wel onwetendheid van de klant er toch iets niet geod gegaan is met het kopieëren/vervangen van hun database, en dat dus misschien die query toch niet helemaal gelijk is. Alvast bedankt gr Matthijn
Link naar reactie
Ik vermoed dat het zou kunnen liggen aan de manier waarop je de datum doorgeeft. Daar zit ik namelijk altijd mee te kl*ten.. :smile: Datums doorgeven kun je doorgaans het best doen via de standaard daarvoor (ook maar van Annie geleerd): jaar-maand-dag. Dus iets van: where Datum = #2002-03-13# oid.. Als dit het niet is, toon dan eens wat van je code rond die regel. Misschien helpt dat.. Succes.. Grtz Elja
Link naar reactie
Elja, bedankt voor je reactie. Ik denk niet dat het aan het datumtype ligt. Ik weet zelf ook dat dat altijd problemen oplevert, maar heb het voor deze applicatie tot nu toe kunnen opvangen. Bovendien werkt hij bij mij dus WEL, en bij de klant niet, maar ik kan niet 1-2-3 bij de webserver van de klant. Wat ik eerder denk is dat bij hun er toch iets niet goed staat met instellingen (Landinstellingen ofzo), want met die datum heb ik dus vaker problemen gehad. Ik kan wel code posten, maar daar wordt je denk ik ook niet veel wijzer van omdat de belangrijkste handelingen in de query zelf gebeuren, maar laat ik het toch maar doen: [i:9941ccc0bc]De 1e pagina waar de datum geselecteerd wordt [b:9941ccc0bc]EmployeeReportSelect.html[/b:9941ccc0bc][/i:9941ccc0bc] [code:1:9941ccc0bc] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Untitled</title> <link rel="STYLESHEET" type="text/css" href="../Stylesheet/Style.css"> </head> <body> <h1>Report per medewerker</h1> <P> Selecteer de periode waarvan u een Report wilt zien. </p> <p> <form name="WeekReportSelectForm" method="post" action="EmployeeReport.asp"> Bepaal eerst de begindatum:<br> <select name="txtDateBeginDay"> <option value="">Dag:</option> <option value="01"> 1</option> <option value="02"> 2</option> <option value="03"> 3</option> <option value="04"> 4</option> <option value="05"> 5</option> <option value="06"> 6</option> <option value="07"> 7</option> <option value="08"> 8</option> <option value="09"> 9</option> <option value="10"> 10</option> <option value="11"> 11</option> <option value="12"> 12</option> <option value="13"> 13</option> <option value="14"> 14</option> <option value="15"> 15</option> <option value="16"> 16</option> <option value="17"> 17</option> <option value="18"> 18</option> <option value="19"> 19</option> <option value="20"> 20</option> <option value="21"> 21</option> <option value="22"> 22</option> <option value="23"> 23</option> <option value="24"> 24</option> <option value="25"> 25</option> <option value="26"> 26</option> <option value="27"> 27</option> <option value="28"> 28</option> <option value="29"> 29</option> <option value="30"> 30</option> <option value="31"> 31</option> </select>  <select name="txtDateBeginMonth"> <option value="">Maand:</option> <option value="01">Januari</option> <option value="02">Februari</option> <option value="03">Maart</option> <option value="04">April</option> <option value="05">Mei</option> <option value="06">Juni</option> <option value="07">Juli</option> <option value="08">Augustus</option> <option value-"09">September</option> <option value="10">Oktober</option> <option value="11">November</option> <option value="12">December</option> </select>  <select name="txtDateBeginYear"> <option value="">Jaar:</option> <option value="2001">2001</option> <option value="2002">2002</option> <option value="2003">2003</option> <option value="2004">2004</option> <option value="2005">2005</option> </select><br><br> Bepaal hier de einddatum:<br> <select name="txtDateEndDay"> <option value="">Dag:</option> <option value="01"> 1</option> <option value="02"> 2</option> <option value="03"> 3</option> <option value="04"> 4</option> <option value="05"> 5</option> <option value="06"> 6</option> <option value="07"> 7</option> <option value="08"> 8</option> <option value="09"> 9</option> <option value="10"> 10</option> <option value="11"> 11</option> <option value="12"> 12</option> <option value="13"> 13</option> <option value="14"> 14</option> <option value="15"> 15</option> <option value="16"> 16</option> <option value="17"> 17</option> <option value="18"> 18</option> <option value="19"> 19</option> <option value="20"> 20</option> <option value="21"> 21</option> <option value="22"> 22</option> <option value="23"> 23</option> <option value="24"> 24</option> <option value="25"> 25</option> <option value="26"> 26</option> <option value="27"> 27</option> <option value="28"> 28</option> <option value="29"> 29</option> <option value="30"> 30</option> <option value="31"> 31</option> </select>  <select name="txtDateEndMonth"> <option value="">Maand:</option> <option value="01">Januari</option> <option value="02">Februari</option> <option value="03">Maart</option> <option value="04">April</option> <option value="05">Mei</option> <option value="06">Juni</option> <option value="07">Juli</option> <option value="08">Augustus</option> <option value-"09">September</option> <option value="10">Oktober</option> <option value="11">November</option> <option value="12">December</option> </select>  <select name="txtDateEndYear"> <option value="">Jaar:</option> <option value="2001">2001</option> <option value="2002">2002</option> <option value="2003">2003</option> <option value="2004">2004</option> <option value="2005">2005</option> </select><br><br> <input type="submit" value="OK" style="color:#6c6c6c; background-color:#DBDBDB"><input type="reset" value="Reset" style="color:#6c6c6c; background-color:#DBDBDB"> </form> </p> </body> </html> [/code:1:9941ccc0bc] [i:9941ccc0bc]en de pagina waar de query wordt aangeroepen[b:9941ccc0bc]EmployeeReport.asp[/b:9941ccc0bc][/i:9941ccc0bc] [code:1:9941ccc0bc] <%@ Language=VBScript %> <% Option Explicit %> <!--#include file = "../Include/adovbs.inc"--> <!--#include file = "../Include/constanten.inc"--> <% Dim strDatabaseLocation, strConnect Dim strDateBeginDay, strDateBeginMonth, strDateBeginYear Dim strDateEndDay, strDateEndMonth, strDateEndYear Dim strDateBeginASP, strDateEndASP Dim rsIncidents Dim objComm, objParamBegin, objParamEnd Dim Days, Remainder, strNieuw Function IIf(i,j,k) If i Then IIf = j Else IIf = k End Function strDatabaseLocation = Server.MapPath("../CMDB.mdb") strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & strDatabaseLocation & ";" & _ "Persist Security Info=False" strDateBeginDay = CStr(Request.Form("txtDateBeginDay")) strDateBeginMonth = CStr(Request.Form("txtDateBeginMonth")) strDateBeginYear = CStr(Request.Form("txtDateBeginYear")) strDateEndDay = CStr(Request.Form("txtDateEndDay")) strDateEndMonth = CStr(Request.Form("txtDateEndMonth")) strDateEndYear = CStr(Request.Form("txtDateEndYear")) strDateBeginASP = strDateBeginDay & "/" & strDateBeginMonth & "/" & strDateBeginYear strDateEndASP = strDateEndDay & "/" & strDateEndMonth & "/" & strDateEndYear Set objComm = Server.CreateObject("ADODB.Command") objComm.ActiveConnection = strConnect objComm.CommandText = "EmployeeReportQuery" objComm.CommandType = adCmdStoredProc Set objParamBegin = objComm.CreateParameter("strDateBegin", adVarChar, adParamInput, 15) Set objParamEnd = objComm.CreateParameter("strDateEnd", adVarChar, adParamInput, 15) objComm.Parameters.Append objParamBegin objComm.Parameters("strDateBegin") = strDateBeginASP objComm.Parameters.Append objParamEnd objComm.Parameters("strDateEnd") = strDateEndASP Set rsIncidents = objComm.Execute Set objComm = Nothing Set objParamBegin = Nothing Set objParamEnd = Nothing %> <html> <head> <title>Untitled</title> <link rel="STYLESHEET" type="text/css" href="../Stylesheet/Style.css"> <style type="text/css"> .accent { color:#65A0D7; font-family: Verdana; font-weight: bolder; font-size: 9pt} .black { color:black; font-family: Verdana; font-weight: bolder; font-size: 9pt} </style> </head> <body> <h1>Report per Medewerker</h1> <p> <% If rsIncidents.EOF Then Response.Write "Geen calls gevonden tussen " & strDateBeginASP & " en " & strDateEndASP & "." Else Response.Write "Report calls tussen <b>" & strDateBeginASP & "</b> en <b>" & strDateEndASP & "</b> per medewerker.<br><br>" Response.Write "<table width='80%' cellspacing='5'><tr bgcolor='#EDEDED'><td>Medewerker</td><td>Aantal calls</td><td>Gemiddelde calltijd</tr>" Do While NOT rsIncidents.EOF Days = CLng(rsIncidents("Expr1")) Remainder = CDbl(rsIncidents("Expr1") - Days) strNieuw = CStr(Days & IIf(Days = 1, " dag ", " dagen ") & FormatDateTime(Remainder, 4) & " uren.") Response.Write "<tr><td><a href='EmployeeReportDetails2.asp?ID=" & rsIncidents("EmployeeID") & "&strDateBegin=" & strDateBeginASP & "&strDateEnd=" & strDateEndASP & "'><span class=""accentmedewerkerreport"">" & rsIncidents("Surname") & " " & rsIncidents("Middleinitials") & " " & rsIncidents("LastName") & "</span></a></td><td>" & rsIncidents("AantalVanIncidentID") & "</td><td>" & strNieuw & "</td></tr>" rsIncidents.MoveNext Loop Response.Write "</table>" End If rsIncidents.Close Set rsIncidents = Nothing %> </p><br><br><br> </body> </html> [/code:1:9941ccc0bc] op deze pagina komt er dus een foutmelding (zie beginpost). Ik denk zelf dat het gaat om [b:9941ccc0bc]rsIncidents("AantalVanIncidentID")[/b:9941ccc0bc]; dit is de naam van een veld dat de query genereert, op basis van de geselecteerde datums. [ Dit Bericht is bewerkt door: matthijn99 op 2002-03-12 14:19 ] [ Dit Bericht is bewerkt door: matthijn99 op 2002-03-12 14:20 ] [ Dit Bericht is bewerkt door: matthijn99 op 2002-03-12 14:21 ]
Link naar reactie
Hmm, heb ff snel nara je code gekeken. Wat mij toch echt belangrijk lijkt is die datum. Doordat zijn land en tijdinstellingen waarschijnlijk anders staan is dit JUIST belangrijk. Jij schrijft je datums zo in de code: [code:1:1b9ee06160] strDateBeginASP = strDateBeginDay & "/" & strDateBeginMonth & "/" & strDateBeginYear strDateEndASP = strDateEndDay & "/" & strDateEndMonth & "/" & strDateEndYear [/code:1:1b9ee06160] Als je dat omdraait naar eerst jaar, dan maand en dan dag moet het volgens mij echt beter gaan. Enne, ik gebruik altijd '-' als scheidingsteken, maar dat zal niet veel uitmaken, denk ik.. btw: Misschien is dit een oplossing die minder werk kost als je zo'n dag-menubox moet maken de volgende keer.. :wink: [code:1:1b9ee06160] <select> <% i = 1 do until i=32 response.write("<option value=""" & i & """>" & i & "</option>") i=i+1 loop %> </select> [/code:1:1b9ee06160] En evt. kun je de jaar-menubox op een soortgelijk manier uitbreiden dat ie vanaf 2001 automatisch doorrekend naar het huidige jaar. Scheelt een mogelijke update in 2005. (iets in de trend van: do until iYear = year(date) ?) Grtz Elja
Link naar reactie
Zomaar wat probeersels in random volgorde: [list:f479943559] [*:f479943559]Probeer de fields uit je recordset eens op index op te vragen, dus: rs(0), rs(1), ...enz. [*:f479943559]schrijf een testscript waarmee je kan zien bij welke het fout gaat. [*:f479943559]laat de klant even de taalinstellingen en de mdac versie nakijken op de server en eventueel gelijk trekken aan de developmentomgeving. [/list:u:f479943559] Heeft niets met het probleem te maken, maar het valt me wel op: [list:f479943559] [*:f479943559]request.form(item) values zijn al strings, dus cstr() is een beetje nutteloos :wink: [*:f479943559]controleer [b:f479943559]altijd[/b:f479943559] user-input voor je het naar de database stuurt. Schrijf bijv. een IsValidDate() functie en geef een foutmelding als de waarden niet juist zijn. Of pak een standaard waarde bij een onjuiste datum. [*:f479943559]"Expr1" als column alias? *blegh* querybuilder :wink: [*:f479943559]probeer lange regels (dus ook de gewraakte foutregel) te wrappen met _ Dat komt de leesbaarheid van je scripts ten goede. [*:f479943559]Zet de database buiten de webroot. [/list:u:f479943559] Niet alles hierboven hoef je je natuurlijk iets van aan te trekken, is ook een beetje persoonlijke voorkeur. succes. [ Dit Bericht is bewerkt door: Annie op 2002-03-12 23:55 ]
Link naar reactie
[quote:1c34db8c1f] Op 12-03-2002 16:30, schreef Elja Trum: Hmm, heb ff snel nara je code gekeken. Wat mij toch echt belangrijk lijkt is die datum. Doordat zijn land en tijdinstellingen waarschijnlijk anders staan is dit JUIST belangrijk. Jij schrijft je datums zo in de code: [code:1:1c34db8c1f] strDateBeginASP = strDateBeginDay & "/" & strDateBeginMonth & "/" & strDateBeginYear strDateEndASP = strDateEndDay & "/" & strDateEndMonth & "/" & strDateEndYear [/code:1:1c34db8c1f] Als je dat omdraait naar eerst jaar, dan maand en dan dag moet het volgens mij echt beter gaan. Enne, ik gebruik altijd '-' als scheidingsteken, maar dat zal niet veel uitmaken, denk ik.. [/quote:1c34db8c1f] nou aangezien IK degene ben met verstand van de techniek (althans :wink:), lijkt het me dan logischer dat ik zeg tegen de klant, 'die en die instellingen zijn vereist voor het goed kunnen functioneren van de appl.'. Maar ik heb het idee dat ze daar zelf ook nog wel eens lopen te rommelen met hun servers. Het was eik de bedoeling dat zij een aparte webserver zouden inrichten met IIS daarop; op die manier zou dus de ontwikkelomgeving geheel gelijk kunnen zijn aan de gebruiksomgeving. Maar om wat voor reden dan ook, is dat niet gebeurd en hebben ze nu PWS geïnstalleerd op 1 van hun eigen workstations (dus niet eens een aparte server). Nou zouden, met de juiste instellingen, PWS en IIS natuurlijk vrijwel identiek moeten werken maar in de praktijk (in dit geval dan) loopt het niet helemaal lekker... En er komt nog eens bij dat zij zich ook nog eens met het ontwikkelproces bemoeien, wat het allemaal niet makkelijker maakt (en mijn motivatie ook niet groter) maar nog even ontopic: ik denk dus dat ik niet die datum ga veranderen volgens jouw aanwijzingen, aangezien ik hetzelfde formaat zonder problemen ook op andere pagina's gebruik. Iig bedankt voor je tijd, en bedankt voor de tip voor die dropdowns; is wel handig!
Link naar reactie
Annie eerst even over je 1e 3 tips: zie hierover ook mijn reactie op Elja... Het probleem is dus dat ik in Alphen aan het ontwikkelen ben en de klant in Houten zit, en ik geen rechtstreekse verbinding heb met hun netwerk. Bij mij werkt het dus zoals het zou moeten (vanzelfsprekend :wink:), maar bij hun dus niet. Ik kan dus ook niet uittesten waar het fout gaat. Ik ga er binnenkort nog een keer heen om hun instellingen nog eens na te kijken, maar meer dan dat kan ik volgens mij ook niet doen. Verder nog bedankt voor de extra tips, ik ben pas een maand of 9 à 10 fulltime bezig met ASP schrijven, dus ik ben nog lang niet alwetend. :smile: gr Matthijn
Link naar reactie
Eigenwijs.. :wink: Door de standaard datumnotatie te gebruiken werkt je asp op elke pc, onafhankelijk van welke land- of tijdsinstelling dan ook. Dan hoef je dus ook hun server niet aan te passen voor jouw software. Wat staat nu professioneler; de technische persoon die het maakt zodat z'n software altijd werkt of de persoon die eerst wat instellingen moet wijzigen. Goed ik hou hierover op. Niet mijn bedoeling om te gaan zeuren. Dadelijk verander je het en helpt het nog niet. Sta ik mooi voor l*l :wink: Grtz Elja
Link naar reactie
Hmm, jammer.. Kun je misschien nog de sql-query hier neerzetten zodat we die kunnen zien. Evt. ook de query zoals die uiteindelijk uitgevoerd gaat worden. (wat lastiger als je een stored procedure gebruikt natuurlijk, maar ik bedoel de sql code zoals die uiteindelijk ingevuld wordt incl. variabelen.) Grtz Elja
Link naar reactie
hier is de SQL van de storedprocedure rechtstreeks uit Access gekopieerd: [code:1:141c3de04d] SELECT tblEmployee.Surname, tblEmployee.Middleinitials, tblEmployee.Lastname, Avg([tblIncident]![ClosedDateTime]-[tblIncident]![CallDateTime]) AS Expr1, Count(tblIncident.IncidentID) AS AantalVanIncidentID, tblIncident.EmployeeID FROM tblEmployee INNER JOIN tblIncident ON tblEmployee.EmployeeID = tblIncident.EmployeeID GROUP BY tblEmployee.Surname, tblEmployee.Middleinitials, tblEmployee.Lastname, tblIncident.EmployeeID, tblIncident.Active, [tblIncident]![ClosedDateTime]>=[strDateBegin] And [tblIncident]![ClosedDateTime]<=[strDateEnd] HAVING (((tblIncident.Active)=False) AND (([tblIncident]![ClosedDateTime]>=[strDateBegin] And [tblIncident]![ClosedDateTime]<=[strDateEnd])=True)); [/code:1:141c3de04d] wat deze query grofweg doet, is, voor de gegeven periode (van [strDateBegin] tot [strDateEnd]), het aantal gesloten calls laten zien per Employee (alleen de Employees die ook een call hebben gedaan vanzelfsprekend) en de gemiddelde tijd dat die calls hebben opengestaan.
Link naar reactie
Nu geef je de datums als strings door aan access met het verzoek deze om te zetten naar een datum. Wat gebeurt er als je specifiek aangeeft dat de parameter een datum is (en niet zoals nu een varchar)? Binnen mssql (ik werk eigenlijk nooit met access) heb ik mezelf aangeleerd om datums in de iso-vorm in te voeren ("yyyy-mm-dd hh:mm:ss") om misverstanden te voorkomen. Werkt dit niet in access (evt. ingesloten tussen #, dus: #yyyy-mm-dd#)? [ Dit Bericht is bewerkt door: Annie op 2002-03-14 00:25 ]
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...