Dim con As IDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=D:\Database1.accdb;") Try con.Open() Dim cmd As OleDbCommand Dim sql_ajouter As String sql_ajouter = "INSERT INTO Decision ([Finnancements],[Chapitres])" sql_ajouter &= " VALUES(@Finnancements, @Chapitres);" cmd = New OleDbCommand(sql_ajouter, con) cmd.Parameters.AddWithValue("@Finnancements", "text1") cmd.Parameters.AddWithValue("@Chapitres", "text2") cmd.ExecuteNonQuery() Dim GetLastcmd As OleDbCommand = New OleDbCommand("SELECT MAX(ID) AS DernierId FROM Decision", con) Dim DernierId = GetLastcmd.ExecuteScalar() con.Close() Catch ex As Exception MessageBox.Show(ex.Message) Finally con.Close() End Try
Dim DernierId as integer =Convert.ToInt32(GetLastcmd.ExecuteScalar())
sql_afficheIDdecision = "SELECT TOP 1 ID as dernierID FROM Decision ORDER BY ID DESC;"
Me.DernierID.Text = sql_afficheIDAmis
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionDim cmd As SqlCommand Dim sql_ajouter As String sql_ajouter = "INSERT INTO Decision (Finnancements,Chapitres)" sql_ajouter &= " VALUES(@Finnancements, @Chapitres)" sql_ajouter &= "SELECT IDENT_CURRENT('Decision')" cmd = New SqlCommand(sql_ajouter, con) cmd.Parameters.AddWithValue("@Finnancements", "text1") cmd.Parameters.AddWithValue("@Chapitres", "text2") con.Open() Dim DernierId = cmd.ExecuteScalar() con.Close()
'Jai changé cette ligne : Dim cmd As SqlCommand à
Dim sql_ajouter As String
sql_ajouter = "INSERT INTO Decision (Finnancements,Chapitres)"
sql_ajouter &= " VALUES(@Finnancements, @Chapitres)"
sql_ajouter &= "SELECT IDENT_CURRENT('Decision')"
'J'ai changé cette ligne : cmd = New SqlCommand(sql_ajouter, con) à
cmd = New OleDb.OleDbCommand(sql_ajouter, con)
cmd.Parameters.AddWithValue("@Finnancements", "text1")
cmd.Parameters.AddWithValue("@Chapitres", "text2")
con.Open()
Dim DernierId = cmd.ExecuteScalar() '''''''''''''Ici l'erreur fatale
con.Close()
'récuperation du dernier ID Dim GetLastcmd As OleDb.OleDbCommand= New OleDb.OleDbCommand("SELECT MAX(ID) AS DernierId FROM Decision", con) Dim DernierId = GetLastcmd.ExecuteScalar() '
Modifié par autodidacte3 le 5/01/2014 à 13:22
Le code me donne le dernier ID existant non le dernier inséré ?
Chez moi par exemple j'ai dix enregistrements Auto-numéroté de 1 à 10 et ben le code ci-dessus m'affiche 10 non 11 du nouveau inséré et ainsi de suite?
Je vais réessayer après quelques modifications.
Je te remercie Robert.
5 janv. 2014 à 15:50
Cela me donne bien le dernier inséré.
j'ai dix enregistrements Auto-numéroté de 1 à 10, le code ci-dessus insère un 11ieme et je récupère bien 11 comme dernier numéro
Modifié par autodidacte3 le 6/01/2014 à 09:24
ou
Merci et bonne continuation. :)
7 janv. 2014 à 11:36
Il n'y a pas de différence dans l'exécution, la différence est syntaxique
Dans les 2 cas c'est bien le dernier ID qui est retourné.
Dans le premier cas on force la réception d'un Int32, ce qui est obligatoire si tu as ajouté "option explicit on et option strict on" car toutes les variables doivent être typées.
Dans le deuxième cas le type de la variable est inconnue, ce qui n'est pas préconisé.
Donc la première syntaxe donne une meilleur lisibilité.
---
bob
Modifié par autodidacte3 le 7/01/2014 à 16:10
C'est exactement ce que j'ai retenu
Une dernière question si vous me le permettez ?
J'ai un petit doute et par manque d'expérience, le SELECT MAX(ID) affiche le plus grand nombre de la colonne ID auto-incrémenté, si j'effectue des suppressions d'anciennes lignes de ma table par la requête SELECT DELET... es-ce que ses anciennes lignes qui portent évidement des petits nombres ne seront jamais remplacer par les nouvelles insertions? si c'est le cas mon programme ne m'affichera pas le dernier insérer? dans ce cas je serais en très mauvaise posture?
Exemple : ma table .mdb contient 1000... enregistrements numérotés de 1 à 1000..., si je supprime les dix premiers de 1 à 10, et j'enregistre par la suite plusieurs autres, es que ces dernier ne prendront pas les valeurs de l'ID déjà supprimés?
je tourne autour d'une idée de plus c'est d'ajouté une date :
select date from table where id in (select max(id) from table); ou date = la dernière date d'insertion :)