Insertion de données SQL, meilleure méthode ??

Résolu
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 à 13:09
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

3 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
20 févr. 2006 à 13:35
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 !?
3
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016
20 févr. 2006 à 14:37
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
0
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
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
0
Rejoignez-nous