La référence d'objet n'est pas définie à ????

Bonjour,

La référence d'objet n'est pas définie à une instance d'un objet.

voici l'erreur que je génère cette fonction:
Public Function Extraire(ByVal Table As String, ByVal champs As String, ByVal conditions As String) As String
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Visual Studio 2005\WebSites4\App_Data\Bdd.mdb;"
Dim SQL As String
cn.Open()
SQL = "select " & champs & " as mmAlias from " & Table & " where " & conditions & ""
     While reader.Read()

Extraire = reader.GetString(0)
End While
cn.Close()
End Function


une suggestion?!
merci.
Configuration: Windows XP
Firefox 2.0.0.16

11 réponses

  • Votes
  • Date
  • Date décroissante
  1. toujours la même erreur neofenix
    j'aimerai bien de plus pouvoir utiliser la méthode commandSELECT, t'as une idée sur comment le contourner?
    1. Salut mirela,
      Désolé je n'ai pas trés bien compris ce que tu souhaitais faire avec ta base de données et la page.
      Si tu pouvais expliquer avec un peu plus de precision pour que je puisse essayer de t'aider.
      1. salut mirela,

        as tu definis reader.Read() car dans ton bout de code il ne l'est pas.
        sinon si j'ai bien compris tu obtiens cette erreur sur cette ligne donc a mon avis:
        soit il est mal definis
        soit il est pas definis
        soit il est null est donc essayer de lire cette donnée te fait planter

        tiens aurais tu pas oublié ceci:
        Dim reader As SqlDataReader = = sql.ExecuteReader();
        1. salut neofenix

          merci pour ta réponse!
          en faite j'essaie d'écrire un code qui permet d'afficher à partir d'un lien un champ contenant comme valeur une page aspx. Elle sera affiché en fonction de l'email récupérer avec querystring.
          en bref:
          ma table employés qui contient un champ website

          à la génération, reader=Nothing
          je comprend pas pourquoi?

          voici mon code:

          ********************mes variables ************************
          Public cn As New ADODB.Connection
          Public command As New Data.OleDb.OleDbCommand 'Commande SQL
          Public reader As Data.OleDb.OleDbDataReader 'Parcours les enregistrements

          ************************ma function Extraire****************
          Public Function Extraire(ByVal Table As String, ByVal champs As String, ByVal conditions As String) As String

          cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Visual Studio 2005\WebSites4\App_Data\Bdd.mdb;"

          Dim SQL As String
          cn.Open()
          SQL = "select " & champs & " as mmAlias from " & Table & " where " & conditions & ""
          CommandSELECT(SQL)

          While reader.Read()
          Extraire = reader.GetString(0)
          End While

          End Function

          ************************ma procédure CommandSQL*******************
          Public Sub CommandSELECT(ByVal LeSQL As String)

          command = New Data.OleDb.OleDbCommand(LeSQL, cn)
          If cn.State = ConnectionState.Closed Then
          cn.Open()
          End If
          command.CommandTimeout = 10000
          reader = command.ExecuteReader 'Exécute la commande
          End Sub

          ************************Action à exécuter lors du clique sur le lien*************
          Sub BtnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs)

          Dim web As String
          web = Extraire("Employes", "Website", "email='" & Request.QueryString("email") & "'")

          End Sub

          quelques suggestions?!
          1. oui ton reader ne prend pas l'execution de ta requete donc bien si il n'est pas initialisée est est donc vide ajoute simplement

            reader= sql.ExecuteReader()

            juste avant While reader.Read()

            desolé j'avais mal compris ton code

            pour moi le probleme peut venir de ta fonction qui ne garde pas en memoire ta variable essaye en retournant ton reader
            1. salut
              j'ai trouvé la cause;
              le champ à retourner de ma table est vide,et en insérant des valeurs,j'ai plus cette erreur!!
              seulement je sais pas comment afficher la page web.
              dans mon code ,il est question de recupérer le contenu du champ website qui par exemple contient mapage.aspx
              mais alors comment afficher la page web?
              1. salut neofenix
                j'ai dans ma base, une table Employés qui contient un champ Website. Et le contenu de ce champ est le nom d'une page web,exemple mapage.aspx
                et j'aimerai afficher cette page à partir d'un lien.et mon code ne permet que d'extraire la valeur de ma page et le mettre dans une variable web(voir Sub BtnSubmit_Click).
                j'espère que çà va maintenant!!
                1. si j'ai bien compris tu veux mettre ta réponse de ta requête comme lien donc:
                  Dim instance As HyperLink
                  instance.NavigateUrl = value
                  

                  où value est le résultat de ta requête.
                  1. merci neofenix pour ta réponse
                    mais il manque un petit quelque chose:il m'affiche cette erreur
                    la variable 'instance' est utilisée avant qu'une valeur ne lui ai été assignée

                    ************************Action à exécuter lors du clique sur le lien*************
                    Sub BtnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs)

                    Dim web As String
                    Dim instance As HyperLink

                    web = Extraire("Employes", "Website", "email='" & Request.QueryString("email") & "'")
                    instance.NavigateUrl = value
                    End Sub

                    Aussi j'ai trouvé un moyen d'afficher le lien dans un datalist,seulement j'ignore comment personnaliser le titre du lien:
                    <asp:DataList ID="DataList2" runat="server" DataSourceID="AccessDataSource2">
                    <ItemTemplate>
                    <a href='<%# DataBinder.Eval(Container.DataItem, "Website") %>''><%#DataBinder.Eval(Container.DataItem, "Website")%>Etablir Ma Page</a>

                    <br />
                    <br />
                    </ItemTemplate>
                    </asp:DataList>


                    avec ce code,il m'affiche et le titre et le nom de ma page
                    donc j'ai à l'affiche du style:
                    mapage.aspxEtablir Ma Page

                    as-tu une idée?
                    merci neofenix!!!
                    1. avec ceci
                      si tu veux afficher etablir ma page:

                      <asp:DataList ID="DataList2" runat="server" DataSourceID="AccessDataSource2">
                      <ItemTemplate>
                      <a href='<%# DataBinder.Eval(Container.DataItem, "Website") %>''>Etablir Ma Page</a>
                      
                      <br />
                      <br />
                      </ItemTemplate>
                      </asp:DataList> 


                      soit tu veux afficher l'adresse mail:

                      <asp:DataList ID="DataList2" runat="server" DataSourceID="AccessDataSource2">
                      <ItemTemplate>
                      <a href='<%# DataBinder.Eval(Container.DataItem, "Website") %>''><%#DataBinder.Eval(Container.DataItem, "Website")%></a>
                      
                      <br />
                      <br />
                      </ItemTemplate>
                      </asp:DataList> 


                      en ce qui concerne ton probleme de ton hyperlink sinon:
                      tu le crée dans ta page aspx avec comme id hyperlink1 par exemple et dans ton code vb tu fais:

                      Sub BtnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs)
                      Dim web As String
                      web = Extraire("Employes", "Website", "email='" & Request.QueryString("email") & "'")
                      hyperlink1.NavigateUrl = value
                      End Sub
                      1. Public Sub CommandSELECT(ByVal LeSQL As String)
                        
                        command = New Data.OleDb.OleDbCommand(LeSQL, cn)
                        If cn.State = ConnectionState.Closed Then
                        cn.Open()
                        End If
                        command.CommandTimeout = 10000
                        return command.ExecuteReader 'Exécute la commande
                        End Sub 


                        et tu as donc:

                        Dim SQL As String
                        cn.Open()
                        SQL = "select " & champs & " as mmAlias from " & Table & " where " & conditions & ""
                        reader=CommandSELECT(SQL)
                        
                        While reader.Read()
                        Extraire = reader.GetString(0)
                        End While