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 :

Alimenter une table a partir d'un form via une boucle


Sujet :

ASP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Alimenter une table a partir d'un form via une boucle
    Bonjour,
    j'ai créé une page avec un formulaire. Les noms de champs du formulaire sont identiques à ceux de la table dans ma DB Access.

    J'ai utilisé le code suivant qui fonctionne :
    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
     
    szSqlInsert = "Insert Into EVALUATIONS(EVALUATEUR_NOM,EVALUATEUR_MATRICULE,EVALUATEUR_UNITE,"
    szSqlInsert = szSqlInsert & "FOURNISSEUR"
    ' *** Boucle d'ajout des champs
    do while Not rsChamps.Eof
    	szSqlInsert = szSqlInsert & rsChamps("CHAMP") & ","
    	rsChamps.MoveNext
    Loop
    szSQLInsert = szSQLInsert & "COMMENTAIRES) "
     
    szSQLInsert = szSQLInsert & "VALUES("
     
    szSQLInsert = szSQLInsert & CheckString(Request("EVALUATEUR_NOM"),",")
    szSQLInsert = szSQLInsert & CheckString(Request.ServerVariables("LOGON_USER"),",")
    szSQLInsert = szSQLInsert & CheckString(Request("EVALUATEUR_UNITE"),",")
    szSQLInsert = szSQLInsert & CheckString(Request("FOURNISSEUR"),",")
     
    ' *** Boucle d'ajout des champs
    rsChamps.MoveFirst
    do while Not rsChamps.Eof
    	szSqlInsert = szSqlInsert & CheckNumericValue(Request(rsChamps("CHAMP")),True)
    	rsChamps.MoveNext
    Loop
     
    rsChamps.Close
    Set rsChamps = Nothing
     
    szSqlInsert = szSqlInsert & CheckString(Request("COMMENTAIRES"),"")
    szSqlInsert = szSqlInsert & ")"
     
    rsInsert = Conn.Execute(szSqlInsert)
    Malheureusement avec cette méthode, il est (je crois) impossible de récupérer l'identifiant automatique du record créé dans la table Access.

    J'ai donc essayé d'utiliser une autre technique d'ajout d'un record avec une boucle (For each Item in Request.Form) mais il semblerait que j'aie un problème de syntaxe :

    Voici le 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
     
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "SEF"
     
    Set objRecordset = Server.CreateObject("ADODB.Recordset")
     
    ' *** Ajout d'un nouveau record dans la table EVALUATIONS
    szSQL = "Select * From EVALUATIONS Where 0=1"
     
    objRecordset.Open szSQL, Conn, adOpenKeyset, adLockPessimistic, adCmdText
    objRecordset.AddNew
     
    For each Item in Request.Form
                    ' *** debugging
    	response.write Request(Item) & "<br>"
                    ' *** C'est ici que se produit l'erreur !!!!!!!
    	objRecordset.Fields(Item) = Request(Item)
    Next
     
    objRecordset.Update
     
    nId = objRecordset.Fields("ID").Value
    Avez-vous une solution à me proposer ? Merci d'avance.
    Michel

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2004
    Messages : 327
    Points : 487
    Points
    487
    Par défaut confus !!
    Tu veux faire un Update et ta requête fait un select.
    Peux tu être plus précis sur le message d'erreur ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Ok c'est réglé
    Je sais que la syntaxe d'ajout d'un record peut paraître bizarre (effectivement quelle est l'utilité du select ?) mais elle fonctionne.

    Entre temps j'ai trouvé la solution à mon problème.
    En fait j'ai perdu de vue que lorsque la boucle parcourt les champs du formulaire, elle finit par arriver sur le bouton qui permet d'envoyer le formulaire. Et comme il n'y a pas de champ correspondant au bouton d'envoi dans ma base de données, j'obtenais le message d'erreur suivant :
    Item cannot be found in the collection corresponding to the requested name or ordinal.

    Il m'a suffit de rajouter un petit test pour faire l'impasse sur le bouton d'envoi du formulaire et tout fonctionne.

    Voici le code correct :
    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
     
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "SEF"
     
    Set objRecordset = Server.CreateObject("ADODB.Recordset")
     
    ' *** Ajout d'un nouveau record dans la table EVALUATIONS
    szSQL = "Select * From EVALUATIONS Where 0=1"
     
    objRecordset.Open szSQL, Conn, adOpenKeyset, adLockPessimistic, adCmdText
    objRecordset.AddNew
     
    For each Item in Request.Form
                    ' *** NOUVEAU TEST ***
    	If Not Item="cmdEnvoi" Then
    		objRecordset.Fields(Item) = Request(Item)
    	End If
    Next
     
    objRecordset.Update
     
    nId = objRecordset.Fields("ID").Value
     
    objRecordset.Close
    Set objRecordset = Nothing
     
    Conn.Close
    Set Conn = Nothing
    Merci pour ton aide.
    Michel

  4. #4
    Membre expérimenté
    Avatar de ryan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2003
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 956
    Points : 1 316
    Points
    1 316
    Billets dans le blog
    1
    Par défaut
    Salut Mikar,

    Je suis assez surpris par ta technique pour ajouter un enregistrement.
    Tu as plus de doc à ce sujet?


    Yan
    La nourrice montre son sein, et le pont s'affaisse
    Un ascenseur est une machine qui passe quand même la moitié de son temps à descendre.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Pas de doc hélàs
    Non, hélàs je n'ai pas de documentation sur le sujet. En fait je cherchais une solution pour pouvoir récupérer en ASP l'identifiant d'un enregistrement créé dans une table Access.
    J'ai trouvé ce code sur un forum internet mais je ne sais plus lequel. Le code m'a semblé étrange (surtout l'ordre SELECT en début de séquence d'instructrions) mais comme il fonctionne, je l'emploie régulièrement.

    Dans ce cas, je l'ai agrémenté d'une boucle pour le remplissage des champs. En principe la séquence d'instruction pour remplir un record est :

    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
     
    Set Conn = Server.CreateObject("ADODB.Connection") 
    Conn.Open "SEF" 
     
    Set objRecordset = Server.CreateObject("ADODB.Recordset") 
     
    ' *** Ajout d'un nouveau record dans la table EVALUATIONS 
    szSQL = "Select * From <TABLE> Where 0=1" 
     
    objRecordset.Open szSQL, Conn, adOpenKeyset, adLockPessimistic, adCmdText 
    objRecordset.AddNew 
     
    objRecordset.Fields("NOM_DU_CHAMP1") = Request("CHAMP_DU_FORM1") 
    objRecordset.Fields("NOM_DU_CHAMP2") = Request("CHAMP_DU_FORM2") 
    ...
    objRecordset.Fields("NOM_DU_CHAMPX") = Request("CHAMP_DU_FORMX") 
     
    objRecordset.Update 
     
    ' *** Récupération de l'id de l'enregistrement
    nId = objRecordset.Fields("ID").Value 
     
    objRecordset.Close 
    Set objRecordset = Nothing 
     
    Conn.Close 
    Set Conn = Nothing
    Michel

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

Discussions similaires

  1. [AC-2007] Exporter une table vers Excel et d'Excel vers une table
    Par kapkiller dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/02/2015, 23h08
  2. Réponses: 7
    Dernier message: 16/05/2013, 15h37
  3. Réponses: 5
    Dernier message: 28/11/2011, 14h47
  4. [WD10] Alimentation d'une table a partir la vision d'une requête
    Par karim.net7 dans le forum WinDev
    Réponses: 2
    Dernier message: 26/05/2011, 15h04
  5. Réponses: 3
    Dernier message: 05/02/2010, 03h45

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