Connecter base de donnée access

Résolu
germany1970 Messages postés 134 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 22 mars 2014 - 31 déc. 2010 à 19:18
vblover Messages postés 57 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 27 janvier 2011 - 4 janv. 2011 à 21:58
Bonsoir et bonne et heureuse année 2011,
mon problème le suivant :
j'ai écrit le code pour se connecter à une base de donnée access, j'ajoute un enregistrement et quand je sort de l'application et l'ouvrir après je trouve aucun enregistrement sauvegarder.
prière de m'orienter oû se trouve le problème ou vous me donner le code exacte.

le code est le suivant :

Private Sub fourniss_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

conn "provider microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\stock.mdb;"
cnx = New OleDbConnection
cnx.ConnectionString = conn
cnx.Open()

sql = "select fournisseur.* from fournisseur"
cmd = New OleDbCommand(sql)
dta = New OleDbDataAdapter(cmd)
cmd.Connection() = cnx

'chargement du DataSet à partir du DataAdapter
dta.Fill(dts, "fournisseur")

'chargement de la DataTable à partir du DataSet
dtt = dts.Tables("fournisseur")

'si la table est vide alors
If rownum > dtt.Rows.Count - 1 Then
Me.Show()
Else
Me.TextBox1.Text = dtt.Rows(rownum).Item("code")
Me.TextBox2.Text = dtt.Rows(rownum).Item("fournis")
Me.TextBox3.Text = dtt.Rows(rownum).Item("nom")
Me.TextBox4.Text = dtt.Rows(rownum).Item("prenom")
Me.TextBox5.Text = dtt.Rows(rownum).Item("fonction")
Me.TextBox6.Text = dtt.Rows(rownum).Item("adresse")
Me.TextBox7.Text = dtt.Rows(rownum).Item("ville")
Me.MaskedTextBox1.Text = dtt.Rows(rownum).Item("telb")
Me.MaskedTextBox2.Text = dtt.Rows(rownum).Item("fax")
Me.MaskedTextBox3.Text = dtt.Rows(rownum).Item("gsm")
Me.TextBox8.Text = dtt.Rows(rownum).Item("mail")
Me.TextBox9.Text = dtt.Rows(rownum).Item("web")
Me.MaskedTextBox4.Text = dtt.Rows(rownum).Item("patente")
Me.MaskedTextBox5.Text = dtt.Rows(rownum).Item("rc")
DataGrid1.SetDataBinding(dts, "fournisseur")
End If
End Sub

Private Sub EnregistrerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EnregistrerToolStripMenuItem.Click
Try
Try
dtr = dts.Tables("fournisseur").NewRow

dtr("code") = Me.TextBox1.Text
dtr("fournis") = Me.TextBox2.Text
dtr("nom") = Me.TextBox3.Text
dtr("prenom") = Me.TextBox4.Text
dtr("fonction") = Me.TextBox5.Text
dtr("adresse") = Me.TextBox6.Text
dtr("ville") = Me.TextBox7.Text
dtr("telb") = Me.MaskedTextBox1.Text
dtr("fax") = Me.MaskedTextBox2.Text
dtr("gsm") = Me.MaskedTextBox3.Text
dtr("mail") = Me.TextBox8.Text
dtr("web") = Me.TextBox9.Text
dtr("patente") = Me.MaskedTextBox4
dtr("rc") = Me.MaskedTextBox5.Text

dts.Tables("fournisseur").Rows.Add(dtr)
cmdb = New OleDbCommandBuilder(dta)
dta.Update(dts, "fournisseur")

dts.Clear()
dta.Fill(dts, "fournisseur")
dtt = dts.Tables("fournisseur")

DataGrid1.SetDataBinding(dts, "fournisseur")
rownum = 0
Me.TextBox1.Text = dtt.Rows(rownum).Item("code")
Me.TextBox2.Text = dtt.Rows(rownum).Item("fournis")
Me.TextBox3.Text = dtt.Rows(rownum).Item("nom")
Me.TextBox4.Text = dtt.Rows(rownum).Item("prenom")
Me.TextBox5.Text = dtt.Rows(rownum).Item("fonction")
Me.TextBox6.Text = dtt.Rows(rownum).Item("adresse")
Me.TextBox7.Text = dtt.Rows(rownum).Item("ville")
Me.MaskedTextBox1.Text = dtt.Rows(rownum).Item("telb")
Me.MaskedTextBox2.Text = dtt.Rows(rownum).Item("fax")
Me.MaskedTextBox3.Text = dtt.Rows(rownum).Item("gsm")
Me.TextBox8.Text = dtt.Rows(rownum).Item("mail")
Me.TextBox9.Text = dtt.Rows(rownum).Item("web")
Me.MaskedTextBox4.Text = dtt.Rows(rownum).Item("patente")
Me.MaskedTextBox5.Text = dtt.Rows(rownum).Item("rc")
Catch ex As Exception
End Try
Ens Sub

3 réponses

vblover Messages postés 57 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 27 janvier 2011
2 janv. 2011 à 05:03
a mon avis il te faut la pair dtr.beginedit() et dtr.endedit() qui doit encadrer le code
ou tu affectes des baleurs a ta datarow co;;e suit:
dtr.beguinedit()
dtr("code") = Me.TextBox1.Text
dtr("fournis") = Me.TextBox2.Text
dtr("nom") = Me.TextBox3.Text
dtr("prenom") = Me.TextBox4.Text
dtr("fonction") = Me.TextBox5.Text
dtr("adresse") = Me.TextBox6.Text
dtr("ville") = Me.TextBox7.Text
dtr("telb") = Me.MaskedTextBox1.Text
dtr("fax") = Me.MaskedTextBox2.Text
dtr("gsm") = Me.MaskedTextBox3.Text
dtr("mail") = Me.TextBox8.Text
dtr("web") = Me.TextBox9.Text
dtr("patente") = Me.MaskedTextBox4
dtr("rc") = Me.MaskedTextBox5.Text
dtr.endedit()

De plus tu devrais enlever la ligne
cmdb = New OleDbCommandBuilder(dta)
Question: pourquoi tu as 2 try qui se suivent et un seul end try ? Pourquoi ens sub
Et si tu indentais ton code?
vblover
3
vblover Messages postés 57 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 27 janvier 2011
3 janv. 2011 à 19:25
apparamment ton code est bon. je ne vois que la ligne cmb=new commandbuilder(dta) qui me tracasse en effet en creant une nouelle instance de commandbuilder, ton code oublie quels changements ont ete apportes au dataset et lorsque tu update il n'y a aucun changement qui se produit. Je te conseille de deplacer la ligne incriminee vers le haut de ton code tout juste aant la ligne
cmd.Connection() = cnx



vblover
0
vblover Messages postés 57 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 27 janvier 2011
4 janv. 2011 à 21:58
ecoute je te passe un morceau de code qui fonctionne essaies de t'inspirer.
+++++++++++++++++++++++++++++++++++++++++++
Option Explicit On
Imports System
Imports System.Data
Imports System.Data.OleDb
Imports Microsoft.VisualBasic


Public Class frmdossier
Dim objtable_agents As DataTable
Private rownum As Integer

Private Sub frmdossier_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim Sql_Dossier As String, Str_sqlAgents As String
Dim Cmd_Agent As OleDbCommand
Dim Dta_Agents As OleDbDataAdapter
Dim Lng_Nombreagents As Long, Lng_FirstCodeagent As Long
Dim Bl_Dummy As Boolean

'ouvrir une connexion
If obj_connectionglobal.State = ConnectionState.Closed Then
Try
obj_connectionglobal.Open()
Catch ex As Exception
MsgBox("connection impossible")
Exit Sub
End Try
End If
'charger la table des agents
Str_sqlAgents = "select [code utilisateur],[utilisateur] from utilisateurs order by [utilisateur]"
Cmd_Agent = New OleDbCommand(Str_sqlagents, Obj_connectionGlobal)
dta_agents = New OleDbDataAdapter(Cmd_agent)
Dts = New DataSet
dta_agents.Fill(Dts, "agents")
objtable_agents = Dts.Tables("agents")
Dim Int_Row As Int32
Lng_Nombreagents = objtable_agents.Rows.Count - 1
If Lng_Nombreagents < 0 Then
MsgBox("Commencez par saisir les agents d'abord")
Exit Sub
End If
For Int_Row = 0 To Lng_Nombreagents
ComboBox1.Items.Add(objtable_agents.Rows(Int_Row).Item(1))
If Int_Row = 0 Then
Lng_FirstCodeagent = objtable_agents.Rows(0).Item(0)
End If
Next
' mettre la selection sur la premiere marque
ComboBox1.SelectedIndex = 0
'charger la table des dossiers
Sql_Dossier = "select dossiers.* from dossiers order by [raison sociale]"
Cmd = New OleDbCommand(Sql_Dossier)
dta = New OleDbDataAdapter(Cmd)
Cmd.Connection() = obj_connectionglobal
'dts = New DataSet
Dta.Fill(Dts, "dossiers")
Dtt = Dts.Tables("dossiers")

rownum = 0
Bl_Dummy = DisplayDossierData(Dtt, rownum)
If obj_connectionglobal.State = ConnectionState.Open Then
obj_connectionglobal.Close()
End If

End Sub


Private Sub cmdAjouter_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CmdAjouter.Click
Gstr_EditMode = "Ajout"
'creation d'une nouvelle ligne
Dtr = Dts.Tables("dossiers").NewRow
Me.Txtnom.BackColor = Gcol_ActiveColor
Me.txtcode.Text = ""
Me.Txtnom.Text = ""
Me.Txtadresse.Text = ""
Me.ComboBox1.SelectedIndex = 0
Me.Txtville.Text = ""
Me.Txttelephone.Text = ""
Me.Txtstatut.Text = "Actif"
Me.Txtabreviation.Text = ""
End Sub

Private Sub CmdMaj_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CmdMaj.Click
Dim lng_SelectedIndex As Long, Lng_CodeSelectedAgent As Long
' eviter que le champs raison sociale ne soit vide
If Len(RTrim(LTrim(Me.Txtnom.Text))) = 0 Then
MsgBox("Saississez la raison sociale(nom)", MsgBoxStyle.Critical)
Me.Txtnom.Focus()
Exit Sub
End If
cmdb = New OleDbCommandBuilder(dta)
Cmdb.QuotePrefix = "["
Cmdb.QuoteSuffix = "]"
If Gstr_EditMode = "Ajout" Then
Gstr_EditMode = ""
Me.CmdModifier.Enabled = True
Me.CmdSupprimer.Enabled = True
Dtr = Dts.Tables("dossiers").NewRow
'modification des données
dtr.BeginEdit()
Dtr("raison sociale") = Me.Txtnom.Text
dtr("adresse") = Me.Txtadresse.Text
dtr("ville") = Me.Txtville.Text
Dtr("telephone") = Me.Txttelephone.Text
Dtr("efface") IIf(Me.Txtstatut.Text "Efface", vbTrue, vbFalse)
Dtr.EndEdit()
'ajout de la ligne dans le DataSet
Dts.Tables("dossiers").Rows.Add(Dtr)
Else
If Gstr_EditMode = "Modif" Then
Gstr_EditMode = ""
'récupération de la ligne sur laquelle on est placés dans le datarow
Dtr = Dts.Tables("dossiers").Rows(rownum)
End If
End If
lng_SelectedIndex = ComboBox1.SelectedIndex
Lng_CodeSelectedAgent = objtable_agents.Rows(lng_SelectedIndex).Item("code utilisateur")
Dtr("agent") = Lng_CodeSelectedAgent
'mise à jour des données du dataadapter(dta)à partir du commandbuilder (cmdb)
If obj_connectionglobal.State = ConnectionState.Closed Then
Try
Obj_connectionGlobal.Open()
Catch ex As Exception
MsgBox("connection impossible")
Exit Sub
End Try
End If
Dta.Update(Dts, "dossiers")
'on vide le dataset pour le recréer avec les nouvelles données

Dts.Clear()
Dta.Fill(Dts, "dossiers")
Dtt = Dts.Tables("dossiers")
Obj_connectionGlobal.Close()
End Sub

Private Sub Cmdmodifier_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CmdModifier.Click
Gstr_EditMode = "Modif"
'récupération de la ligne sur laquelle on est placés dans le datarow
Dtr = Dts.Tables("dossiers").Rows(rownum)

'modification des données
Dtr("raison sociale") = Me.Txtnom.Text
dtr("adresse") = Me.Txtadresse.Text
Dtr("ville") = Me.Txtville.Text
dtr("telephone") = Me.Txttelephone.Text
Dtr("efface") IIf(Me.Txtstatut.Text "Efface", vbTrue, vbFalse)
End Sub

Private Sub cmdsupprimer_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CmdSupprimer.Click

Dim bl_efface As Boolean
Gstr_EditMode = "Suppression"
'suppression de la ligne en cours
bl_efface = Dtt.Rows(rownum).Item("efface")
Dtt.Rows(rownum).Item("efface") = Not (bl_efface)
End Sub
End Class


+++++++++++++++++++++++++++++++++++++++++++++
Bonne chance
vblover
0
Rejoignez-nous