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

Windows Forms Discussion :

[VBExpress08] Erreur IndexOutOfRangeException


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut [VBExpress08] Erreur IndexOutOfRangeException
    Bonjour,

    Je dialogue avec une base de donnée Access depuis un petit programme en VB Express 2008.

    A partir d'une référence, je recherche le N° de produit dans ma base.
    Quand la référence existe, pas de soucis, mais quand celle-ci n'existe pas j'ai une erreur
    IndexOutOfRangeException n'a pas été gérée
    Voici mon bout de code:
    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
     
            'Recherche dans la base de donnée le n° IdArticle
            Dim con As New OleDb.OleDbConnection
            con.ConnectionString = "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source =" & My.Application.Info.DirectoryPath & "\Stock_17.accdb"
            con.Open()
     
            Dim ds As New DataSet
            Dim da As OleDb.OleDbDataAdapter
            Dim sql As String
            sql = "SELECT * FROM T_Article WHERE Reference = '" & CodeBarre & "'"
            da = New OleDb.OleDbDataAdapter(sql, con)
            da.Fill(ds, "Liste_Article")
     
     
            If Not ds Is Nothing AndAlso ds.Tables.Count > 0 Then
                IdArticleBase = ds.Tables("Liste_Article").Rows(0).Item(0) '##Erreur ici
                ReferenceBase = ds.Tables("Liste_Article").Rows(0).Item(1)
                MsgBox("Id: " & IdArticleBase & " Reference: " & ReferenceBase)
            Else
                MsgBox("Article Inconnu")
            End If
            con.Close()
    Mon ds.tables.count m'indique toujours 1, que ma référence existe ou pas.

    Merci

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    ds.tables.count indique le nombre de tables dans le dataset (on peut en mettre plusieurs)

    pour connaitre le nombre de lignes, c'est ds.tables(0).rows.count

    et si ce count vaut 0 et que tu demandes rows(0) ca déclenche l'erreur que tu as


    par contre utiliser un dataset pour lire des données c'est contre productif

    http://plasserre.developpez.com/cours/vb-net/
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    Merci pour votre réponse, je teste ça dés demain.

    Citation Envoyé par Pol63 Voir le message
    par contre utiliser un dataset pour lire des données c'est contre productif
    Il faudrait que j'utilise un Datareader alors ?

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    Citation Envoyé par Renard-fou Voir le message
    Il faudrait que j'utilise un Datareader alors ?
    oui, c'est ce qu'utilise le dataset en interne d'ailleurs
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    oui, c'est ce qu'utilise le dataset en interne d'ailleurs
    Mais je me demandais si je pouvais faire comme avec le Dataset, faire une sélection avec WHERE parce que je trouve pas de cours avec la syntaxe du Datareader.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    tu peux faire ce que tu veux comme requete
    tu instancie un command dans lequel tu mets la requete dans la propriété commandtext
    puis tu fais reader = command.executereader
    et ensuite un while reader.read pour parcourir les lignes retournées par la requete
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    tu peux faire ce que tu veux comme requete
    tu instancie un command dans lequel tu mets la requete dans la propriété commandtext
    puis tu fais reader = command.executereader
    et ensuite un while reader.read pour parcourir les lignes retournées par la requete
    Ok je vais faire comme ça.
    Merci de votre réponse.

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

Discussions similaires

  1. Erreur sur Datagridview, System.IndexOutOfRangeException index -1
    Par garciajulien dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/10/2012, 16h08
  2. Erreur IndexOutOfRangeException dans un Queue'1
    Par smyley dans le forum Framework .NET
    Réponses: 1
    Dernier message: 30/11/2008, 20h44
  3. Erreur: System.IndexOutOfRangeException: CVID
    Par Identifiant dans le forum ASP.NET
    Réponses: 4
    Dernier message: 26/06/2007, 16h49
  4. Réponses: 1
    Dernier message: 17/09/2006, 11h45
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 10h41

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