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 :

urgent:insertion dans une table à partir d'une autre table


Sujet :

ASP

  1. #1
    Membre à l'essai
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 22
    Points
    22
    Par défaut urgent:insertion dans une table à partir d'une autre table
    Bonjour,
    Je dois insérer dans une table (newletter)des lignes d'une autre table(PNR_TABLE) qui est alimentée tout le temps,le principe de partition est le suivant:
    1/dans un premier lieu je sélectionne toutes les valeurs du champ EMAIL de "PNR_TABLE" et je les insére dans le champ "email" de "newletter" avec section=0;
    2/je sélectionne les toutes les valeurs du champ EMAIL de "PNR_TABLE" ou le numéro de la carte de credit existe et je les insére dans le champ "email" de "newletter" avec section=1;
    3/je sélectionne les toutes les valeurs du champ EMAIL de "PNR_TABLE" ou le numéro de la carte de credit est vide et je les insére dans le champ "email" de "newletter" avec section=2;
    Mon code est le suivant
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <!--#INCLUDE file="connexion.inc" -->
    <%
    Const adOpenForwardOnly = 0
     Const adOpenKeyset = 1
     Const adOpenDynamic = 2
     Const adOpenStatic = 3
     Const adLockReadOnly = 1
     Const adLockPessimistic = 2
     Const adLockOptimistic = 3
     Const adLockBatchOptimistic = 4
     
    Set Rs_addemail = Server.CreateObject("ADODB.Recordset")
    Rs_addemail.ActiveConnection = my_conn
    Rs_addemail.CursorType = adOpenKeyset
    Rs_addemail.LockType = adLockPessimistic
    Rs_addemail.CursorLocation = 2
    Rs_addemail.Source = "Newsletter" 
    Rs_addemail.Open
     
      sql = "SELECT distinct(EMAIL) from PNR_TABLE"
      set res=my_conn.execute(sql)   
         res.MoveFirst 
    	        while not res.eof and not res.bof
                 Rs_addemail.AddNew  
                    Rs_addemail("email") =res(0) 
                    Rs_addemail("section") ="0"
    		        res.movenext 
                  Rs_addemail.Update
                wend 
     
    	 sql2 = "SELECT distinct(EMAIL) from PNR_TABLE where CREDIT_CARD IS NOT NULL"
         set res2=my_conn.execute(sql2)   
          res2.MoveFirst 
    	      while not res2.eof and not res2.bof    
                Rs_addemail.AddNew
                  Rs_addemail("email") =res2(0) 
                  Rs_addemail("section") ="1"
    		      res2.movenext 
                Rs_addemail.Update
              wend     
     
    	 sql3 = "SELECT distinct(EMAIL) from PNR_TABLE where CREDIT_CARD IS NULL"
         set res3=my_conn.execute(sql3)   
            res3.MoveFirst 
    	       while not res3.eof and not res3.bof
                 Rs_addemail.AddNew
                   Rs_addemail("email") =res3(0) 
                   Rs_addemail("section") ="2"
    		       res3.movenext 
                   Rs_addemail.Update
              wend 
     
    Rs_addemail.Close
    my_conn.close
        Set Rs_addemail = Nothing
    	set my_conn = nothing
    %>
    Ce code a fonctionné (j'avoue qu'il est primitif!!!!!)pour une insértion dans la table "newletter";mais le problème est comment l'améliorer pour qu'il puisse insérer les nouvelles valeurs ajoutées à la table "PNR_TABLE" sans avoir cet erreur:
    Type d'erreur :
    Microsoft OLE DB Provider for ODBC Drivers (0x80040E2F)
    [Microsoft][Pilote ODBC Microsoft Access] Modifications non effectuées: risque de doublons dans champs index, clé principale ou relation interdisant les doublons. Modifiez les données des champs contenant les doublons, enlevez ou redéfinissez l'index pour permettre les doublons et recommencez.
    /toussa_proj/index.asp, line 36
    et qui est une erreur normale puisqu'il y'a tentative de reinsértion de lignes existantes déjà sachant que g défini les champs "email+section "de la table "newsletter" comme clé composée!!
    Alors est-ce qu'il y'a quelqu'un ayant la gentillesse de me suggérer une optimisation de ce code ou une autre solution pour faire la migration des données de "PNR_TABLE" vers "newletter"????????????

  2. #2
    Membre confirmé Avatar de Phiss
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 676
    Points : 616
    Points
    616
    Par défaut
    avant chaque insertion il faut que tu teste si l'email est déjà inséré.
    et dans ton cas il faut une mise a jour de ton champ section.


    mais sinon pour faire plus simple,
    tu lis tous les enregistrements de ta table PNR
    ensuite, un par un, tu les insère dans ta table email si il n'existe pas, en testant le champ carte de crédit.
    Si le champ carte existe tu mets section à 1 sinon à 2.
    " L'absence diminue les médiocres passions et augmente les grandes, comme le vent éteint les bougies et allume le feu. "
    La Rochefoucauld

  3. #3
    Membre à l'essai
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 22
    Points
    22
    Par défaut essai avec les tests
    Bonjour,
    J'ai effectué des tests avant toute insértion comme le montre ce 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
    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
    <!--#INCLUDE file="connexion.inc" -->
    <%
     Const adOpenForwardOnly = 0
     Const adOpenKeyset = 1
     Const adOpenDynamic = 2
     Const adOpenStatic = 3
     Const adLockReadOnly = 1
     Const adLockPessimistic = 2
     Const adLockOptimistic = 3
     Const adLockBatchOptimistic = 4
     
    Set Rs_addemail = Server.CreateObject("ADODB.Recordset")
    Rs_addemail.ActiveConnection = my_conn
    Rs_addemail.CursorType = adOpenKeyset
    Rs_addemail.LockType = adLockPessimistic
    Rs_addemail.CursorLocation = 2
    Rs_addemail.Source = "Newsletter" 
    Rs_addemail.Open
     
      sql = "SELECT distinct(EMAIL) from PNR_TABLE"
      set res=my_conn.execute(sql)   
         res.MoveFirst 
    	        while not res.eof and not res.bof
    			   var1=res(0)
    			   var2=0
                   sql1="select email,section from Newsletter "
    			   sql1=sql1 & "where Newsletter.email='"&var1&"' and Newsletter.section='"&var2&"' "
    			   set res_sql1=my_conn.execute(sql1) 
                          if res_sql1.eof then
    					     'sql12=" insert into Newsletter values( ,'"&var1&"','"&var2&"', )"
                             'set res_sql12=my_conn.execute(sql12)
    						 Rs_addemail.AddNew
                             Rs_addemail("email") =var1
                             Rs_addemail("section") =var2
                             Rs_addemail.Update
    					  end if 
    			res.movenext		   	 
                wend 
     
    	 sql2 = "SELECT distinct(EMAIL) from PNR_TABLE where CREDIT_CARD IS NOT NULL"
         set res2=my_conn.execute(sql2)   
          res2.MoveFirst 
    	      while not res2.eof and not res2.bof    
                 var11=res2(0)
    			 var22=1
                   sql22="select email,section from Newsletter"
    			   sql22=sql22 & "where email='"&var11&"' and section='"&var22&"' "
    			   set res_sql22=my_conn.execute(sql22) 
                          if res_sql22.eof then
    					     'sql12=" insert into Newsletter values( ,'"&var1&"','"&var2&"', )"
                             'set res_sql12=my_conn.execute(sql12)
    						 Rs_addemail.AddNew
                             Rs_addemail("email") =var11
                             Rs_addemail("section") =var22
                             Rs_addemail.Update
    					  end if 
    			res2.movenext
              wend     
     
    	 sql3 = "SELECT distinct(EMAIL) from PNR_TABLE where CREDIT_CARD IS NULL"
         set res3=my_conn.execute(sql3)   
            res3.MoveFirst 
    	       while not res3.eof and not res3.bof
                 var111=res3(0)
    			 var222=2
                   sql33="select email,section from Newsletter"
    			   sql33=sql33 & "where email='"&var111&"' and section='"&var222&"' "
    			   set res_sql33=my_conn.execute(sql33) 
                          if res_sql33.eof then
    					     'sql12=" insert into Newsletter values( ,'"&var1&"','"&var2&"', )"
                             'set res_sql12=my_conn.execute(sql12)
    						 Rs_addemail.AddNew
                             Rs_addemail("email") =var111
                             Rs_addemail("section") =var222
                             Rs_addemail.Update
    					  end if 
    			res3.movenext
              wend 
     
    Rs_addemail.Close
    Set Rs_addemail = Nothing
    Mais le problème est que g ce type d'erreurs manant:
    Type d'erreur :
    Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
    [Microsoft][Pilote ODBC Microsoft Access] Type de données incompatible dans l'expression du critère.
    /toussa_proj/enter_data.asp, line 36

    la ligne fait référnce à la requéte:
    sql1="select email,section from Newsletter "
    sql1=sql1 & "where Newsletter.email='"&var1&"' and Newsletter.section='"&var2&"' "
    SVP un coup de main me fera un grand plaisir et me fera sortir de cette galère

  4. #4
    Expert éminent
    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
    Points : 9 506
    Points
    9 506
    Par défaut
    C'est probablement à cause des apostrophes autour de VAR2. VAR2 est un nombre et pas du texte => donc pas de ''
    sql1 = "select email,section from Newsletter "
    sql1 = sql1 & "where Newsletter.email='"&var1&"' and Newsletter.section='"&var2&"' "
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Membre à l'essai
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    En fait g modifié le code comme suit et ça marche à merveille manant
    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
    sql = "SELECT distinct(EMAIL) from PNR_TABLE"
      set res=my_conn.execute(sql)   
         res.MoveFirst 
    	        while not res.eof and not res.bof
    			   var1=res(0)
    			   var2=0
                   sql1="select email,section from Newsletter where email='"&res(0)&"' and section=0 "
    			   'sql1=sql1 & "where Newsletter.email='"&res(0)&"' and Newsletter.section="0" "
    			   set res_sql1=my_conn.execute(sql1) 
                          if res_sql1.eof then
    					     'sql12=" insert into Newsletter values( ,'"&var1&"','"&var2&"', )"
                             'set res_sql12=my_conn.execute(sql12)
    						 Rs_addemail.AddNew
                             Rs_addemail("email") =var1
                             Rs_addemail("section") =var2
                             Rs_addemail.Update
    					  end if 
    			res.movenext		   	 
                wend

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

Discussions similaires

  1. Insertion dans la base MySQL à partir d'une servlet
    Par trmalek dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 26/12/2021, 17h36
  2. UPDATE d'une Table à partir de deux autres Tables
    Par Marc_27 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/07/2009, 14h13
  3. Update d'une table à partir de deux autres tables
    Par Peewee766 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 04/05/2008, 19h08
  4. Réponses: 4
    Dernier message: 20/03/2007, 09h54
  5. creer une autre table à partir d'une requete
    Par papou34 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/02/2007, 22h42

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