VB2010 MySqlDataAdapter recuperer l'auto_increment

mertronic Messages postés 28 Date d'inscription mardi 18 janvier 2005 Statut Membre Dernière intervention 9 août 2015 - 24 juil. 2013 à 19:14
jordane45 Messages postés 38134 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 11 avril 2024 - 25 juil. 2013 à 10:48
Bonjour a tous,
après de longues heures de googlage, je m'en remet a vous.
je cherche à récupérer le numéro de l'auto-incrément sur une bdd mysql.
voici un exemple du code que j'utilise (mais qui n'est pas de moi, merci Prince4878)

MyNewRow("id") = "j'aurai besoin de l'auto incrément ici"
MyNewRow("num") = txtCode.Text
MyNewRow("test") = txtDescription.Text
dst.Tables("table1").Rows.Add(MyNewRow)

Dim MyCommBuild As New MySqlCommandBuilder(da)

version: Vb2010 express
MySql.Data.MySqlClient

merci à tous pour votre aide.

7 réponses

jordane45 Messages postés 38134 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 11 avril 2024 344
24 juil. 2013 à 20:20
Bonjour.
Si dans la table le champ est en auto incrément il n'est utili de le renseigner...il se met automatiquement. .d'ou son nom. :-)


Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
0
jordane45 Messages postés 38134 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 11 avril 2024 344
24 juil. 2013 à 20:21
Pas utile *


Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
0
mertronic Messages postés 28 Date d'inscription mardi 18 janvier 2005 Statut Membre Dernière intervention 9 août 2015
25 juil. 2013 à 07:12
Bonjour et merci pour vos réponses.
Je sais bien que la bdd n'a pas besoin de cette information puisque le champ est en AI. Seulement dans ce didacticiel, il y a un petit tableau datagrid qui se met a jour au fur et a mesure des modifications et qui permet de sélectionner un enregistrement et de le modifier ou de l'effacer.
lorsque j'enregistre un nouvelle ligne de donnée, je me retrouve sur le datagrid avec une info "NULL" à la place de ID. ce ne serait pas trop gênant si cela ne m'empêchait pas de supprimer l'enregistrement.
voici le code en un peu plus complet: (je met juste les éléments concernés. encore une fois ce code n'est pas de moi mais j'ai besoin de le comprendre pour réaliser mon appli).

Imports MySql.Data.MySqlClient ' this is to import MySQL.NET
Dim HostConn As New MySqlConnection 'Pour une conexion a base de données MySQL
Dim da As MySqlDataAdapter 'is use to update the dataset and datasource
Dim DDD As MySqlDataAdapter
Dim dst As New DataSet 'miniature of your table - cache table to client
Dim State As StateEnum 'to know if it is in add, edit, or Idle

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
HostConn.ConnectionString = "server=localhost;" _
& "user id=root;" _
& "password=;" _
& "database=test"

State = StateEnum.StateIdle
Call StateChange()

Try
HostConn.Open()
da = New MySqlDataAdapter("SELECT * FROM table1", HostConn)
da.Fill(dst, "table1")
DataGrid1.DataSource = dst.Tables("table1")
'DataGrid1.DataMember = ("test,num")
DataGrid1.CaptionText = "Record no. " & DataGrid1.CurrentRowIndex + 1 & " of " & dst.Tables("table1").Rows.Count
Dim TabStyle As DataGridTableStyle = New DataGridTableStyle()
TabStyle.MappingName = dst.Tables(0).TableName
DataGrid1.TableStyles.Add(TabStyle)
TabStyle.GridColumnStyles(0).Width = 50
TabStyle.GridColumnStyles(1).Width = 300
TabStyle.GridColumnStyles(2).Width = 100
txtCode.Enabled = True
txtDescription.Enabled = True
Catch myerror As MySqlException
MessageBox.Show("Error Connecting to Database: " & myerror.Message)

End Try
End Sub

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click

Select Case State
Case Is = StateEnum.StateNew 'Ajouter un record
Dim MyNewRow As DataRow = dst.Tables("table1").NewRow
Try

MyNewRow("num") = txtCode.Text
MyNewRow("test") = txtDescription.Text
dst.Tables("table1").Rows.Add(MyNewRow)

Dim MyCommBuild As New MySqlCommandBuilder(da)
da.Update(dst, "table1")
DataGrid1.Refresh()
Catch err As Exception
MsgBox(err.Message, MsgBoxStyle.Exclamation, "error")
dst = New DataSet
da = New MySqlDataAdapter("SELECT * FROM table1", HostConn)
da.Fill(dst, "table1")
DataGrid1.DataSource = dst.Tables("table1")
Exit Sub
End Try

Case Is = StateEnum.StateEdit ' Modifier un record
Dim MyEditRow As DataRow = dst.Tables("table1").Rows(DataGrid1.CurrentRowIndex)
MyEditRow.BeginEdit()
MyEditRow("num") = txtCode.Text
MyEditRow("test") = txtDescription.Text

Dim MyCommBuild As New MySqlCommandBuilder(da)
da.Update(dst, "table1")

MsgBox("Record has been updated", MsgBoxStyle.Information)
DataGrid1.Enabled = True
End Select

State = StateEnum.StateIdle
Call StateChange()
End Sub

Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
'dst.Tables("table1").Rows(9).Delete()
dst.Tables("table1").Rows(DataGrid1.CurrentRowIndex).Delete()
Dim MyCommBuilder As New MySqlCommandBuilder(da)
da.Update(dst, "table1")
End Sub

Je vous remercie une nouvelle fois pour votre temps et pour votre aide. J'ai quelques connaissance en PHP, MySql, VB6. je débute en VB.Net.
Bonne journée à vous.
0
mertronic Messages postés 28 Date d'inscription mardi 18 janvier 2005 Statut Membre Dernière intervention 9 août 2015
25 juil. 2013 à 07:37
Je précise toutefois que si j'ajoute manuellement le numéro ID lors de l'enregistrement (et si je met le bon numéro) tout fonctionne parfaitement. il y a donc 2 façon d'aborder le problème, ajouter l'ID lors de l'enregistrement ou mettre à jour le datagrid.
j'ai bien entendu essayé un datagrid1.refresh j'ai aussi essayé d'effacer le datagrid et de le remplir à nouveau mais sans résultat. je me suis donc tourné vers la recherche de l'info AI mais c'est peut-être la mauvaise solution.
Merci encore pour votre aide.
(PS, sur le fond, je me fout de l'affichage de ce numéro, il me sert juste à lier des tables, j'afficherai donc cette colonne avec un width de 0. mais j'ai besoin de pouvoir supprimer des records, et lorsque que je ne met pas le bon numéro dans le champs ID de mon datagrid, j'ai une erreur "Concurrency violation: the DeleteCommand affected 0 of the expected 1 records.")
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38134 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 11 avril 2024 344
25 juil. 2013 à 08:05
Bonjour.


Et avez vous essayez de faire une requêtes du type:
SELECT MAX (id) from table1


Cela cous donnerait le dernier id de votre table1.


Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
0
mertronic Messages postés 28 Date d'inscription mardi 18 janvier 2005 Statut Membre Dernière intervention 9 août 2015
25 juil. 2013 à 08:30
merci jordane pour cette réponse,
J'avais effectivement songé à cette solution mais elle alourdie le code. je me demandais si il n'étais pas possible d'obtenir cette information en passant par le dataset ou par le dataadapteur.
un gendre de dst.xxxxxx(@@ MAX_ID)
il semble que ce soit possible sous SQL de cette façon:
SELECT @@IDENTITY AS IDENT,
SCOPE_IDENTITY() AS SCOP_IDENT,
IDENT_CURRENT('dbo.T_CLIENT_CLI') AS CURR_IDENT

plus "propre et conci (à moins que je ne fasse pas correctement mes requettes MySql sous VBnet, ce qui reste possible)
Merci pour votre aide.
Amicalement.
0
jordane45 Messages postés 38134 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 11 avril 2024 344
25 juil. 2013 à 10:48
Bonjour,

NB : Pensez bien à utiliser les balises de CODE lorsque vous en mettez dans vos messages.


Ensuite, j'ai continué à chercher une solution à votre question.
Je n'ai malheureusement pas de Visual Studio sous la main pour tester.

Par contre, il existe dans MySQL une fonction permettant d'obtenir le Last Insert ID


Après il y a surement d'autre façons de procéder... mais là j'avoue, je sèche un peu.
Bonnes recherches

Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
0
Rejoignez-nous