Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Langages serveur > ASP
ASP Forum sur la programmation ASP. Avant de poster : Cours ASP, FAQ ASP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/07/2007, 15h57   #1
Membre à l'essai
 
Inscription : mai 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 41
Points : 24
Points : 24
Par défaut Limitations des Recordsets pour une connection?

Voila, je me demandais si il y avait une limite pour le nombre de Recordset qui sont ouvert a une connexion en meme temps.

Je me pose cette question parce que j'ai une page qui utilise plusieurs recordset, et lorsque j'essais d'en ouvrir un quatrieme il me sort un message d'erreur qui dit :

Error Type:
ADODB.Recordset (0x800A0E7D)
The connection cannot be used to perform this operation. It is either closed or invalid in this context.

Pourtant je ne ferme pas ma connection avant la fin de la page. De plus, si je ferme mes recordset deja existant avant d'ouvrir le quatrieme (RS.close), j'ai encore la meme erreur.

Alors, pour tenter de contourner le probleme, j'ai essayé d'ouvrir une deuxieme connection, mais j'ai un autre message d'erreur au moment ou j'ouvre la deuxieme connection :

Error Type:
Provider (0x80004005)
Unspecified error

Donc je suspecte que je ne peux pas ouvrir deux connections en meme temps sur la meme base de données, ce qui ne m'aide vraiment pas a regler mon probleme hehe.

Quelqu'un a une idée qui pourrait m'aider un petit peu?
gbouchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 17h30   #2
Modérateur
 
Avatar de roro06
 
Inscription : avril 2007
Messages : 1 364
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : avril 2007
Messages : 1 364
Points : 1 551
Points : 1 551
Bonjour

Plusieurs connexions sur la même base, je ne sais pas, mais ça n'a, je pense, aucun interet.

Par contre, on peut ouvrir plusieurs recordset sur la même connexion, je t'assure. (j'en abuse assez comme çà !!). C'est la première fois que je vois cette erreur.

Faudrait voir ton code, ya sans doute autre chose (genre un update en cours)

c'est quoi, comme sgbd ?
roro06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 18h39   #3
Membre à l'essai
 
Inscription : mai 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 41
Points : 24
Points : 24
Merci pour ta réponse!

le sgbd est Access 2000 et je suis sous Windows2000.

Pour ce qui est d'ouvrir plusieurs connections a la meme base je pense aussi que ca n'a aucun interet, mais j'ai tout de meme tenté le coup pour essayer de contourner le probleme hehe.

Effectivement, le nombre de recordset ne semble pas etre un probleme puisque je recois la meme erreur meme si j'essais d'ouvrir le recordset problematique tout juste apres avoir ouvert la connection.

Pour ce qui est des updates, je n'en fais pas, mais il est vrai que je fait quelques inserts dans ma page, mais meme si j'ouvre mon recordset avant d'en faire un ou avant d'ouvrir un autre recordset, j'ai la meme erreur.

voici le code qui me donne des problemes :

Code :
1
2
RSRecap.open "SELECT * FROM tbl_Recap WHERE ""StartPoint"" = '" & RouteStart & "' AND ""EndPoint"" = "' & RouteEnd & "'", oConn
RSYTD.open "SELECT * FROM tbl_Recap WHERE ""StartPoint"" = '" & RouteStart & "' AND ""EndPoint"" = "' & RouteEnd & "'", oConn
Ces deux recordset ne veulent absolument rien savoir, peu importe ou je place ces lignes dans mon code. A preciser que ma connection est valide puisque je l'utilise pour ouvrir 3 autres recordset sans probleme.

voila le code de ma page :

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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<%
Set oConn = Server.CreateObject("ADODB.connection")
oConn.Open "Driver={Microsoft Access Driver (*.mdb)};"&_
	"DBQ=mabase.mdb;"
 
Set RS=Server.CreateObject("ADODB.recordset")
Set RSRailcars=Server.CreateObject("ADODB.recordset")
Set RSRoutes=Server.CreateObject("ADODB.recordset")
Set RSRecap=Server.CreateObject("ADODB.recordset")
Set RSYTD=Server.CreateObject("ADODB.recordset")
 
n=0
 
oConn.Execute("DELETE * FROM tbl_YearRecap")
p = UBound(tab_Trajet,2)
for q = 0 to p-1
	qry_sql = "INSERT INTO tbl_YearRecap (Equipment_Number, Trace_ID, Depart_Plant, Arrive_Depot, Depart_Depot, Arrive_Plant, Finished, Plant, Depot)" &_
	" VALUES ('" & tab_Trajet(0,q) & "', '" & tab_Trajet(6,q) & "', '" & CDate(tab_Trajet(1,q)) & "', '" & CDate(tab_Trajet(2,q)) & "', '" & CDate(tab_Trajet(3,q)) & "', '" & CDate(tab_Trajet(4,q)) & "', '" & tab_Trajet(5,q) & "', '" & tab_Trajet(7,q) & "', '" & tab_Trajet(8,q) & "')"
	oConn.execute(qry_sql)
next
 
for p=0 to UBound(tab_Routes,2)
 
	RouteStart = tab_Routes(0,p)
	RouteEnd = tab_Routes(1,p)
 
	DernierRailcar = tab_Trajet(0,0)
	n=0
	for j=0 to UBound(tab_Trajet,2)
		if tab_Trajet(0,j) <> DernierRailcar then
			n=n+1
			DernierRailcar = tab_Trajet(0,j)
			RailcarChanged = 1
		else
			RailcarChanged = 0
		end if
 
		if Month(tab_Trajet(1,j)) = 1 and tab_Trajet(5,j) = 1 and tab_Trajet(7,j) = RouteStart and tab_Trajet(8,j) = RouteEnd then
			NbJanvier = NbJanvier + 1															'Nombre de routes en janvier augmente de 1
			TransitJanvier = TransitJanvier + (tab_Trajet(2,j) - tab_Trajet(1,j))				'On calcul le temps de transit entre plant et depot
			IdleDepotJanvier = IdleDepotJanvier + (tab_Trajet(3,j) - tab_Trajet(2,j))			'Calcul du temps d'attente au depot
			ReturnJanvier = ReturnJanvier + (tab_Trajet(4,j) - tab_Trajet(3,j))					'Calcul du temps de retour vers le plant
			if j=0 or RailcarChanged = 1 then
				IdlePlantJanvier = 0															'Si c'est le premier voyage du wagon en janvier, on ne calcul pas le temps d'attente au plant
			else
				IdlePlantJanvier = IdlePlantJanvier + (tab_Trajet(1,j) - tab_Trajet(4,j-1))	'Calcul du temps d'attente au Planr
			end if
		end if
 
		'Ici je refais le if plusieurs fois, une pour chaque mois de l'année.
 
	next
 
	NbTot = NbJanvier + NbFevrier + NbMars + NbAvril + NbMai + NbJuin + NbJuillet + NbAout + NbSeptembre + NbOctobre + NbNovembre + NbDecembre
	TransitTot = TransitJanvier + TransitFevrier + TransitMars + TransitAvril + TransitMai + TransitJuin + TransitJuillet + TransitAout + TransitSeptembre + TransitOctobre + TransitNovembre + TransitDecembre
	IdleDepotTot = IdleDepotJanvier + IdleDepotFevrier + IdleDepotMars + IdleDepotAvril + IdleDepotMai + IdleDepotJuin + IdleDepotJuillet + IdleDepotAout + IdleDepotSeptembre + IdleDepotOctobre + IdleDepotNovembre + IdleDepotDecembre
	ReturnTot = ReturnJanvier + ReturnFevrier + ReturnMars + ReturnAvril + ReturnMai + ReturnJuin + ReturnJuillet + ReturnAout + ReturnSeptembre + ReturnOctobre + ReturnNovembre + ReturnDecembre
	IdlePlantTot = IdlePlantJanvier + IdlePlantFevrier + IdlePlantMars + IdlePlantAvril + IdlePlantMai + IdlePlantJuin + IdlePlantJuillet + IdlePlantAout + IdlePlantSeptembre + IdlePlantOctobre + IdlePlantNovembre + IdlePlantDecembre
 
 
	if NbJanvier <> 0 then
		TransitJanvier = TransitJanvier / NbJanvier
		IdleDepotJanvier = IdleDepotJanvier / NbJanvier
		ReturnJanvier = ReturnJanvier / NbJanvier
		IdlePlantJanvier = IdlePlantJanvier / NbJanvier
		tab_Recap(1,0) = TransitJanvier
		tab_Recap(1,1) = IdleDepotJanvier
		tab_Recap(1,2) = ReturnJanvier
		tab_Recap(1,3) = IdlePlantJanvier
		tab_Recap(1,4) = TransitJanvier + IdleDepotJanvier + ReturnJanvier + IdlePlantJanvier
	end if
 
	'Ici aussi je repete ce code pour chaque mois de l'année
 
	if NbTot <> 0 then
		TransitTot = TransitTot / NbTot
		IdleDepotTot = IdleDepotTot / NbTot
		ReturnTot = ReturnTot / NbTot
		IdlePlantTot = IdlePlantTot / NbTot
		TurnAroundTot = TransitTot + IdleDepotTot + ReturnTot + IdlePlantTot
		tab_Recap(13,0) = TransitTot
		tab_Recap(13,1) = IdleDepotTot
		tab_Recap(13,2) = ReturnTot
		tab_Recap(13,3) = IdlePlantTot
		tab_Recap(13,4) = TurnAroundTot
	end if
 
	oConn.execute("DELETE * FROM tbl_Recap")
 
	for i = 1 to 12
		strSQL = "INSERT INTO tbl_Recap (Months_Number, Transit, Idle_Depot, Return, Idle_Plant, Turnaround, StartPoint, EndPoint)" &_
		" VALUES ('" & i & "', '" & CLng(tab_Recap(i,0)) & "', '" & CLng(tab_Recap(i,1)) & "', '" & CLng(tab_Recap(i,2)) & "', '" & CLng(tab_Recap(i,3)) & "', '" & CLng(tab_Recap(i,4)) & "', '" & RouteStart & "', '" & RouteEnd & "')"
		oConn.execute(strSQL)
	next
 
	oConn.execute("DELETE * FROM tbl_YearRecap")
 
	str_SQL = "INSERT INTO tbl_RecapYTD (TransitYTD, Idle_DepotYTD, ReturnYTD, Idle_PlantYTD, TurnaroundYTD, StartPoint, EndPoint)" &_
	" VALUES ('" & CLng(tab_Recap(13,0)) & "', '" & CLng(tab_Recap(13,1)) & "', '" & CLng(tab_Recap(13,2)) & "', '" & CLng(tab_Recap(13,3)) & "', '" & CLng(tab_Recap(13,4)) & "', '" & RouteStart & "', '" & RouteEnd & "')"
	oConn.execute(str_SQL)
 
'C'est ici le probleme
	RSRecap.open "SELECT * FROM tbl_Recap WHERE ""StartPoint"" = '" & RouteStart & "' AND ""EndPoint"" = "' & RouteEnd & "'", oConn
	RSYTD.open "SELECT * FROM tbl_RecapYTD WHERE ""StartPoint"" = '" & RouteStart & "' AND ""EndPoint"" = "' & RouteEnd & "'", oConn
 
	response.write("<p><table align=center frame=border>")
	response.write("<tr><th>Road</th>")
	response.write("<th>Idle at Plant</th>")
	response.write("<th>Transit</th>")
	response.write("<th>Idle at DST</th>")
	response.write("<th>Return</th>")
	response.write("<th>Turnaround</th></tr>")
	response.write("<tr><td>YTD</td><td>" & RSYTD(5) & "</td><td>" & RSYTD(2) & "</td>")
	response.write("<td>" & RSYTD(3) & "</td><td>" & RSYTD(4) & "</td><td>" & RSYTD(6) & "</td></tr>")
 
	for i = 1 to UBound(tab_Recap)-1
		response.write("<tr><td>" & RouteStart & " - " & RouteEnd & "</td>")		'La route
		response.write("<td>" & RSRecap(4) & "</td><td>")
		response.write(RSRecap(5) & "</td><td>")
		response.write(RSRecap(6) & "</td><td>")
		response.write(RSRecap(7) & "</td><td>")
		response.write(RSRecap(3) & "</td></tr>")
	next
 
	RSRecap.close
	RSYTD.close
 
next
 
oConn.close
Set RSRailcars = Nothing
Set RS = Nothing
Set RSRoutes = Nothing
Set RSRecap = Nothing
Set RSYTD = Nothing
%>
Je n'ai pas mis tout mon code puisque j'en ai pour plus de 800 lignes et je me suis dit que ca ferait un peu lourd hehe. J'ai enlever tout ce qui touche aux autres recordset, puisqu'ils ne me servent qu'a remplir des tableaux, mais j'ai laisser toute les commandes SQL qui s'executent. J'ai aussi enlever tout ce qui initialisations de variables et tout le code redondant. Mais étant donné le fait que meme si je tente d'ouvrir les recordset tout juste apres avoir ouvert la connection j'ai la meme erreur, je ne pense pas que ce soit un probleme d'insert ou une autre commande qui n'a pas finit de s'executer.
gbouchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 21h20   #4
Membre à l'essai
 
Inscription : mai 2007
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 41
Points : 24
Points : 24
Bon, probleme résolu!

J'avais fait une erreur dans mon SELECT, j'ai interverti un " et un ' .

Dire que ca fait 2 jours que je passe la-dessus!

Honte a moi! hehe

Paix et Joie dans le monde! (fallait bien que je profite de ma stupidité pour au moins passer un message de paix et d'amour )

Aller, salut tout le monde!
gbouchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h55.


 
 
 
 
Partenaires

Hébergement Web