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 :

Accès à une base dbf


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 108
    Par défaut Accès à une base dbf
    Bonjour,

    Je suis en train de me battre avec visual pour essayer de lire un fichier .dbf, j'arrive à avoir certains résultats, mais pas d'autre, j'ai les erreurs suivantes:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.InvalidOperationException: Tentative non valide de lecture de l'ordinal de colonne '1'. Avec CommandBehavior.SequentialAccess, vous ne pouvez lire qu'à partir de l'ordinal de colonne '5' ou supérieur.
       à System.Data.OleDb.OleDbDataReader.DoValueCheck(Int32Une exception de première chance de type 'System.IndexOutOfRangeException' s'est produite dans System.Data.dll
    ou ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    System.IndexOutOfRangeException: FILESCANND
       à System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName)
       à System.Data.OleDb.OleDbDataReader.GetOrdinal(String name)
       à System.Data.OleDb.OleDbDataReader.get_Item(String name)

    et voici mon 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
    Dim ConnectionString As String
     
                        ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                        "Data Source=" + repertoire + ";Extended Properties=dBase IV"
                        Dim dBaseConnection As New System.Data.OleDb.OleDbConnection(ConnectionString)
                        dBaseConnection.Open()
     
                        Dim dBaseCommand As New System.Data.OleDb.OleDbCommand("SELECT * FROM monFichierDbf", dBaseConnection)
                        Dim dBaseDataReader As System.Data.OleDb.OleDbDataReader = dBaseCommand.ExecuteReader(CommandBehavior.SequentialAccess)
     
     
     
                            While dBaseDataReader.Read
                                Console.WriteLine("===================================")
                                Console.WriteLine(dBaseDataReader("TIMEDONE").ToString)
                                Console.WriteLine(dBaseDataReader("DESCRIPT").ToString)
                                Console.WriteLine(dBaseDataReader("INFOTYPE").ToString)
                                Console.WriteLine("===================================")
                            End While
     
     
                        dBaseConnection.Close()

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 299
    Par défaut
    Bonjour,
    J'ai une appli qui lit bien du dbase.
    Ma connectionstring est légèrement différente (userId renseigné) :
    ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & Repertoire & "';Extended Properties=dBASE IV;User ID=Admin;Password="

    Déjà, un premier conseil, évite le Select * mais précise les noms des champs.
    Sinon, de mon côté, je passe par un OleDbDataAdapter puis un DataSet et j'accède aux données via une instruction de type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim MaColonne As DataColumn
    For Each MaColonne In MonDataSet.Tables(0).Columns
      <faire un traitement>
    Next

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 216
    Par défaut
    Est-ce du DBASE ou Visual foxpro? Ces deux système de gestion de base de données ont la même extension de fichiers pour leurs tables...

    Si c'est du foxpro, j'ai eu un problème similaire. Je ne suis pas parvenu à établir la connexion via OLE DB. Mais j'ai réussi via ODBC avec la chaîne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDB=" & cDataFile & ";Exclusive=No;" "NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO;"
    J'ai réussi des opérations de lecture, mais pas d'écriture.

    Connais-tu ce site? http://connectionstrings.com/

    A+,

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 108
    Par défaut
    Bonjour,

    J'arrive bien à lire les fichiers dbf, mais le problème c'est quand je veux obtenir la valeur d'une colonne, j'ai n'importe quoi.

    Je m'explique, lorsque que je veux récupérer la valeur d'un colonne "TIMEDONE" par exemple, j'ai en valeur de retour "C:\", ce qui est la valeur d'une autre colonne!

    Pouvez-vous m'aider svp

    voici mon 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
    23
    24
    25
    26
    Dim ConnectionString As String
     
                        ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & repertoire & "';Extended Properties=dBASE IV;User ID=Admin;Password="
                        Dim dBaseConnection As New System.Data.OleDb.OleDbConnection(ConnectionString)
                        dBaseConnection.Open()
     
                        Dim dBaseCommand As New System.Data.OleDb.OleDbCommand("SELECT * FROM monFichier", dBaseConnection)
                        Dim dBaseDataReader As System.Data.OleDb.OleDbDataReader = dBaseCommand.ExecuteReader(CommandBehavior.SingleRow)
     
     
                        Dim i As Integer = 0
                        dBaseDataReader.Read()
                        While i < dBaseDataReader.FieldCount
                            Try
                                Console.WriteLine(dBaseDataReader.GetName(i))
                                Console.WriteLine(dBaseDataReader(dBaseDataReader.GetName(i)))
     
     
                            Catch ex As Exception
     
                            End Try
                            i = i + 1
     
                        End While
     
                    dBaseConnection.Close()
    Adrien

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 108
    Par défaut
    Citation Envoyé par adrix26 Voir le message
    Bonjour,

    J'arrive bien à lire les fichiers dbf, mais le problème c'est quand je veux obtenir la valeur d'une colonne, j'ai n'importe quoi.

    Je m'explique, lorsque que je veux récupérer la valeur d'un colonne "TIMEDONE" par exemple, j'ai en valeur de retour "C:\", ce qui est la valeur d'une autre colonne!

    Pouvez-vous m'aider svp

    voici mon 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
    23
    24
    25
    26
    Dim ConnectionString As String
     
                        ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & repertoire & "';Extended Properties=dBASE IV;User ID=Admin;Password="
                        Dim dBaseConnection As New System.Data.OleDb.OleDbConnection(ConnectionString)
                        dBaseConnection.Open()
     
                        Dim dBaseCommand As New System.Data.OleDb.OleDbCommand("SELECT * FROM monFichier", dBaseConnection)
                        Dim dBaseDataReader As System.Data.OleDb.OleDbDataReader = dBaseCommand.ExecuteReader()
     
     
                        Dim i As Integer = 0
                        dBaseDataReader.Read()
                        While i < dBaseDataReader.FieldCount
                            Try
                                Console.WriteLine(dBaseDataReader.GetName(i))
                                Console.WriteLine(dBaseDataReader(dBaseDataReader.GetName(i)))
     
     
                            Catch ex As Exception
     
                            End Try
                            i = i + 1
     
                        End While
     
                    dBaseConnection.Close()
    Adrien

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 299
    Par défaut
    Je te l'ai indiqué dans un précédent message mais le select * est à proscrire et est possiblement à l'origine de tes problèmes.

    Met les noms de tes colonnes à la place du '*' et recherche par nom au lieu de chercher par indice...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 108
    Par défaut
    j'ai exactement la meme chose, j'ai tout essayé je ne comprend pas!

    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
     Dim dBaseCommand As New System.Data.OleDb.OleDbCommand("SELECT TIMEDONE FROM monFIchier", dBaseConnection)
                        Dim dBaseDataReader As System.Data.OleDb.OleDbDataReader = dBaseCommand.ExecuteReader(CommandBehavior.SingleRow)
     
     
                        Dim i As Integer = 0
                        dBaseDataReader.Read()
                        While i < dBaseDataReader.FieldCount
                            Try
                                Console.WriteLine(dBaseDataReader.GetName(i))
                                Console.WriteLine(dBaseDataReader(dBaseDataReader.GetName(i))
     
     
                            Catch ex As Exception
     
                            End Try
                            i = i + 1
     
                        End While

Discussions similaires

  1. [C#] Accés à une base de données AS400
    Par Green Hornet dans le forum Accès aux données
    Réponses: 8
    Dernier message: 14/11/2011, 11h26
  2. Accès à une base Pervasive
    Par david_chardonnet dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/10/2005, 20h53
  3. [SYBASE] Acces à une base SYBASE V12 via VB6
    Par pulley60 dans le forum Sybase
    Réponses: 2
    Dernier message: 23/09/2004, 14h21
  4. Refus d'accès à une base Firebird
    Par severine dans le forum Installation
    Réponses: 18
    Dernier message: 04/06/2003, 16h03
  5. [Dev-C++] Accès à une base MySQL
    Par Beetlejuice dans le forum Dev-C++
    Réponses: 8
    Dernier message: 08/05/2003, 13h17

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