IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP Discussion :

Problème d'insertion dans une table Access


Sujet :

ASP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Par défaut Problème d'insertion dans une table Access
    Quand j'inscrit dans ma base de donnée Access à partir de mon fichier .asp avec plusieur utilisateur en même temps sa m'affiche un message d'erreur.
    Est-ce que quelqu'un connait le moyen de récupérer ce message d'erreur et de dire que si j'ai cette erreur j'attend un peu et je réenvoie ma requete.
    Merci d'avance.

    P.S. voici le message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Microsoft OLE DB Provider for ODBC Drivers error '80004005'
     
    [Microsoft][ODBC Microsoft Access Driver] Could not update; currently locked by user 'admin' on machine 'BNV1046'
    enquete.asp, line 44 (correspond à ma ligne d'insertion dans la table).

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    367
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 367
    Par défaut
    salut,

    Il ne doit y avoir qu'un seul utilisateur connecté : le serveur web.

    alors soit, tu as créé et ouver un objet connexion que tu n'as pas fermé, soit tu as ouvert ta base access sur ton poste...

  3. #3
    Membre confirmé Avatar de vanou
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 160
    Par défaut
    Affiche ton code qu'on voit s'il y a une pb qq part!

  4. #4
    Membre éclairé Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Par défaut
    Bin justement le problème c'est que quand je lance cette page le fichier .ldb reste même une fois que j'ai "fermer" ma connexion à la base.
    Voici ma fonction de connexion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function connexion_bd_access (nom_bd_access)  '/////////connexion à une base de données Access//////
      DSN_BASE = "DBQ="& Server.Mappath(nom_bd_access) &";Driver={Microsoft Access Driver (*.mdb)};Driverld=25"
      Set Conn = Server.CreateObject("ADODB.Connection")
       Conn.Open DSN_BASE
      Set RS = Server.CreateObject("ADODB.Recordset")
      connexion_bd_access = RS
    end function
    (Apparement sa fonctionne bien).

    Voici ma fonction de déconnexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function deconnection  '//////////fonction de déconnection 
    if(RS.state = 1 )then RS.close
    conn.close
    set RS = nothing
    set conn = nothing
    end function
    Juste après la déclarationde mes variable tout en haut du programme voici l'appel de la fonction de connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connexion_bd_access("enquete.mdb")
    Et tout en bas du programme voici l'appel de ma fonction de déconnexion :
    Where is the problem???
    Peu être que sa viens du fait que mes fonction sont dans un fichier à part (function.asp)?
    Merci d'avance.

  5. #5
    Membre éclairé Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Par défaut
    Bon bin j'ai régler le problème pour le fichier .ldb.
    Pendant mes essai j'avais lancer ma page qui ce connecte à ma base alors que celle ci étais deja ouverte et ça m'avais fait des éspèces de duplicatas dans un fichier temp.
    J'ai donc copier ma base dans un dossier local. J'ai supprimer la base sur le réseau. J'ai actualisé et j'ai recopier ma base sur le réseau.
    Et maintenant quand je lance ma page et mes autres pages ça ne me créer pas un fichier.ldb (en tout cas il reste pas ouvert). (oh joie!!!)

    Je referais les testes avec plusieur utilisateurs qui lancent l'enquête en même temps pour voir si ça venais de là et je vous tient au courant.
    Merci!!!!!

  6. #6
    Membre éclairé Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Par défaut
    Bon bin j'ai bien fait les tests et ça plante quand même.
    Certain il ont le message d'erreur citer plus haut, d'autre ont au bout d'un long moment de chargement un erreur 'script timed out" et enfin pour certain ça fonctionne et ça rentre les données dans la base de données.
    J'avous que là je sais pas.
    Si quelqu'un voit comment régler le problème?

  7. #7
    Membre éclairé Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Par défaut
    Bon voila la suite de mon problème...

    J'ai une boucle while qui me permet d'insérer dans ma table la réponse à toutes mes questions.
    Cependant si l'une d'elle ne fonctionne pas (ce qui est le cas quand plusieurs utilisateurs répondent en même temps) on n'inscrit pas sa réponse dans la table T_reponse et donc après sa me met en l'air mes statistiques!!!

    Je voudrait donc que si une des réponses ne peut pas être inséré dans la table on ne rentre pas les autres.

    J'ai essaier d'enregistrer dans une tables provisoir et que si tout ce passe bien de réenregistrer dans la vrais table mais ça fonctionne pas ça me met "time out".

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    on error resume next
        conn.begintrans    
        mysql = "select num_quest as nb from T_question"
        if(RS.state = 1 )then RS.close
        RS.open mysql, conn     
     
        dat_actuel=year(now)                                        '///////récupère la date actuel sous le format aaaa//////
     
        while not RS.eof
         obj=request.form("commentaire"&RS("nb")&"")
         obj=replace(obj,"'","''")
         mysql = "insert into T_reponse_bis (date_rep,num_quest,reponse,commentaire) values ('"&dat_actuel&"','"&RS("nb")&"','"&request.form("question"&RS("nb")&"")&"','"&obj&"')"
         conn.execute mysql
         if err.mumber = 0 then
           conn.committrans
           RS.movenext
         else
           RS.eof=true
         end if     
        wend
     
        if err.mumber = 0 then
          mysql = "select num_quest as nb from T_question"
          if(RS.state = 1 )then RS.close
          RS.open mysql, conn     
     
          dat_actuel=year(now)                                        '///////récupère la date actuel sous le format aaaa//////
     
          while not RS.eof
           obj=request.form("commentaire"&RS("nb")&"")
           obj=replace(obj,"'","''")
           mysql = "insert into T_reponse (date_rep,num_quest,reponse,commentaire) values ('"&dat_actuel&"','"&RS("nb")&"','"&request.form("question"&RS("nb")&"")&"','"&obj&"')"
           conn.execute mysql
           RS.movenext
          wend
     
          mysql = "delete  from T_response_bis"
          if(RS.state = 1 )then RS.close
          conn.execute mysql
        else
          response.write"Requêtes non executées. Une ou plusieurs erreurs se sont produites"
        end if
     
        on error goto 0
     
        response.write "Merci d'avoir répondu"
    Savez vous où est le problème???
    Merci d'avance!!!

  8. #8
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    T'aas pas fait de recherche sur la transaction toi. Je me permet d'insister...
    "Winter is coming" (ma nouvelle page d'accueil)

  9. #9
    Membre éclairé Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Par défaut
    Bin si j'ai fait des recherches sur les transactions pourtant!!!
    Mais là je vien de trouver pourquoi ça fonctionnai pas même avec begin/commit/rollbacktrans.

    Déja j'ai marqué au lieu de

    Ensuite j'annulait à chaque fois que c'était mauvais mais si c'était bon je validait, ce que je ne voulais pas!!!

    Enfin ne me ferra jammais sortir de la boucle.
    Il faut plutôt un truc du genre (en tout cas ce que j'ai fait et que vous pouvez me conseillé d'améliorrer).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RS.movelast
    RS.movenext
    Voici donc mon code maintenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    VF=0
    on error resume next
        conn.begintrans
        mysql = "select num_quest as nb from T_question"
        if(RS.state = 1 )then RS.close
        RS.open mysql, conn  
     
        dat_actuel=year(now)                                        '///////récupère la date actuel sous le format aaaa//////
     
        while not RS.eof
         obj=request.form("commentaire"&RS("nb")&"")
         obj=replace(obj,"'","''")
         mysql = "insert into T_reponse (date_rep,num_quest,reponse,commentaire) values ('"&dat_actuel&"','"&RS("nb")&"','"&request.form("question"&RS("nb")&"")&"','"&obj&"')"
         conn.execute mysql
         if err.number<>0 then
           RS.movelast
           RS.movenext
           conn.rollbacktrans
           VF=1
         else  
           RS.movenext
         end if  
        wend      
     
        if VF=0 then
          conn.committrans
          response.write "Merci d'avoir répondu"  
          BT_Fermer                     '/////////appel de la fonction "BT_Fermer"/////////
        else
          response.write "Erreur d'insertion"
        end if
    Maintenant quand deux personnes répondent en même temps, une des deux enregistrera ces données dans la base de données et l'autre aurra le message d'erreu de transaction.

    Merci à tous!!!!!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Insertion dans une table Access
    Par th3r1ddl3r dans le forum Windows Forms
    Réponses: 6
    Dernier message: 02/10/2006, 13h24
  2. [Conception] Problème avec INSERT dans une TABLE
    Par dunbar dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 20/07/2006, 12h56
  3. Problème d'insertion dans une table filtrée.
    Par charlie289 dans le forum Access
    Réponses: 5
    Dernier message: 20/06/2006, 16h45
  4. [MySQL] Problème d'insertion dans une table
    Par ph_anrys dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 06/03/2006, 17h43
  5. Problème d'insertion dans une table MYSQL
    Par greg69 dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/10/2005, 11h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo