IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Accès aux données Discussion :

[VB2005] SELECT @@IDENTITY me retourne 0


Sujet :

Accès aux données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 48
    Par défaut [VB2005] SELECT @@IDENTITY me retourne 0
    Bonjour,

    J'ai un petit problème pour obtenir l'autoincrement dans une base access. J'obtiens toujours la valeur 0 !

    Voici comment je procède :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Dim Nouveau As Boolean = False
     
    If RowDossier.RowState = DataRowState.Detached Then
                dsElite2007event.Dossier.AddDossierRow(RowDossier)
                Nouveau = True
    End If
     
    ' mise à jour du Dossier
    Me.taDossier.Update(Me.dsElite2007event.Dossier)
     
    If Nouveau = True Then
                Dim id As Integer = ClassElite2007database.GetLastIdFromDatabase(Me.taDossier.Connection)
                RowDossier.idDossier = id
    End If
    Et la fonction GetLastIdFromDatabase :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Public Function GetLastIdFromDatabase(ByVal connexion As OleDbConnection) As Integer
     
            Dim id As Integer
     
            Try
                Dim maCommande As New OleDbCommand("SELECT @@IDENTITY", connexion)
     
                maCommande.Connection.Open()
                id = CInt(maCommande.ExecuteScalar())
                maCommande.Connection.Close()
     
                Return id
            Catch
            End Try
     
        End Function
    Est ce que c'est à cause du Update qui ouvre et qui ferme la connexion et une fois la connexion fermé, le @@IDENTITY est perdu ???

    Merci de votre aide si vous avez une petite idée.

  2. #2
    Nip
    Nip est déconnecté
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    963
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 963
    Par défaut
    Citation Envoyé par arno2000
    Est ce que c'est à cause du Update qui ouvre et qui ferme la connexion et une fois la connexion fermé, le @@IDENTITY est perdu ???
    C'est juste, le @@IDENTITY, ou plutot le SCOPE_IDENTITY() (plus judicieux a utiliser), n'est valable que pendant la duree de la session active; si tu fermes la connexion tu perds (forcement) l'Id courant.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 48
    Par défaut
    Merci pour ta réponse Nip.

    J'ai fais autrement, je vais chercher l'ID max.

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Par défaut
    Bonsoir,

    Voici ce que j'ai trouvé dans l'aide VS
    Extraction des valeurs de champs NuméroAuto de Microsoft Access
    Microsoft Access ne prend pas en charge les procédures stockées ou le traitement des commandes batch, et il n'est donc pas possible de mapper un paramètre de sortie à la colonne source de la table de l'exemple précédent. Toutefois, Microsoft Access 2000 ou version ultérieure prend en charge la propriété @@IDENTITY pour extraire la valeur d'un champ NuméroAuto après une insertion (INSERT). En utilisant l'événement RowUpdated, vous pouvez déterminer si une insertion (INSERT) a eu lieu, extraire la dernière valeur de NuméroAuto et la placer dans la colonne d'identité de la table locale du DataSet.

    L'exemple de code suivant montre comment insérer une nouvelle valeur dans la table Categories de la base de données Microsoft Access 2000 Northwind à l'aide d'un objet OleDbDataAdapter. Cet exemple utilise l'événement RowUpdated pour remplir les valeurs NuméroAuto générées par le moteur Jet et la base de données Access lorsqu'un enregistrement est inséré dans la table Categories. Notez que ce code ne fonctionnera qu'avec le fournisseur OLE DB Jet 4.0 et Microsoft Access 2000 ou versions ultérieures.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    ' Assumes that connection is a valid OleDbConnection object.
    ' Use the DataAdapter to fill and update the DataSet.
    Dim adapter As OleDbDataAdapter = New OleDbDataAdapter( _
      "SELECT CategoryID, CategoryName FROM Categories ORDER BY CategoryID", _
      connection)
     
    adapter.InsertCommand = New OleDbCommand( _
      "INSERT INTO Categories (CategoryName) Values(?)", connection)
    adapter.InsertCommand.CommandType = CommandType.Text
     
    adapter.InsertCommand.Parameters.Add( _
      "@CategoryName", OleDbType.Char, 15, "CategoryName")
     
    connection.Open()
     
    ' Fill the DataSet.
    Dim categories As DataSet = New DataSet
    adapter.Fill(categories, "Categories")
     
    ' Add a new row.
    Dim newRow As DataRow = categories.Tables("Categories").NewRow()
    newRow("CategoryName") = "New Category"
    categories.Tables("Categories").Rows.Add(newRow)
     
    ' Include an event to fill in the Autonumber value.
    AddHandler adapter.RowUpdated, _
      New OleDbRowUpdatedEventHandler(AddressOf OnRowUpdated)
     
    ' Update the DataSet.
    adapter.Update(categories, "Categories")
    connection.Close()
     
    ' Event procedure for OnRowUpdated
    Private Shared Sub OnRowUpdated( _
     sender As Object, args As OleDbRowUpdatedEventArgs)
      ' Include a variable and a command to retrieve the identity value
      ' from the Access database.
      Dim newID As Integer = 0
      Dim idCMD As OleDbCommand = New OleDbCommand( _
        "SELECT @@IDENTITY", connection)
     
     If args.StatementType = StatementType.Insert
       ' Retrieve the identity value and store it in the CategoryID column.
        newID = CInt(idCMD.ExecuteScalar())
        args.Row("CategoryID") = newID
      End If
    End Sub
    Sa fonctionne pas mal

    Gwendal

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. select @@identity retourne 2 x le meme identifiant
    Par dietrich dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 20/12/2007, 10h27
  2. [Java][debutant]select count(*) ne retourne rien !!
    Par Invité dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 24/01/2007, 11h39
  3. Réponses: 2
    Dernier message: 18/02/2006, 09h20
  4. SELECT qui ne retourne rien à cause d'anti-slash
    Par mikyfpc dans le forum Outils
    Réponses: 8
    Dernier message: 07/08/2005, 23h04
  5. [c#]Recuperer le resultat d'une requette SELECT @@IDENTITY
    Par MaxiMax dans le forum Windows Forms
    Réponses: 8
    Dernier message: 01/07/2005, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo