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"????????????