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 :

Erreur " Objet non trouvé "


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Âge : 71

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 308
    Par défaut Erreur " Objet non trouvé "
    Bonjour à tous
    Dans une application qui gère une BDD de DVD j'ai 2 forms d'interrogation, un pour trouver un titre et un pour trouver un rôle

    voici le code pour titre

    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 Class InterroTitre
       Private Sub Titre_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Titre.KeyDown
            Dim L As String = "'"
            If InStr(Titre.Text, L) <> 0 Then
                MsgBox("Ne pas saisir ' si un titre en contient !", 48, "Collection de DVD")
                Titre.Text = Nothing
            End If
            If (e.KeyCode = Keys.Enter) Then
                e.SuppressKeyPress = True
                RésultatTitre.Show()
            End If
        End Sub
     
        Private Sub BtnFermer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnFermer.Click
            Close()
        End Sub
    End Class
    et le code pour rôle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Class InterroRole
        Private Sub TxtRole_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TxtRole.KeyDown
            If (e.KeyCode = Keys.Enter) Then
                e.SuppressKeyPress = True
                RésultatRole.Show()
            End If
        End Sub
     
        Private Sub BtnFermer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnFermer.Click
            Close()
        End Sub
    End Class
    Ensuite voici les codes pour les forms du résulatat trouvé

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Imports System
    Imports System.Data
    Imports System.Data.OleDb
    Imports Microsoft.VisualBasic
    Public Class RésultatRole
        Inherits System.Windows.Forms.Form
        Private WithEvents MonRS As New ADODB.Recordset
     
        Private Sub RésultatRole_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            TxtRole.Text = InterroRole.TxtRole.Text
            Me.Text = "Films avec '" & TxtRole.Text & "'" & " comme rôle"
            Dim MaConn As New ADODB.Connection
            MaConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & _
            "C:\Access\DvdData.mdb"
            MaConn.Open()
            With MonRS
                .ActiveConnection = MaConn
                .CursorLocation = ADODB.CursorLocationEnum.adUseClient
                .CursorType = ADODB.CursorTypeEnum.adOpenKeyset
                .LockType = ADODB.LockTypeEnum.adLockReadOnly
                .Open("SELECT * FROM Vidéo WHERE Role1 like '%" & TxtRole.Text & "%' OR Role2 like '%" & TxtRole.Text & "%'" & _
        "OR Role3 like '%" & TxtRole.Text & "%' OR Role4 like '%" & TxtRole.Text & "%'" & _
            "OR Role5 like '%" & TxtRole.Text & "%' OR Role6 like '%" & TxtRole.Text & "%'" & _
            "OR Role7 like '%" & TxtRole.Text & "%' OR Role8 like '%" & TxtRole.Text & "%'" & _
            "OR Role9 like '%" & TxtRole.Text & "%' OR Role10 like '%" & TxtRole.Text & "%'")
            End With
            Dim nbrecords As Integer
            nbrecords = MonRS.RecordCount
            If nbrecords = 0 Then
                MsgBox("Pas de film avec ce rôle !", 48, "Collection de DVD")
                Me.Close()
            End If
            BtnFermer.Focus()
            BtnFermer.Select()
        End Sub

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Imports System
    Imports System.Data
    Imports System.Data.OleDb
    Imports Microsoft.VisualBasic
     
    Public Class RésultatTitre
        Inherits System.Windows.Forms.Form
        Private WithEvents MonRS As New ADODB.Recordset
     
        Private Sub RésultatTitre_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            TxtInterroTitre.Text = InterroTitre.Titre.Text
            Me.Text = "Films contenant les mots '" & TxtInterroTitre.Text & "'"
            Dim MaConn As New ADODB.Connection
            MaConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & _
            "C:\Access\DvdData.mdb"
     
            MaConn.Open()
            With MonRS
                .ActiveConnection = MaConn
                .CursorLocation = ADODB.CursorLocationEnum.adUseClient
                .CursorType = ADODB.CursorTypeEnum.adOpenKeyset
                .LockType = ADODB.LockTypeEnum.adLockReadOnly
                .Open("SELECT * FROM Vidéo WHERE TitreFilm like '%" & TxtInterroTitre.Text & "%'")
            End With
            Dim nbrecords As Integer
            nbrecords = MonRS.RecordCount
            If nbrecords = 0 Then
                MsgBox("Pas de titre de film contenant ce mot!", 48, "Collection de DVD")
                Me.Close()
            End If
            BtnFermer.Focus()
            BtnFermer.Select()
        End Sub

    Quand je cherche un rôle qui n'existe pas, j'ai bien le message , je ferme donc le form InterroRole et tout va bien
    Par contre pour titre, quand rien ne correspond j'ai bien le message et c'est quand je ferme le form interroTitre que ça se plante
    avec un message comme quoi le form résultatTitre n'existe pas
    J'ai comparé les codes mot à mot et je ne vois pas mon erreur
    alors si vous avez une idée elle sera comme toujours la bienvenue
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour Jean-Luc80,

    Dans un premier temps, par convention on ne mets pas de caractères spéciaux dans le nom des classes et membres.

    Ensuite, tu rencontres le message d'erreur car ton form "RésultatTitre" a été fermé (.Close) préalablement, donc ton instance n'est plus disponible, mais c'est un peu plus subtile que cela.

    Pour clarifier tout ça :

    Lorsque tu affiches ton form "RésultatTitre" tu appelles la méthode ".Show", pour rappel ".Show" sert à afficher un form de façon non-modal ce qui veut dire que l'utilisateur peut agir sur son Form parent.
    Le non-modal à une conséquence sur l'instance de ton objet !
    En effet, l'appel de la méthode .Close sur du non-modal fait immédiatement appel à la méthode .Dispose, de ce fait ton objet est détruit et n'est plus disponible en mémoire (libération de ressources non gérées pour être plus exact).
    En conséquence, lorsque tu appelles par la suite "RésultatTitre.Show" il n'y a plus de référence de ton objet "RésultatTitre" car il a été détruit (.Disposed).

    L'appel d'un form de façon modal ".ShowDialog" (boite de dialogue), empêche l'utilisateur d'interagir avec son form parent et il faut également savoir que les events "Leave", "Deactivate", "LostFocus" ne fonctionneront pas puisqu'une boite de dialogue possède indéniablement toujours le focus.
    Attention également aux events Shown, Load d'un form modal, ils sont déclenchés à chaque fois que tu appelles .ShowDialog().

    Je pense qu'il serait sage de travailler avec les constructeurs (New) ainsi que leur destructeurs (Dispose) de tes forms afin de maîtriser la durée de vie de tes objets. Ensuite il serait également judicieux pour certain de tes form d'introduire la notion de boite de dialogue ainsi tu pourrais faire usage du .DialogResult pour retourner un résultat au parent lors de la fermeture, l'annulation, la validation d'une action particulière.

    Je ne peux te recommander davantage, car je n'ai pas de vue d'ensemble du projet.

    Cordialement.

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Âge : 71

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 308
    Par défaut
    Merci de ta réponse Wallace
    J'ai bien saisi la nuance entre modal ou non, je vais essayer de changer ça
    Mais ce que je ne m'explique pas c'est pourquoi ça ne dysfonctionne qu'avec résultatTitre et pas avec RésultatRole
    alors qu'ils sont fait exactement de la même façon ( à part la requête bien sûr )
    Cordialement

Discussions similaires

  1. [AC-2010] erreur 3265 objet non trouvé dans la collection
    Par Félix62 dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/04/2014, 13h54
  2. bdd : erreur 3265 élément non trouvé dans cette collection
    Par morgan47 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 10/07/2006, 09h52
  3. Réponses: 4
    Dernier message: 16/06/2006, 00h27
  4. Erreur de "Élément non trouvé dans cette collection"
    Par charleshbo dans le forum Access
    Réponses: 4
    Dernier message: 04/05/2006, 18h42
  5. [Debutant][Install][VS]erreur sur fichier non trouvé.
    Par silvermoon dans le forum DirectX
    Réponses: 4
    Dernier message: 16/07/2004, 20h59

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