mertronic
Messages postés28Date d'inscriptionmardi 18 janvier 2005StatutMembreDernière intervention 9 août 2015
-
24 juil. 2013 à 19:14
jordane45
Messages postés38138Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention17 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)
mertronic
Messages postés28Date d'inscriptionmardi 18 janvier 2005StatutMembreDerniè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
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.
mertronic
Messages postés28Date d'inscriptionmardi 18 janvier 2005StatutMembreDerniè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.")
Vous n’avez pas trouvé la réponse que vous recherchez ?
mertronic
Messages postés28Date d'inscriptionmardi 18 janvier 2005StatutMembreDerniè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.