Se connecter avec
S'enregistrer | Connectez-vous

ASP, reqte mise à jour. de l'aide!!!

Dernière réponse : dans Programmation

:-(
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??????!!!!!! :-( :-( :-(

Autres pages sur : asp reqte mise jour aide

Lassé par la pub ? Créez un compte
Expert Programmation

Citation :
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access 97 Driver] The Microsoft Jet database engine cannot open the file '(unknown)'. It is already opened exclusively by another user, or you need permission to view its data.


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, ...)
Expert Programmation

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
%>
Expert Programmation

Pas très orthodoxe ça...
Pourquoi tu n'utilises pas un driver access?
  1. <%
  2. Set Conn = Server.CreateObject("ADODB.Connection")
  3. Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};" & " DBQ=" & Server.MapPath("/news/database/project.mdb")
  4. %>

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.

:-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>
Expert Programmation

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
%>

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.

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... :ange: 

Lassé par la pub ? Créez un compte
Tom's guide dans le monde