[.NET] Mise à jour Bdd

Sniper_Vgaerr Messages postés 113 Date d'inscription jeudi 2 décembre 2004 Statut Membre Dernière intervention 14 août 2006 - 12 août 2006 à 00:41
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 15 août 2006 à 00:53
Bonjour à tous,

J'ai un petit souci dans mon programme VB.NET. J'ai crée un programme de gestion de fiches clients ainsi que de classeurs, qui correspondent à des départements. J'ai ce code :

    Private cnx As OleDb.OleDbConnection
    Private cmd As OleDb.OleDbCommand
    Private da As OleDb.OleDbDataAdapter
    Private ds As DataSet
    Private dt As DataTable
    Private dr As DataRow
    Private rownum As Integer
    Private cmdb As OleDb.OleDbCommandBuilder
    Private Interlocuteur As Boolean



    Private Sub FrmClients_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        On Error GoTo Err
        ListView1.Clear()
        ListView1.View = View.Details
        ListView1.Columns.Add("Nom", 90, HorizontalAlignment.Left)
        ListView1.Columns.Add("Prénom", 80, HorizontalAlignment.Left)
        ListView1.Columns.Add("Fonction", 70, HorizontalAlignment.Left)
        ListView1.Columns.Add("Email", 130, HorizontalAlignment.Left)
        ListView1.Columns.Add("Téléphone", 85, HorizontalAlignment.Left)
        Exit Sub
Err:
        MsgBox("Une erreur est survenue dans l'initialisation de la listview.", MsgBoxStyle.Critical, "Erreur initialisation listview.")
    End Sub



    Private Sub FrmClients_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint


        rownum = FrmGestion.ListView1.SelectedItems(0).Index
        cnx New OleDb.OleDbConnection("provider microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\Clients.mdb;")
        Try
            cnx.Open()
            da = New OleDb.OleDbDataAdapter("SELECT Societe, Adresse1, Ville, CP, Dept, Region, Tel, Port, Fax, Email, Internet, NClient, Interlocuteur, Etat, SocieteAL, Adresse1AL, Adresse2AL, VilleAL, CodePostalAL, DeptAL, SocieteAF, Adresse1AF, Adresse2AF, VilleAF, CodePostalAF, DeptAF, NFR, NSIRET, Reglement, A4, DateA4, Carnet, DateCarnet, Continu, DateContinu, Contisnap, DateContisnap, Etiquette, DateEtiquette, Liasse, DateLiasse, Mailer, DateMailer, Plaquette, DatePlaquette, Tete, DateTete, Contrainte, CE FROM [" & TableEnCours & "]", cnx)
            ds = New DataSet
            da.Fill(ds)
            dt = ds.Tables(0)
            If dt.Rows.Count = 0 Then MsgBox("La table " & TableEnCours & " est vide.", MsgBoxStyle.Information, "Table vide.")
            'rownum = 0
            Nombre.Text = rownum
        Catch ex As Exception
            MsgBox("Une erreur est survenue dans le chargement de la base de donnée Clients.mdb.", MsgBoxStyle.Critical, "Erreur base de donnée.")
            Debug.Write(ex.Message)
            Debug.Write(ex.StackTrace)
        Finally
            cnx.Close()
            cnx.Dispose()
            cnx = Nothing
            Call Misejour()
        End Try


        Me.Width = FrmMain.Width - FrmMain.ToolStrip1.Width - 12
        Me.Height = FrmMain.Height - 32
    End Sub



 Private Sub Premier_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Premier.Click

        On Error GoTo Err
        rownum = 0
        Call Misejour()
        Nombre.Text = rownum
Err:
    End Sub



    Private Sub Arriere_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Arriere.Click

        On Error GoTo Err
        If rownum = 0 Then Exit Sub
        rownum -= 1
        Call Misejour()
        Nombre.Text = rownum
Err:
    End Sub



    Private Sub Suivant_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Suivant.Click

        On Error GoTo Err
        If rownum = dt.Rows.Count - 1 Then Exit Sub
        rownum += 1
        Call Misejour()
        Nombre.Text = rownum
Err:
    End Sub



    Private Sub Dernier_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Dernier.Click

        On Error GoTo Err
        rownum = dt.Rows.Count - 1
        Call Misejour()
        Nombre.Text = rownum
Err:
    End Sub


    Private Function Misejour()
        On Error GoTo Err
        'Etat, SocieteAL, Adresse1AL, Adresse2AL, VilleAL, CodePostalAL, DeptAL, SocieteAF, Adresse1AF, Adresse2AF, VilleAF, CodePostalAF, DeptAF, NFR, NSIRET, Reglement, A4, DateA4, Carnet, DateCarnet, Continu, DateContinu, Contisnap, DateContisnap, Etiquette, DateEtiquette, Liasse, DateLiasse, Mailer, DateMailer, Plaquette, DatePlaquette, Tete, DateTete, Contrainte, CE
        Me.NomCL.Text = dt.Rows(rownum).Item("Societe")
        Me.AddCL.Text = dt.Rows(rownum).Item("Adresse1")
        Me.VilleCL.Text = dt.Rows(rownum).Item("Ville")
        Me.CPCL.Text = dt.Rows(rownum).Item("CP")
        Me.DeptCL.Text = dt.Rows(rownum).Item("Dept")
        Me.RegCL.Text = dt.Rows(rownum).Item("Region")
        Me.Tel1CL.Text = dt.Rows(rownum).Item("Tel")
        Me.Tel2CL.Text = dt.Rows(rownum).Item("Port")
        Me.FaxCL.Text = dt.Rows(rownum).Item("Fax")
        Me.EmailCL.Text = dt.Rows(rownum).Item("Email")
        'Me.textbox1.Text = dt.Rows(rownum).Item("NClient")
        Me.TextBox1.Text = dt.Rows(rownum).Item("Interlocuteur")
Err:
        Return 0
    End Function


    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        On Error GoTo Err
        Call Interlo()
        Exit Sub
Err:
        MsgBox("Une erreur est survenue au chargement de la listview.", MsgBoxStyle.Critical, "Erreur chargement listview.")
    End Sub


    Private Sub ModifClient_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ModifClient.Click


        dr = ds.Tables(0).Rows(rownum)


        dr("Region") = Me.RegCL.Text
        dr("Tel") = Me.Tel1CL.Text
        dr("Port") = Me.Tel2CL.Text

        cmdb = New OleDb.OleDbCommandBuilder(da)

        da.Update(ds) 'Ici j'ai cette erreur : The ConnectionString property has not been initialized.

        ds.Clear()
        da.Fill(ds, 0)
        dt = ds.Tables(0)




        Call Misejour()


        rownum = 0

        Me.RegCL.Text = dt.Rows(rownum).Item("Region")
        Me.Tel1CL.Text = dt.Rows(rownum).Item("Tel")
        Me.Tel2CL.Text = dt.Rows(rownum).Item("Port")


        MessageBox.Show("Les données sont modifiées !", "Modification...", MessageBoxButtons.OK, MessageBoxIcon.Information)



    End Sub


J'ai essayé pleins de solutions trouvée sur VbFrance, mais le code est le même, je ne comprends pas ce qui ne marche pas.  
TableEnCours correspond à un classeur, donc à une table correspondant à un département.
J'ai essayé de mettre da.Update(ds, "Doubs") mais ca ne marche pas, il me met qu'il ne peut pas lire le tablemapping 'Doubs'. J'ai essayé aussi en ne fermant pas la connection (cnx), il me met qu'il ne peut pas lire du SQL dynamique ou quelque chose dans le genre.

Voila si vous pouviez m'aider ca serait super sympa.
Merci à vous

@Plouch

4 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
12 août 2006 à 14:31
Salut

Pourquoi tu remplis ta chaine de connection dans la methode paint
C'est dans le load ou le constructeur que cela serai mieux car le paint est appellé je crois de maniere aléatoire et souvent. Quand une zone de ton appli est a refaire, donc il faut eviter de mettre du code dedans.
Surtout un code qui interroge la base de donnees.

2--> Est-ce que ta table a une cle primaire
Et regarde si le commande builder te genere un bon updatecommand, inssertcommand et delete sur ton da
3--> Pour la chaine de connexion
mais la dans le fichier de configuration c'est mieux

4--> Pour la non initialisation, je pense que c'est parceque elle est mal placée.

Regarde les premier point, ca doit peut etre resoudre ton probleme
0
cs_chris81 Messages postés 589 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 29 avril 2008 2
12 août 2006 à 17:35
en .net le goto est à proscrire, regarde le try catch finally. De plus ta connexion doit être ouverte lorsque tu fais des changements ou dans le load comme le dit [auteurdetail.aspx?ID=84425 nhervagault]

a+

http://www.correzeweb.com
http://www.localetv.com
[ol%28%27http://spaces.msn.com/members/devlog81/%27%29; http://]
0
Sniper_Vgaerr Messages postés 113 Date d'inscription jeudi 2 décembre 2004 Statut Membre Dernière intervention 14 août 2006
14 août 2006 à 16:17
Bonjour,

Je n'ai pas de clé primaire, et comment je fais pour "Et regarde si le commande builder te genere un bon updatecommand, inssertcommand et delete sur ton da", car je débute un peu en VB.NET, et je ne connais pas trop la syntaxe,plus celle de Vb.

Merci j'essaye tout ca et je vous tiens au courant.
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
15 août 2006 à 00:53
Salut
Pour regarder la synatxe
Tu mets un point d'arret sur ton da
et tu regardes la valeur deans le debugeur de tes variables.

Pour la clé primaire, il faut la mettre sur ta base de données.
Avec l'interface graphique ou par ajout de contraintes.
Vas dans le mode conception table et selectionne la colonne et clique qur la cle dans le menu je crois que c'est comme ca dans access.

Voila
0
Rejoignez-nous