Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3003 connectés 

  FORUM HardWare.fr
  Programmation
  ASP

  [ASP][SQL][ACCESS][INSERT INTO] plusieurs enregistrements en une fois?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ASP][SQL][ACCESS][INSERT INTO] plusieurs enregistrements en une fois?

n°787127
dalida
Yolanda Christina Gigliotti
Posté le 05-07-2004 à 17:19:53  profilanswer
 

actuellement je fais ça :

Citation :

listeIdTheme = Split(AjoutTheme,"," )    
i=0
    While i<=UBound(listeIdTheme)
SQL = "INSERT INTO liens_themes (id_lien, id_theme) values("&new_id&","&listeIdTheme(i)&" )"
Set RSinserdom = server.createobject("ADODB.Recordset" )
RSinserdom.Open SQL,MM_liens_gret_STRING , 3, 3
i=i+1
   Wend


et au lieu de faire ça, je voudrais, comme le gentil mysql/php me le permettait, faire style insert into machin (tuc1,tuc2) values(1,2),(2,3),(4,5)

Citation :

listeIdTheme = Split(AjoutTheme,"," )    
i=0
     
SQL = "INSERT INTO liens_themes (id_lien, id_theme) values
While i<=UBound(listeIdTheme)
if i>0 then
SQL=SQL&","
end if
SQL=SQL&"("&new_id&","&listeIdTheme(i)&" )"
i=i+1"  
Wend
Set RSinserdom = server.createobject("ADODB.Recordset" )
RSinserdom.Open SQL,MM_liens_gret_STRING , 3, 3
 
 


 
alors, comment ça on peut pas faire ça avec access?
C pas possible d'être aussi dépouvu :??:


Message édité par dalida le 05-07-2004 à 17:22:01

---------------
90-60-90 -Guish c un homme humain, un vrai-
mood
Publicité
Posté le 05-07-2004 à 17:19:53  profilanswer
 

n°787175
flow24
www.balland.org
Posté le 05-07-2004 à 17:38:51  profilanswer
 

c nul access

n°787197
dalida
Yolanda Christina Gigliotti
Posté le 05-07-2004 à 17:54:52  profilanswer
 

flow24 a écrit :

c nul access

Ce n'est pas la question, j'ai pas besoin de débat là-dessus. Merci d'éviter :sweat:


---------------
90-60-90 -Guish c un homme humain, un vrai-
n°787293
Arjuna
Aircraft Ident.: F-MBSD
Posté le 05-07-2004 à 20:08:07  profilanswer
 

tu peux faire un "insert into latable2 (...) values (select ... from latable2)"
 
Mais tu ne peu en aucun cas mélanger le code VB et le SQL...

n°787377
tet2neu
emmerdeur
Posté le 05-07-2004 à 22:01:26  profilanswer
 

tu mets ta requête dans une boucle  [:jkley]

n°787381
the real m​oins moins
Posté le 05-07-2004 à 22:09:40  profilanswer
 

tet2neu a écrit :

tu mets ta requête dans une boucle  [:jkley]


 

dalida a écrit :

actuellement je fais ça :

Citation :

listeIdTheme = Split(AjoutTheme,"," )    
i=0
    While i<=UBound(listeIdTheme)
SQL = "INSERT INTO liens_themes (id_lien, id_theme) values("&new_id&","&listeIdTheme(i)&" )"
Set RSinserdom = server.createobject("ADODB.Recordset" )
RSinserdom.Open SQL,MM_liens_gret_STRING , 3, 3
i=i+1
   Wend




[:itm]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°787386
tet2neu
emmerdeur
Posté le 05-07-2004 à 22:16:15  profilanswer
 

:jap:  
Je suis un peu  fatigué ces temps ci
J'ai pas trop regardé le code en fait  :whistle:

n°787407
Arjuna
Aircraft Ident.: F-MBSD
Posté le 05-07-2004 à 22:38:32  profilanswer
 

Bon, alors, reprenons...
 
Dans "AjoutTheme" y'a quoi ? C'est une liste reçue via un formulaire ? Si oui, c'est mort, il faut passer par la boucle que tu as écrite.
 
Si c'est des informations issures d'une requête, alors tu peux faire ça :
 
Mettons que "AjoutTheme" soit allimentée par la requête :
 
"select id from theme"
 
A ce moment, tu peux faire ça :
 
INSERT INTO liens_themes (id_lien, id_theme) values(select "&new_id&", id from theme)"  
 
Ceci dit je pense que c'est plutôt la première solution.
 
Si tu redoutes des données incohérentes, il te faut passer par une transaction afin de garantir que toutes les lignes seront créées, ou aucune :
 
listeIdTheme = Split(AjoutTheme,"," )    
i=0  
dim cnx
set cnx = Server.CreateOject("ADODB.Connection" )
cnx.Open MM_liens_gret_STRING
 
cnx.begintrans
 
on error resmue next
lastErr = 0
 
for i = lbound(listeIdTheme) to UBound(listeIdTheme)
   SQL = "INSERT INTO liens_themes (id_lien, id_theme) values("&new_id&","&listeIdTheme(i)&" )"  
   cnx.Execute SQL
   if err <> 0 then
      lastError = err.number
      exit for
   end if
next
 
on error goto 0
 
if lastError <> 0 then
   cnx.rollback
   Resonse.Write "Une erreur s'est produite lors du traîtement de la requête " & SQL & "<br>Annulation de la transation en court et fin en urgence du traîtement."
   cnx.Close
   set cnx = Nothing
   Response.End
else
   cnx.committrans
end if
 
cnx.Close
set cnx = Nothing
 
PS: je sais plus si c'est .rollback ou .rollbacktrans
 
En tout ça, avec ce code (légèrement plus propre, t'as pas besoin d'instancier un RS pour faire un INSERT, et un While qui part de 0 avec une incrémentation manuelle quand on peut faire un for borné par les limites du tableau c'est pas terrible ;)) te permettre d'insérer les lignes d'un coup et de garantir qu'elles sont toutes insérées ou toutes annulées en cas d'erreur. En plus de ça, si une personne tente de lire la table pendant l'insertion des données, sa requête sera mise en file d'attente jusqu'à la fin de la boucle, afin d'assurer la lecture de toutes ou aucune données insérée, afin d'être certain de ne pas afficher n'importe quoi.
 
PS²: Les transactions c'est un outils extrêment puissant qui permet de garantir à tout instant une version "propre" de la base. Par contre, c'est êtrêment consommateur, et peut sérieusement ralentir une application partagée, à cause de la présence de lock en écriture ET en lecture sur l'intégralité des données (ou tables avec certains SGBD tels que SQL Server) pendant toute la durée de la transaction.


Message édité par Arjuna le 05-07-2004 à 22:39:30

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASP

  [ASP][SQL][ACCESS][INSERT INTO] plusieurs enregistrements en une fois?

 

Sujets relatifs
Mini moteur de recherche sous accessASP debutante lancer .bat
Comment transferer des donnees d'une base a l'autre ? ( access )VB ACCESS enregistrement dans formulaire
ASP/JavascriptOuvrir un fichier access 2003 sans access...
Moteur de recherche en AccessSQL... TOP 3-3 ??
[SQL Server 2000] Connexion sécurisée ?[ACCESS]copier zone texte formulaire dans le champ d'une table
Plus de sujets relatifs à : [ASP][SQL][ACCESS][INSERT INTO] plusieurs enregistrements en une fois?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR