OVH Cloud OVH Cloud

Récupération numero compteur VB dans SQL server

7 réponses
Avatar
Gafish
Bonjour,

Dans un ActiveX en VB dans un DTS SQL Server, je fais un=20
insert par le code. Dans la table en question j'ai un=20
champ num=E9rique, avec compteur =E0 oui.=20
J'aimerai savoir comment r=E9cup=E9rer le num=E9ro attribu=E9=20
automatiquement par SQL Server au champ num=E9rique compteur=20
car par la suite dans mon code VB je fais des update, et=20
j'ai donc besoin de ce num=E9ro comme clause where.

Merci d'avance !

Arnaud

7 réponses

Avatar
Homer J. Simpson
A l'époque lointaine ou Sybase et SQL server ne faisaient qu'un, le truc qui
marchait c'était de faire un :

SELECT @@IDENTITY.

Je pense que ce doit être toujours d'actualité ...

J.Ph.
"Gafish" a écrit dans le message de news:
033f01c36d47$7b410470$
Bonjour,

Dans un ActiveX en VB dans un DTS SQL Server, je fais un
insert par le code. Dans la table en question j'ai un
champ numérique, avec compteur à oui.
J'aimerai savoir comment récupérer le numéro attribué
automatiquement par SQL Server au champ numérique compteur
car par la suite dans mon code VB je fais des update, et
j'ai donc besoin de ce numéro comme clause where.

Merci d'avance !

Arnaud
Avatar
Gafish
Je te remercie beaucoup pour la piste, car ca m'a l'air
effectivement d'être la bonne.
Par contre je ne sais pas trop comment l'utiliser, le but
étant de stocker ce résultat dans une variable.


-----Message d'origine-----
A l'époque lointaine ou Sybase et SQL server ne faisaient


qu'un, le truc qui
marchait c'était de faire un :

SELECT @@IDENTITY.

Je pense que ce doit être toujours d'actualité ...

J.Ph.
"Gafish" a écrit dans le message de


news:
033f01c36d47$7b410470$
Bonjour,

Dans un ActiveX en VB dans un DTS SQL Server, je fais un
insert par le code. Dans la table en question j'ai un
champ numérique, avec compteur à oui.
J'aimerai savoir comment récupérer le numéro attribué
automatiquement par SQL Server au champ numérique compteur
car par la suite dans mon code VB je fais des update, et
j'ai donc besoin de ce numéro comme clause where.

Merci d'avance !

Arnaud


.



Avatar
Homer J. Simpson
Pour récupérer le champ @@IDENTITY:
(A la gestion des erreurs près, dont je te fais grâce, tu es un grand
garçon...)

'================================================== 'Déclaration & ouverture d'une connexion et d'un recordset
Dim poConnexion as ADODB.Connection
Dim poRS as ADODB.Recordset

Dim psSQL as String
Dim ilIdentityValue as Long

Set poConnexion = New ADODB.Connection
Set poRS = New ADODB.Recordset

'A adapter en fonction de ta base
poConnexion.Open "Blabla; Blabla; Blabla"

'Changer MATABLE avec le nom qui va bien.....
psSQL = "SELECT @@IDENTITY from MATABLE"

'Ouverture du RS
poRS.Open psSQL, poConnexion, adOpenStatic, adLockReadOnly

'On se positionne par sécurité sur le 1° (et seul élément du recordset)
poRS.MoveFirst
ilIdentityValue = poRS.Fields(1).Value

'Fermeture et libération ressources
poRS.Close
poConnexion.Close

Set poRS = Nothing
Set poConnexion = Nothing
'================================================== Aux erreurs de syntaxe près (J'ai la flemme de lancer VB pour tester), ça
devrait rouler...

J.Ph.


"Gafish" a écrit dans le message de news:
0c2e01c36d69$c9775320$
Je te remercie beaucoup pour la piste, car ca m'a l'air
effectivement d'être la bonne.
Par contre je ne sais pas trop comment l'utiliser, le but
étant de stocker ce résultat dans une variable.


-----Message d'origine-----
A l'époque lointaine ou Sybase et SQL server ne faisaient


qu'un, le truc qui
marchait c'était de faire un :

SELECT @@IDENTITY.

Je pense que ce doit être toujours d'actualité ...

J.Ph.
"Gafish" a écrit dans le message de


news:
033f01c36d47$7b410470$
Bonjour,

Dans un ActiveX en VB dans un DTS SQL Server, je fais un
insert par le code. Dans la table en question j'ai un
champ numérique, avec compteur à oui.
J'aimerai savoir comment récupérer le numéro attribué
automatiquement par SQL Server au champ numérique compteur
car par la suite dans mon code VB je fais des update, et
j'ai donc besoin de ce numéro comme clause where.

Merci d'avance !

Arnaud


.



Avatar
Gafish
Re !
Bon ca marche en utilisant IDENT_CURRENT('MaTable') à la
place de @@IDENTITY et en gardant tout le reste de ton
code.
Je te remercie encore ! :)

-----Message d'origine-----
Pour récupérer le champ @@IDENTITY:
(A la gestion des erreurs près, dont je te fais grâce, tu


es un grand
garçon...)

'======================== ========================= ==
'Déclaration & ouverture d'une connexion et d'un recordset
Dim poConnexion as ADODB.Connection
Dim poRS as ADODB.Recordset

Dim psSQL as String
Dim ilIdentityValue as Long

Set poConnexion = New ADODB.Connection
Set poRS = New ADODB.Recordset

'A adapter en fonction de ta base
poConnexion.Open "Blabla; Blabla; Blabla"

'Changer MATABLE avec le nom qui va bien.....
psSQL = "SELECT @@IDENTITY from MATABLE"

'Ouverture du RS
poRS.Open psSQL, poConnexion, adOpenStatic, adLockReadOnly

'On se positionne par sécurité sur le 1° (et seul élément


du recordset)
poRS.MoveFirst
ilIdentityValue = poRS.Fields(1).Value

'Fermeture et libération ressources
poRS.Close
poConnexion.Close

Set poRS = Nothing
Set poConnexion = Nothing
'======================== ========================= ==
Aux erreurs de syntaxe près (J'ai la flemme de lancer VB


pour tester), ça
devrait rouler...

J.Ph.


"Gafish" a écrit dans le message de


news:
0c2e01c36d69$c9775320$
Je te remercie beaucoup pour la piste, car ca m'a l'air
effectivement d'être la bonne.
Par contre je ne sais pas trop comment l'utiliser, le but
étant de stocker ce résultat dans une variable.


-----Message d'origine-----
A l'époque lointaine ou Sybase et SQL server ne faisaient


qu'un, le truc qui
marchait c'était de faire un :

SELECT @@IDENTITY.

Je pense que ce doit être toujours d'actualité ...

J.Ph.
"Gafish" a écrit dans le message de


news:
033f01c36d47$7b410470$
Bonjour,

Dans un ActiveX en VB dans un DTS SQL Server, je fais un
insert par le code. Dans la table en question j'ai un
champ numérique, avec compteur à oui.
J'aimerai savoir comment récupérer le numéro attribué
automatiquement par SQL Server au champ numérique




compteur
car par la suite dans mon code VB je fais des update, et
j'ai donc besoin de ce numéro comme clause where.

Merci d'avance !

Arnaud


.





.



Avatar
Homer J. Simpson
Ton INSERT est-il Commité ?

Tant que tu n'auras pas fait de COMMIT explicite, le SGBD ne sait que tu
viens d'insérer une ligne, et donc ne peut pas te renvoyer le N° du dernier
compteur...

BTW, La méthode CommitTrans s'applique à l'objet Connexion, pas au
Recordset....

Bon courage !
J.Ph.

"Gafish" a écrit dans le message de news:
0c3801c36d72$9dc9c010$
Merci beaucoup pour ta réponse.
Pour l'instant, je ne sais pas pourquoi mais ca me renvoit
rien, enfin une valeur nulle, alors que je fais un insert
juste au-dessus, mais bon je devrais pouvoir trouver
maintenant.
Merci encore !

-----Message d'origine-----
Pour récupérer le champ @@IDENTITY:
(A la gestion des erreurs près, dont je te fais grâce, tu


es un grand
garçon...)

'================================================== >'Déclaration & ouverture d'une connexion et d'un recordset
Dim poConnexion as ADODB.Connection
Dim poRS as ADODB.Recordset

Dim psSQL as String
Dim ilIdentityValue as Long

Set poConnexion = New ADODB.Connection
Set poRS = New ADODB.Recordset

'A adapter en fonction de ta base
poConnexion.Open "Blabla; Blabla; Blabla"

'Changer MATABLE avec le nom qui va bien.....
psSQL = "SELECT @@IDENTITY from MATABLE"

'Ouverture du RS
poRS.Open psSQL, poConnexion, adOpenStatic, adLockReadOnly

'On se positionne par sécurité sur le 1° (et seul élément


du recordset)
poRS.MoveFirst
ilIdentityValue = poRS.Fields(1).Value

'Fermeture et libération ressources
poRS.Close
poConnexion.Close

Set poRS = Nothing
Set poConnexion = Nothing
'================================================== >Aux erreurs de syntaxe près (J'ai la flemme de lancer VB


pour tester), ça
devrait rouler...

J.Ph.


"Gafish" a écrit dans le message de


news:
0c2e01c36d69$c9775320$
Je te remercie beaucoup pour la piste, car ca m'a l'air
effectivement d'être la bonne.
Par contre je ne sais pas trop comment l'utiliser, le but
étant de stocker ce résultat dans une variable.


-----Message d'origine-----
A l'époque lointaine ou Sybase et SQL server ne faisaient


qu'un, le truc qui
marchait c'était de faire un :

SELECT @@IDENTITY.

Je pense que ce doit être toujours d'actualité ...

J.Ph.
"Gafish" a écrit dans le message de


news:
033f01c36d47$7b410470$
Bonjour,

Dans un ActiveX en VB dans un DTS SQL Server, je fais un
insert par le code. Dans la table en question j'ai un
champ numérique, avec compteur à oui.
J'aimerai savoir comment récupérer le numéro attribué
automatiquement par SQL Server au champ numérique




compteur
car par la suite dans mon code VB je fais des update, et
j'ai donc besoin de ce numéro comme clause where.

Merci d'avance !

Arnaud


.





.



Avatar
Zoury
Salut!

Pour éclaicir un peu les choses.. :O)

Le @@IDENTITY peut servir si on l'utilise dans une procédure stokée. On
passe le paramètre [ID] avec la mention OUTPUT et le recupère après le
INSERT INTO à l'aide d'une clause SELECT.

Voici un exemple :
http://groups.google.com/groups?selm=uVvyKfXGDHA.2964%40tk2msftngp13.phx.gbl&rnum=8

Je crois que la raison pour laquelle la variable @@IDENTITY est vide lorsque
tu l'appelles après INSERT est parce qu'elle n'est pas appelée dans la même
transaction.

Pour ce qui de ce bout de code, je te remercie grandement, c'est une
solution intéressante qui m'était encore inconnue étant donnée qu'on utilise
pratiquement toujours des procédures stockées. ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Homer J. Simpson
Yannick,

Je t'accorde bien volontiers que ma solution est quelque peu tirée par les
cheveux...
A ma décharge, je travaille habituellement avezc Sybase System 11 et Oracle
8i, et c'est la solution bourrin qui marche sans avoir à passer par des SP.
(On n'a pas toujours la main sur nos bases, malheureusement, pour pouvoir
créer ses propres SP qui vont bien.)

Ta solution est effectivement bien plus élégante ;-)
J.Ph.

"Zoury" a écrit dans le message de news:

Salut!

Pour éclaicir un peu les choses.. :O)

Le @@IDENTITY peut servir si on l'utilise dans une procédure stokée. On
passe le paramètre [ID] avec la mention OUTPUT et le recupère après le
INSERT INTO à l'aide d'une clause SELECT.

Voici un exemple :



http://groups.google.com/groups?selm=uVvyKfXGDHA.2964%40tk2msftngp13.phx.gbl
&rnum=8

Je crois que la raison pour laquelle la variable @@IDENTITY est vide


lorsque
tu l'appelles après INSERT est parce qu'elle n'est pas appelée dans la


même
transaction.

Pour ce qui de ce bout de code, je te remercie grandement, c'est une
solution intéressante qui m'était encore inconnue étant donnée qu'on


utilise
pratiquement toujours des procédures stockées. ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous