Meilleur auteur de réponses
Problem Avec les Update

Question
-
Bonjour- je trouve des difficultés énormes pour enregistrer les donnes dans ma base Ms Acces à partir d'un dataset en VB.net - je m'explique jai une BD qui contient 2 table: "patient" et "Consult" relié par un cléf unique et autoincrémentée qu'est N_Doss (l'Id) de patient -connecter la base et créez les dataset ne pose pas problme (en mode assistant) - je cree 2 form le premier reçoit les données de la table Patient (des textbox et un datagridview) le deuxième reçoit les donnes de consult (idem des textbox et un datagridview)- je fait la liaison par un simple bouton - ce que je veut faire c'est de rajouter pour chaque Enregistrement de patient un enregistrement dans table cons en utilisant N_doss - le problem c'est que la valeur de N_doss dans le form père est négative (autoincrémentation du dataset). je suis obligé de fermer le form pourque le nouveau ID (N_doss) se mette à jour- sinon l'ouverture du form enfant affiche la valeur négative de l'ID et l'enrteguistremnt est impossible- voici mon code sur le bouton - je précise que je débute - mais alors je débute avec VB et le Code En génréal!! merci d'avance:-) ))))
- Modifié MostMaster mardi 12 mai 2015 15:48
Réponses
-
Bonsoir,
Le résultat de mes tests...
J'ai fais une application basique avec Visual studio 2013
Je déclare une source de données.
Ensuite je fais un glisser-coller de la source sur le formulaire. visual Studio créé un gridview et un Navigator bindingsource.
Voici ce que cela donne:
Lorsque j'ajoute un enregistrement la première cellule qui est un compteur automatique est bien à -1.
Pour enregistrer vers la base de données il suffit de cliquer sur le dernier bouton du bindingnavigator (la disquette).
Dans l'évènement déclenché par ce clic j'ai copié une ligne.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}private void Form1_Load(object sender, EventArgs e)
{
// TODO: cette ligne de code charge les données dans la table 'gBgestionDataSet.Client'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
this.clientTableAdapter.Fill(this.gBgestionDataSet.Client); //Ligne à copier...
}private void clientBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.clientBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.gBgestionDataSet);
//Ligne suivant a été copiée de Form1_Load...
this.clientTableAdapter.Fill(this.gBgestionDataSet.Client);
}La DB et le DS se mettent à jour...
Cordialement
Gérard- Proposé comme réponse GP79 mercredi 13 mai 2015 19:40
- Marqué comme réponse MostMaster mercredi 13 mai 2015 20:14
Toutes les réponses
-
Bonsoir,
Lorsque vous enregistrez un nouveau patient, la table du Dataset ne contient pas l'identifiant incrémenté par la base de données, effectivement, celui ci reste à -1. Vous devez recharger la table des patients (sans fermer le formulaire), récupérer l'id du patient et l'utiliser pour la table des consultations. (En fait, fermer et réouvrir le formulaire revient à recharger la table des patients... avec les bons ID)Cordialement
Gérard -
Merci Gérard d'avoir répondu Si Rapidement-
Comment faire Pour recharger la table ?- Modifié MostMaster mardi 12 mai 2015 17:18
-
-
Bonjour,
Je crois que ceci (à adapter) devrait faire l'affaire :
Dim rs as DAO.Recordset
CurrentDB.Execute ("INSERT INTO .....")
Set rs = CurrentDB.OpenRecordset("SELECT @@IDENTITY")If Not rs.EOF Then
MsgBox rs.Fields(0)
Else
MsgBox "No AutoNumber generated."
End Ifrs.Close()
Jacques
Si la réponse vous satisfait, n'oubliez pas de la proposer comme réponse. Merci -
-
Bonjour,
Non, c'est juste le principe qu'il faut traduire en vb net. :-)
Cela permet de récupérer le dernier ID créé.
Dim cmdInsert As New OleDbCommand cmdInsert.Connection = ObjetConnection cmdInsert.CommandText = strSQL cmdInsert.ExecuteNonQuery()
Jacques
Si la réponse vous satisfait, n'oubliez pas de la proposer comme réponse. Merci- Modifié Paraglider mardi 12 mai 2015 22:26
-
-
Bonjour
voila un aperçu ( ne vous cassez pas la tête avec la qualité car c'est un projet d'apprentissage donc se sont des Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click essais que je fait )
'-->updat
Me.Validate()
Me.PatientBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.BDMDataSet)
'--> rechargement du DS
Me.ConsultTableAdapter.Fill(Me.BDMDataSet.Consult)
Me.PatientTableAdapter.Fill(Me.BDMDataSet.Patient)
Form2.Show()
Form2.PatientBindingSource.AddNew()
NomTextBox.Text = Me.NomTextBox.Text
PrenomTextBox.Text = Me.PrenomTextBox.TextEnd Sub
Fermer et rouvrir le Form est une solution non élégante - en rechargeant le DS avec la methode Fill ne semble pas régler le problème des suggestion?
Merci pour tous
-
-
-
Bonsoir,
Le résultat de mes tests...
J'ai fais une application basique avec Visual studio 2013
Je déclare une source de données.
Ensuite je fais un glisser-coller de la source sur le formulaire. visual Studio créé un gridview et un Navigator bindingsource.
Voici ce que cela donne:
Lorsque j'ajoute un enregistrement la première cellule qui est un compteur automatique est bien à -1.
Pour enregistrer vers la base de données il suffit de cliquer sur le dernier bouton du bindingnavigator (la disquette).
Dans l'évènement déclenché par ce clic j'ai copié une ligne.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}private void Form1_Load(object sender, EventArgs e)
{
// TODO: cette ligne de code charge les données dans la table 'gBgestionDataSet.Client'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
this.clientTableAdapter.Fill(this.gBgestionDataSet.Client); //Ligne à copier...
}private void clientBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.clientBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.gBgestionDataSet);
//Ligne suivant a été copiée de Form1_Load...
this.clientTableAdapter.Fill(this.gBgestionDataSet.Client);
}La DB et le DS se mettent à jour...
Cordialement
Gérard- Proposé comme réponse GP79 mercredi 13 mai 2015 19:40
- Marqué comme réponse MostMaster mercredi 13 mai 2015 20:14
-
Bingo !!!!!
ça Marche Maintenant avec un projet clean--
Mon erreur était de trop compliquer le code au point de tout brouiller
Effectivement et ça parait logique : il faut charger les données à partir de la BD jusqu'au Dataset- une fois les modifs faites et enregistrement fait la BD est mise à jour il faut reconvoquer les donnes par une méthode fill sur le binding source. pour que notrer DAtaset affiche les nouvelles modification (et donc les Id positif).
merci beaucoup Gérard - Bon Point