Insertion de données SQL, meilleure méthode ?? [Résolu]

Messages postés
132
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
11 mai 2010
- - Dernière réponse : dp_favresa
Messages postés
132
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
11 mai 2010
- 20 févr. 2006 à 15:44
Bonjour,

J'ai un conseil à demander aux pros du développement avec SQL. Je dois insérer de
nouveaux enregistrements dans un table, la clé primaire sera gérée :
par numérotation automatique, mais comment récupérer ce N° après l'insertion ?

par numérotation manuelle, mais comment accéder facilement au dernier
enregistrement pour la dernière clé utilisée ?
Merci à qui partagera son expérience.

Bon(nes) courage, développement, salutations...
(choisissez ce qui vous convient) dp
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
6
3
Merci
Salut,
Après insertion par "insert into ...", perso, pour récupérer l'id auto je fais :

"select max(id) from ....)

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 141 internautes nous ont dit merci ce mois-ci

Messages postés
6764
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
0
Merci
salut,



c'est bien joli tout ça, mais de quoi parle t'on ?



quel langage ?


plateforme ou pas ?


quel fournisseur de données ?



je vais répondre pour du VB>7.

les objets Parameter de la collection Command.Parameters ont une
propriété Direction qui permet (en théorie) de connaître la valeur d'un
champ avec incrémentation automatique. pour en profiter il faut
personnaliser la commande d'insertion de ton DataAdapter. ainsi après
une insertion via la méthode Update du DataAdapter, la DataRow source
devrait contenir la nouvelle valeur d'incrément...

si je dis en théorie c'est que je l'ai essayé pour une base MS Access, sans succés... il semble que Jet ne le supporte pas.

je n'ai pas levé d'erreur mais le champ n'était pas mis à jour.



imaginons une table qui comprenne deux champs :

- champId (AutoIncrement, integer)

- champValeur (String).



j'utilise un DataAdapter appelé 'da'.



je vous "pseudocode" la technique, il suffit de l'adapter au fournisseur de données (les propriétés utilisées sont communes).



il faut donc paramétrer une commande

:



' -------------------------------------

' connexion à utiliser

dim cnt as New Connection ("Data Source=...")

dim cmd as new Command("INSERT INTO...",
cnt
)



' le paramètre qui récupèrera l'Id généré par la bdd

dim param
Id as New Parameter("@Id", Integer)

paramId.Direction = ParameterDirection.Output

paramId.SourceColumn = "NomChampId"

cmd.Parameters.Add(paramId)



' le paramètre de la valeur à insérer


dim paramValue

as New Parameter("@
Value
", String)


paramValue
.
Direction = ParameterDirection.Input


paramValue
.
SourceColumn = "NomChampValue1"


cmd.Parameters.Add(
paramValue1
)


cmd.Value = "Valeur à assigner"



' modification de la commande utilisée par mon DataAdapter

da.InsertCommand = cmd



' et utilisation...

da.Update(...)


' -------------------------------------




si certains d'entre vous utilisent cette méthode, je suis curieux de vos expériences !






[ Dalida ]<hr>
pensez à indiquer la version du language
Messages postés
132
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
11 mai 2010
0
Merci
Merci à vous deux pour votre aide.
Le "max(id)" est si simple que je vais opter pour une méthode manuelle.

Bon(nes) courage, développement, salutations...
(choisissez ce qui vous convient) dp