[ASP]+[ACCESS] Operation was canceled.

Pagina: 1
Acties:

  • Zeus
  • Registratie: Juni 2003
  • Laatst online: 13:38
Helaas ben ik vrij nieuw in ASP en Databases, en kan ik niet beoordelen of dit een fout van mijn kant is of een incompatibiliteit aan de server kant.
Vandaar dat er ook vaag commentaar en ranzige code is te zien, excuses daarvoor. (elk commentaar is natuurlijk mooi meegenomen)

De situatie
Ik werk voor een niet nader te noemen bedrijf en ik heb ervoor gekozen een interne website te bouwen. Deze website moet documenten kunnen opslaan en weer makkelijk kunnen opzoeken. Om dat te bereiken heb ik ervoor gekozen gebruik te maken van 2 database tabellen.

Voordat ik informatie uit de 2e tabel haal, zal ik een variabele instellen die is opgesteld uit informatie uit de eerste tabel
Schets:
-----Connectie voor query I
Query I
While Query I
Maak variabele uit Query I
Connectie voor Query II
Query II met variabele uit Query I
While Query II
Schrijf informatie weg
End Loop II
Schrijf informatie weg
End Loop I
------

Het probleem
Microsoft OLE DB Provider for ODBC Drivers error '80040e4e'
Operation was canceled.
En ook diverse andere problemen met verbinden tot de database.
De eerste Query voor de eerste loop werkt prima, maar binnen de loops werkt er niks meer.

Gevonden links
Ik heb hier en daar al gezocht op google, en ik ben al diverse dingen tegengekomen die er volgens mij mee te maken hebben, maar die ik niet snap.

Google:
http://forum.pc-active.nl...250e508ded83ab12df43fe4cf
http://www.aspfaq.com/show.asp?id=2126

Kunnen jullie mij helpen? Alvast Hartstikke bedankt


De code :
code:
1
2
<html>
*snip*

[ Voor 83% gewijzigd door Creepy op 11-04-2006 11:59 ]

"Zeus was so enamored by Europa that he decided to seduce and ravage her. "


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12:35

gorgi_19

Kruimeltjes zijn weer op :9

En op welke regels gaat het exact fout?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:47

mulder

ik spuug op het trottoir

En als je doet wat ze in je eerste link doen, het path hard-coded in de connectiestring?

oogjes open, snaveltjes dicht


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12:35

gorgi_19

Kruimeltjes zijn weer op :9

Don Facundo schreef op dinsdag 11 april 2006 @ 11:13:
En als je doet wat ze in je eerste link doen, het path hard-coded in de connectiestring?
En OLEDb als dataprovider gebruikt :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 11:39

Creepy

Tactical Espionage Splatterer

Ik ben even zo vrij geweest om je startpost aan te passen. Je post nu een gigantische lap code wat echt niet nodig is. Als je een nieuwe post hier kan maken met alleen de relevante code en aangeeft waar dat nu precies mis gaat dan graag :)

Maar welke zaken heb je nu zelf al geprobeerd? Niks omdat je het niet snapt? Je kan toch wel iets proberen?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Zeus
  • Registratie: Juni 2003
  • Laatst online: 13:38
Creepy schreef op dinsdag 11 april 2006 @ 12:00:
Ik ben even zo vrij geweest om je startpost aan te passen. Je post nu een gigantische lap code wat echt niet nodig is. Als je een nieuwe post hier kan maken met alleen de relevante code en aangeeft waar dat nu precies mis gaat dan graag :)

Maar welke zaken heb je nu zelf al geprobeerd? Niks omdat je het niet snapt? Je kan toch wel iets proberen?
Het is niet zo dat ik een alleen een lap code aanbreng en aan jullie vraag om te debuggen?
En ik heb alles behalve niks gedaan om dit te debuggen:
-while loop veranderen in een for loop
-controle punten inbouwen (zie sql prints)
-zelf opzoek gaan naar documentatie over dubbele loops en dergelijke, maar ik zie nergens dat ik iets fout doe.
Hieronder zal ik proberen iets minder code te geven (er zat inderdaad een beetje teveel aan).

Termen zijn niet mijn sterkste punt dus ik heb toch nog enkele vraagjes.
gorgi_19 schreef op dinsdag 11 april 2006 @ 11:01:
En op welke regels gaat het exact fout?
Zie bij "het probleem" ; de innerste loop. dus het moment dat de 2e query wordt aangevraagd verschijnt. (65 / 67) Meer specifiek dit verschijnt er op het scherm:
code:
1
2
3
4
5
6
7
8
9
hello world801
GRMBL
SELECT * FROM tbl_files WHERE SFI_number =801 

Microsoft OLE DB Provider for ODBC Drivers error '80040e4e' 

Operation was canceled. 

/em/new/ase/default.asp, line 226
En als je doet wat ze in je eerste link doen, het path hard-coded in de connectiestring?
Wat bedoel je met hard-coden? Volgens mij staat er in de eerste link geen oplossing maar wel dit:
Ik weet niet wie er allemaal gekeken heeft naar mijn probleem, maar in ieder geval bedankt! Het is intussen opgelost door Tiscali. Zij wisten ook niet waarom die melding bleef komen maar nu hebben ze me het exacte pad gegeven op de betreffende harde schijf en dat pad gebruiken we nu.
Voorlopig kan ik weer vooruit
[...] En OLEDb als dataprovider gebruikt
Wat is OLEDb en wat is een dataprovider?

Code zo basaal als ik denk dat nodig is om mijn probleem te begrijpen :
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
]<html>

<head>
<title>HMC&nbsp; |&nbsp; Equipment Management</title>
<link REL="stylesheet" HREF="http://dww/em/new/styles/stylesheet.css" TYPE="text/css">

</head>
<body>


<div style="position: absolute; left: 95px; top: 100px; margin-left: 20px; margin-top: 10px">
<span id="header">Alpha Search Engine</span><br><br>


<% 
'Dimension variables
Dim adoCon         'Holds the Database Connection Object
Dim adoConwithin         'Holds the Database Connection Object Within the loop
Dim rsSFICON   'Holds the recordset for the records in the database
Dim strSQL          'Holds the SQL query to query the database 
Dim rsSFIwithin 
Dim strSQL2
Dim strDD_ccs_main
Dim varInnerloop
Dim varInnerloop2
'Create an ADO connection object
Set adoCon = Server.CreateObject("ADODB.Connection")
'Set an active connection to the Connection object using a DSN-less connection
adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db3.mdb")
'Create an ADO recordset object
Set rsSFICON = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT tbl.SFI_number, tbl.SFI_desc, tbl.CCS_main, tbl.CCS_group FROM tbl ORDER BY tbl.SFI_number;"

rsSFICON.Open strSQL, adoCon
%>
<br>

<% 
if request.querystring("dd_ccs_main")<>"" then
    response.write("contole punt I")
    set adoConwithin = Server.CreateObject("ADODB.Connection")
    set rsSFIwithin = Server.CreateObject("ADODB.Recordset")
    DD_ccs_main = Request.Querystring("dd_ccs_main")
        'Create an ADO connection object
            Set adoCon = Server.CreateObject("ADODB.Connection")    
        'Create an ADO recordset object
            Set rsSFICON = Server.CreateObject("ADODB.Recordset")
        'Set an active connection to the Connection object using a DSN-less connection
            adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db3.mdb")
    
    
    strSQL = "SELECT tbl.SFI_number FROM tbl WHERE tbl.CCS_main ='" & DD_ccs_main & "'"


    rsSFICON.Open strSQL, adoCon
    
    Do While not rsSFICON.EOF
        
        set varInnerloop = rsSFICON("SFI_number")
        Response.Write varInnerloop
        Response.Write ("<BR>Controle punt III")
        set rsSFIwithin = Server.CreateObject("ADODB.Connection")
        strSQL2 = "SELECT * FROM tbl_files WHERE SFI_number =" & varInnerloop
        Response.Write ("<BR>")
'controle SQL2 werkt nog
        Response.Write strSQL2
'Volgende stap werkt niet meer      
        rsSFIwithin.Open strSQL2, adoCon
        Response.Write ("<BR>Controle punt V")
        Do While not rsSFIwithin.EOF
            response.write ("Controle punt X")
            rsSFIwithin.MoveNext
        Loop


        'Move to the next record in the recordset
        rsSFICON.MoveNext
    Loop    
    rsSFICON.Close
    Set rsSFICON = Nothing
    Set adoCon = Nothing    
    
end if
%>      
</body>
</html>

[ Voor 16% gewijzigd door Zeus op 11-04-2006 13:41 ]

"Zeus was so enamored by Europa that he decided to seduce and ravage her. "


Verwijderd

volgens mij roep je ook de adoCon connectie aan voor je 2e loop, als je daar eens de rsSFICON gebruikt? werkt het dan?
(dus in de code hierboven regel 68 veranderen in rsSFIwithin.Open strSQL2, rsSFICON)

  • Zeus
  • Registratie: Juni 2003
  • Laatst online: 13:38
update! probleem lijkt meer richting de loops te gaan
Verwijderd schreef op dinsdag 11 april 2006 @ 13:47:
volgens mij roep je ook de adoCon connectie aan voor je 2e loop, als je daar eens de rsSFICON gebruikt? werkt het dan?
(dus in de code hierboven regel 68 veranderen in rsSFIwithin.Open strSQL2, rsSFICON)
Maar naar rsSFICON veranderen krijg ik:
code:
1
2
3
4
5
ADODB.Connection error '800a0e79' 

Operation is not allowed when the object is open. 

/em/new/ase/default.asp, line 172

Ook een tweede connectie definiëren(adoCon2 maken) of de eerste gebruiken (adoCon) resulteert in deze fout. Betekend dit dat ik eerst de connecties moet afsluiten in de loop?
Ik denk dat ik dit al eens eerder heb geprobeerd, ik zal straks proberen dat er van te maken.

"Zeus was so enamored by Europa that he decided to seduce and ravage her. "


  • ZjieB
  • Registratie: Juli 2002
  • Laatst online: 31-10-2025
Het ziet er allemaal een beetje slordig uit. Ik kom meerdere malen ADODB.Connection tegen, terwijl deze maar 1x nodig is. Verder worden er allerlei recordsets opnieuw 'ge-set', terwijl dit ook niet nodig is. Een kleine tip: zorg er iig voor dat je de recordsets sluit, voordat de hij de volgende query uitvoert in de loop.

Ik snap ook niet wat je in regel 31-32 doet.

Werkt onderstaande niet gewoon? Kan het nu ff niet testen hier:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<%
if request.querystring("dd_ccs_main") <> "" then
    response.write("contole punt I")
    DD_ccs_main = Request.Querystring("dd_ccs_main")

    set adoCon = Server.CreateObject("ADODB.Connection")
    strCon = "driver={Microsoft Access Driver (*.mdb)};;DBQ=" & Server.MapPath("db3.mdb")
    adoCon.connectionstring = strCon
    adoCon.Open

    strSQL = "SELECT tbl.SFI_number FROM tbl WHERE tbl.CCS_main ='" & DD_ccs_main & "'"
    Set rsSFICON = Server.CreateObject("ADODB.Recordset")

    rsSFICON.Open strSQL, adoCon
    
    Do While not rsSFICON.EOF
         set varInnerloop = rsSFICON("SFI_number")
         Response.Write varInnerloop
         Response.Write ("<BR>Controle punt III")
         
         set rsSFIwithin = Server.CreateObject("ADODB.Connection")
         strSQL2 = "SELECT * FROM tbl_files WHERE SFI_number =" & varInnerloop

         Response.Write ("<BR>")
         Response.Write strSQL2

         rsSFIwithin.Open strSQL2, adoCon
         Response.Write ("<BR>Controle punt V")
         Do While not rsSFIwithin.EOF
            response.write ("Controle punt X")
            rsSFIwithin.MoveNext
         Loop
         rsSFIwithin.Close
         Set rsSFIwithin = Nothing
         rsSFICON.MoveNext
    Loop    
    rsSFICON.Close
    Set rsSFICON = Nothing
    Set strCon = Nothing
    adoCon.Close
    Set adoCon = Nothing
end if
%>

[ Voor 255% gewijzigd door ZjieB op 11-04-2006 16:52 ]


  • Zeus
  • Registratie: Juni 2003
  • Laatst online: 13:38
ZjieB schreef op dinsdag 11 april 2006 @ 16:35:
Edit: laat maar...

Zoiets?

Het ziet er allemaal een beetje slordig uit. Ik kom meerdere malen ADODB.Connection tegen, terwijl deze maar 1x nodig is. Verder worden er allerlei recordset opnieuw 'ge-set', terwijl dit ook niet nodig is. Ik was begonnen met het herschrijven van je code, maar bij nader inzien heb ik er toch geen zin in. Een kleine tip: zorg er iig voor dat je de recordsets sluit, voordat de hij de volgende query uitvoert in de loop.

Ik snap ook niet wat je in regel 31-32 doet.
Je hebt helemaal gelijk. Al dat knippen en plakken maakt het ook niet overzichtelijker.
Kan jij - of iemand anders natuurlijk - een schematisch overzichtje geven à la
-----Connectie voor query I
Query I
While Query I
Maak variabele uit Query I
Connectie voor Query II
Query II met variabele uit Query I
While Query II
Schrijf informatie weg
End Loop II
Schrijf informatie weg
End Loop I
------
hoe jij dat zou aanpakken? Waar past hier het sluiten van de records tussen?
Dan ga ik morgen proberen een wat netter voorbeeld te geven.
Bedankt voor jullie geduld trouwens.

edit:
Jouw code gedraaid, weer "Operation was canceled" zoals die uit de TS.

[ Voor 8% gewijzigd door Zeus op 11-04-2006 17:09 ]

"Zeus was so enamored by Europa that he decided to seduce and ravage her. "


  • ZjieB
  • Registratie: Juli 2002
  • Laatst online: 31-10-2025
De tips van anderen in dit draadje:

1) hard coded connectiestring:

strCon = "driver={Microsoft Access Driver (*.mdb)};;DBQ=" & Server.MapPath("db3.mdb")
wijzigen in:
strCon = "driver={Microsoft Access Driver (*.mdb)};;DBQ=D:\vul\path\in\db3.mdb;"

2)
strCon = "driver={Microsoft Access Driver (*.mdb)};;DBQ=" & Server.MapPath("db3.mdb")
wijzigen in:
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/<pathtofile.mdb>")

Of een combinatie van beide.
Pagina: 1