VB6 ADO Set rs=commande.Exécuter
Set rs = command.Execute
if not rs.EOF then
'logic here
end if
Le code ci-dessus échoue à la ligne 2, parce que rs est fermé(probablement le fournisseur oledb compris, à tort, que c'est une commande insert, donc pas besoin de retourner quoi que ce soit). La commande est une instruction insert quelque chose comme:
Insert into log(Name,Value) values("xxx", 123); select scope_identity()
J'ai besoin de l'identité à partir du serveur dans un aller-retour. Des idées?
PS: mise à Jour instruction d'insertion avec des noms de champ(merci Eduardo), mais ce n'est pas le problème.
OriginalL'auteur Cosmin Onea | 2009-04-07
Vous devez vous connecter pour publier un commentaire.
Votre problème, c'est que la source de données est de retour en deux jeux d'enregistrements. Cela est dû à la NOCOUNT réglage de la base de données. Le premier jeu d'enregistrements est simplement utilisé pour retourner les enregistrements affectés de l'instruction insert. Le deuxième jeu d'enregistrements renvoie les résultats de l'SÉLECTIONNEZ SCOPE_IDENTITY appel. Donc vous devez faire:
Alors vous pouvez vérifier expressions du FOLKLORE et tout ça.
Mais je usally éviter tout cela et de mettre des trucs comme ça dans une procédure stockée. Ensuite, j'ai SET NOCOUNT on dans la procédure stockée. Et de renvoyer l'id à la fin de la procédure stockée. Dès maintenant vos inserts est peut-être simple comme ça, mais la logique peut se développer. En le mettant dans une procédure stockée, vous pouvez simplement modifier la procédure stockée et ne pas avoir à changer votre compilé d'applications visual basic. Il isole également le code de base de données un peu.
Ce que vous ne voulez pas faire, SET NOCOUNT on dans votre déclaration. Qui, je pense, affecte l'ensemble de connexion pour la base de données.
OriginalL'auteur Will Rickards
Select @@Identity from TableName devrait donner le dernier id inséré
scope_identity me donner le dernier id inséré ainsi le problème est de savoir comment dois-je le faire dans un aller-retour.
OriginalL'auteur Ropstah
Est ce SQL Server? Essayez d'ajouter
SET NOCOUNT ON
au début de votre SQL par exempleOriginalL'auteur onedaywhen
Vous pourriez essayer de retourner le code dans une fonction.
Bien que je pense de ce que vous avez ci-dessus, où vous faire une insertion, puis sélectionnez un devrait fonctionner d'une certaine façon.
OriginalL'auteur Jamie