ASP, reqte mise à jour. de l'aide!!!
Forum Programmation : ASP, reqte mise à jour. de l'aide!!!
:-(
Salut tout le monde, SVP si quelqu'un peut m'aider à
résoudre ce problème. J'ai cherché partout sur internet et
forum mais sans aucune solution.
Le probleme est tres simple, je fait une application web
en ASP, et quand j'execute une requete mise à jour ça me
donne l'erreur suivante (seulement sous win XP) :
Microsoft JET Database Engine error '80004005'
L'opération doit utiliser une requête qui peut être mise à
jour.
Mais sous win98 ça passe sans le moindre problème.
SVP si qqun aurait une idée??????!!!!!! :-( :-( :-(
| Citation : Microsoft OLE DB Provider for ODBC Drivers error '80004005'
|
Peut-être est-ce un problème d'utilisateur ou de DSN.
Le soucis ne doit pas provenir de ton système d'exploitation mais de la configuration de la machine ou de la base de données (droits utilisateurs, type d'authentification, ...)
non j'ai attribué tous les droits de lecture et ecriture au dossier du du site, au dossier de la base de données, à la base de données meme et aussi à la table mais tjrs le meme prob
Précise donc de quel type de base il s'agit (access, sqlserver2000, sqlserver2003, ...) et comment tu t'y connectes.
Et ce n'est pas une question de droits d'écriture dans un répertoire, mais bien dans la base (l'utilisateur est enregistré? il est autorisé à manipuler les données? la connexion à la DB fonctionne bien depuis ton poste?)
D'un point de vue général, si le script fonctionne bien sur un poste et pas sur un autre, ce n'est pas le script qui est en cause mais bien la configuration (de la base ou du poste)
la base de données Access2000
Et voici le script de connexion :
<%
dim ConnectionString
dim ADO
ConnectionString="Provider=Microsoft.jet.OLEDB.4.0;" & "Data Source=" & Server.MapPath ("\news\database\project.mdb" )
Set ADO=Server.CreateObject("ADODB.Connection" )
ADO.ConnectionString=ConnectionString
ADO.Open
%>
Pas très orthodoxe ça...
Pourquoi tu n'utilises pas un driver access?
Code :
|
merci je vais essayer et vous tiendrai au courant
le probleme persiste toujours avec le message d'erreur suivant :
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][Pilote ODBC Microsoft Access] L'opération doit utiliser une requête qui peut être mise à jour.
donne ta requète complète, j'ai oublié ma boule de cristal
:-P pas de prob pour la boule de cristal.
'''''voici le code de tte la page :
<%@language=VBScript CodePage="1256"%>
<!--#include file="connection.txt"-->
<%
section=request.form("section" )
subject=request.form("subject" )
body=request.form("body" )
%>
<%
Function AddF()
addSQL= "insert into "& section&" (subject,body) values ('"&subject&"','"&body&"')"
ADO.execute(addSQL)
%>
<body>
<p><font face="Simplified Arabic" size="3">Merci..Ajout réussi</font></p>
<%
End Function
%>
<%
If subject="" or body="" then
response.write "Vous n'avez pas saisi tous les champs, retournez et complétez la saisie."
Else
AddF()
End If
%>
<p align="center"><b>Ajout d'informations</b></p>
<form method="POST" action="add_news.asp">
<p><b>Section : <select size="1" name="section">
<option value="general_news">Akhbar moutanawi3a</option>
<option value="tech_news">Akhbar ti9niya</option>
</select></b></p>
<p><b>Titre : <input type="text" name="subject" size="20"></b></p>
<p><b>Contenu :</b></p>
<p><b> <textarea rows="11" name="body" cols="78"></textarea></b></p>
<p><input type="submit" value="Ajouter" name="add"></p>
</form>
<%
ADO.close
Set ADO=Nothing
%>
</body>
Je repère quelques trucs génant imho:
1) je ne vois pas la création de ADO ni son ouverture (que je soupçonne êtres dans connection.txt)
2) je verrais plutôt:
addSQL= "insert into "& section&" (subject,body) values ('"&subject&"','"&body&"')"
ADO.execute addSQL,n
if (n <> 1) then
response.write "Erreur d'insertion"
end if
3) met un "on error resume next" en tête de script pour que les erreurs s'affichent sans stopper ton script, ça te permettra de mieux débugger.
oui effectivement pour la création de ADO en voici le contenu du fichier connection.txt :
<%
dim ConnectionString
dim ADO
ConnectionString="Provider=Microsoft.jet.OLEDB.4.0;" & "Data Source=" & Server.MapPath ("\news\database\project.mdb" )
Set ADO=Server.CreateObject("ADODB.Connection" )
ADO.ConnectionString=ConnectionString
ADO.Open
%>
J'ai un très fort doute sur ton MapPath, et plus particulièrement sur l'utilisation des \: je mettrais des /
non le MapPath est juste puisque j'arrive à consulter la table et afficher le contenu, c'est seulement en executant une requete de mise à ajour (ajout ou modification) que l'erreur apparait
alors je cale... si ton utilisateur a bien les droits en écriture sur la table, je ne vois vraiment pas...
Vérifie les privilèges (pour être sur) mais sinon...
merci beaucoup CrazyCat pour ta patience.
dernière chose pourrais tu m'indiquer comment attribuer les privilèges ou configuration de l'iis pour voir que ce que je fais est bien juste ou non.
merci beaucoup.
ça y est probleme resolu.
c'etait juste un attribut auquel j'ai pas fait attention.
Merci beaucoup.
Salut !
De quel attribut s'agit il ? En fait j'ai le même problème sur une base Access2000.
Je veux mettre à jour une table à partir des données d'une autre table.
Lorsque je fais ma requete j'ai le message d'erreur "L'opération doit utiliser une requête qui peut être mise à jour", pourtant si j'affiche la requete en mode "feuille de données" elle récupère bien les bonnes données dans la table source, mais ne fait pas la mise à jour dans la table cible.
Si par contre je fais une requete de mise à jour sur les même champs, en définissant des valeurs fixes (SET F1=28), la mise à jour se fait bien.
Donc je peux lire la table source et ecrire dans la table cible... mais la mise à jour de l'une vers l'autre génère cette "erreur mystère" lol.
J'ai pu trouver des informations sur cette erreur à l'adresse suivante:
http://support.microsoft.com/kb/463266/fr
Conformément aux recommandations de cette page, j'ai recherché et supprimé les doublons de ma table, définis la colonne contenant les numéros identifiants comme index unique et clé primaire, pour la table source comme pour celle de destination. Les deux tables sont accessibles en lecture et en écriture, mais le message d'erreur persiste et je ne vois plus trop ou chercher.
Voici la requete que j'utilise:
UPDATE [TableB] SET F1 = (SELECT Champ1 FROM TableA_bis WHERE TableA_bis.Champ1 = TableB.F1), F2 = (SELECT Champ2 FROM TableA_bis WHERE TableA_bis.Champ2 = TableB.F2), F8 = (SELECT Champ8 FROM TableA_bis WHERE TableA_bis.Champ8 = TableB.F8)
WHERE EXISTS (SELECT * FROM TableA_bis WHERE TableA_bis.Champ11 = TableB.F11);
Si quelqu'un à une idée...
Il y a 2307 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
