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:
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:
Citation:
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"????????????:oops: