IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Problème Recordset laissant Base access ouvert (.ldb) [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Par défaut Problème Recordset laissant Base access ouvert (.ldb)
    Bonjour à tous,

    Toujours débutant, merci d'avance pour votre indulgence

    J'ai constaté que lorsque j'accède à ma base de données, apparait ce fameux fichier .ldb qui est sensé disparaitre lorsqu'on referme la connection. Et chez moi il reste .....

    L'utilisateur saisit des données dans un form, puis je les intègrent dans la base de données ainsi :

    Pour info, connection1() est dans un module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Module ModuleConnection
        Public base1 As String
        Public base3 As String
     
        Public Sub connection1()
            base1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = "
            base3 = "C:\Users\masession\Documents\escale.mdb;"
        End Sub
     End Module
    Une fois que l'utilisateur valide, cette procédure se lance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Public Class Form2
        Dim MyConnect As String
        Dim MyRecordset As ADODB.Recordset 
     
    Private Sub valider_Click(sender As System.Object, e As System.EventArgs) Handles valider.Click
    Try
               Call connection1()
                    MyConnect = base1 & base3
                    MyRecordset = New ADODB.Recordset
                    MyRecordset.Open("Table1", MyConnect, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)
                    MyRecordset.AddNew()
                    MyRecordset.Fields("NDC").Value = dc.Text
                    MyRecordset.Update()
                    MyRecordset.Close()
     
    'mise à jour de mon datagridview associé
    Form1.GetData(Form1.Table1dataAdapter.SelectCommand.CommandText)
     
    Catch ex As Exception
                    MsgBox(Err.Description)
    End Try
    End sub
     
    End class
    Concernant la ligne de commande de mise à jour du datagridview, je vous mets le code contenu dans le form1 :

    Tout en haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports System.Data.OleDb
    Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Public Sub GetData(ByVal selectCommand As String)
     
            Try
                Call connection1()
                Dim connectionString1 As String = base1 & base3
     
                Me.Table1dataAdapter = New OleDbDataAdapter(selectCommand, connectionString1)
                Dim commandBuilder1 As New OleDbCommandBuilder(Me.Table1dataAdapter)
     
                Dim table1 As New DataTable()
                table1.Locale = System.Globalization.CultureInfo.InvariantCulture
     
                Me.Table1dataAdapter.Fill(table1)
     
            Catch ex As DataException
                MsgBox(Err.Description)
            End Try
    J'espère que cela pourra vous aider .....

    Edit 1 : De plus je remarque que dans VB, j'ai dans fenêtre exécution :
    Une exception de première chance de type 'System.NullReferenceException' s'est produite dans Escale.exe
    et une info-bulle :
    La référence d'objet n'est pas défini à une instance d'un objet
    Est-ce lié car je sais pas comment savoir à quelle ligne de mon programme çà bug .... et VB2010 me pointe pas la ligne qui pourrait générer cette erreur.....

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    les recordset n'ont pas leur place en .net

    avec ado.net on peut s'assurer que la connexion se ferme même en cas d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    using conn as new system.data.oledb.oledbconnection(chaine_de_connexion)
      ' utilisation de la connexion
    end using
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Par défaut
    Salut Pol63,

    Merci pour ta réponse.
    Concernant mon EDIT et l'erreur j'ai trouvé d'ou celà venait. En fait, j'avais mis un timer qui rafraichissait les données tous les X temps. Et le rafraichissement se lançait que si le Form1 est actif en testant un paramètre qui était null .

    Sinon dans ton petit exemple, tu peux juste l'adapter à ce que j'ai mis pour que je vois comment je peux enregistrer mon textbox dans la base de données ?
    (ps pour info, je compile en framework version 2)
    Merci d'avance

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    je te conseille de lire un tuto sur ado.net, qui est la solution recommandée pour accéder aux données en vb.net

    il y a plusieurs méthodes dont :
    - par requete : oledbconnection (connection) / oledbcommand (requete SQL (insert/update/delete), dans ton cas "UPDATE table SET colonne = valeur WHERE condition") / oledbdatareader (permet de lire les données d'un select)
    - dataadapter / dataset : c'est aussi simple que les recordsets, tu n'as que le select à écrire et tu récupère une variable tableau, tu peux modifier n'importe quelle cas et dire à l'objet daadapter de répercuter les modifications sur la base de données
    - entity framework (pas dispo avec le framework 2 et access je crois) en code plus simple que les dataset, ca permet de manipuler des collections typées et il n'y a aucune requete à écrire
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Par défaut
    Re,

    Merci pour tes conseils. En fait je me suis inspiré de la doc MSDN pour la partie "Public Sub GetData(ByVal selectCommand As String)"

    Et lorsque je modifie une donnée dans mon datagridview via un form, la mise à jour de la base est faite par la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Me.Validate()
    Form1.Table1bindingSource.EndEdit() 
    Form1.Table1dataAdapter.Update(CType(Form1.Table1bindingSource.DataSource, DataTable))
    Tout se passe bien avec ces commandes/fonctions.
    Je modifie une donnée déjà existante et mets à jour et pas de traces de fichiers .ldb
    Mon problème vient vraiment de ce module avec mes myrecordset. Tout s'enregistre dans la base de données mais malgré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MyRecordset.Update()
    MyRecordset.Close()
    Le fichier .ldb reste

    En fait dans mon datagridview je ne rapatrie pas toutes les colonnes de ma base access . C'est pour cela que je dois passer par une écriture en premier sur ma base et puis mettre à jour mon datagridview. Certaines données saisies initialement restent sur la base de données et ne sont plus modifiables

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 261
    Par défaut
    Re,

    Je m'étais inspiré de cette doc :

    http://msdn.microsoft.com/en-us/library/fbk67b6z.aspx

    Avec cette méthode, je peux gérer le chargement des tables, mettre à jour. Ils donnent le code et j'ai pu l'adapter sans soucis

    Mais ils ne disent pas comment par cette méthode insérer de nouveaux données directement dans la base de données. Sachant que ces données à insérer viennent de textbox par exemple

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème update sur base access
    Par Ludosjob dans le forum ASP
    Réponses: 4
    Dernier message: 01/09/2008, 21h16
  2. [Delphi 6] Problème avec une base Access
    Par chakir76 dans le forum Bases de données
    Réponses: 1
    Dernier message: 13/03/2008, 17h08
  3. problème de connexion base access
    Par garthalgar dans le forum ASP
    Réponses: 3
    Dernier message: 23/07/2007, 15h41
  4. Réponses: 1
    Dernier message: 04/04/2006, 10h28
  5. Problème de connexion base Access
    Par Ricardo_Tubbs dans le forum ASP
    Réponses: 3
    Dernier message: 21/02/2006, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo