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

VBA Access Discussion :

Lecture d'un fichier texte et import dans Access


Sujet :

VBA Access

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Lecture d'un fichier texte et import dans Access
    Bonjour a tous,

    Je suis actuellement en stage de fin d'année dans une entreprise où l'on me demande de travailler en VBA sous access 2007, ce que je n'ai jamais fait. Je m'y connait a peu près bien en vb mais ce qui me pose des problèmes, c'est comment intéragir avec la base donnée.
    Mon but est le suivant : je dois utiliser les données qui sont stockées dans un fichier texte, séparées par un ";" pour écraser les données qui on le même nom dans la base de donnée. Ma table s'appelle table1. Si vous n'avez pas compris mon explication en gros je voudrais que table1.NUMFDC = NUMFDC, en imaginant que sa ne pose pas de probleme d'avoir 2 nom de variables identiques, mais là n'est pas le probleme, si il fat je pourrait m'occuper de sa. 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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Option Compare Database
     
    Private Sub charge()
     
    Dim ligne, NUMFDC, NOMFDC, ADD1FDC, ADD2FDC, ADD3FDC, ADD4FDC, CODEPOSTFDC, LOCDISTFDC, NUMTELFDC, NUMFAXFDC, NOMPRESFDC, PRENOMPRESFDC, EMAILFDC, WEBSITEFDC, BANQ1FDC, RIB1FDC, BANQ2FDC, RIB2FDC, DATEMAJFDC As String
     
    Open "C:\Documents and Settings\etienne\Bureau\calculcle\Federations_2008_12_01.txt" For Input As #1
    Line Input #1, ligne ' pour eviter la premiere ligne
    While Not EOF(1)
        Line Input #1, ligne
        NUMFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(NUMFDC) + 1)))
        NOMFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(NOMFDC) + 1)))
        ADD1FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(ADD1FDC) + 1)))
        ADD2FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(ADD2FDC) + 1)))
        ADD3FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(ADD3FDC) + 1)))
        ADD4FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(ADD4FDC) + 1)))
        CODEPOSTFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(CODEPOSTFDC) + 1)))
        LOCDISTFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(LOCDISTFDC) + 1)))
        NUMTELFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(NUMTELFDC) + 1)))
        NUMFAXFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(NUMFAXFDC) + 1)))
        NOMPRESFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(NOMPRESFDC) + 1)))
        PRENOMPRESFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(PRENOMPRESFDC) + 1)))
        EMAILFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(EMAILFDC) + 1)))
        WEBSITEFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(WEBSITEFDC) + 1)))
        BANQ1FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(BANQ1FDC) + 1)))
        RIB1FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(RIB1FDC) + 1)))
        BANQ2FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(BANQ2FDC) + 1)))
        RIB2FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(RIB2FDC) + 1)))
        DATEMAJFDC = ligne
    Wend 'OK
     
     
     
     
     
    Close #1
     
    End Sub
     
    Private Function len_enreg(ByVal a As String) As Integer ' renvoi la taille de l'enregistrement en cours ( jusque ";")
     
    Dim cpt As Integer
    cpt = 1
    While Mid(a, cpt, 1) <> ";"
        cpt = cpt + 1
    Wend
     
    len_enreg = cpt - 1
     
    End Function
    Sub MAJ()
    charge
    End Sub
    Je ne sais pas non plus très bien comment sa marche mais pour l'instant sa va.

    Merci à tous de votre aide, je suis en pleine galère

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 363
    Points : 23 833
    Points
    23 833
    Par défaut
    Ok c'est un bon début.

    mais on peut simplifier un peu si les champs du fichier texte sont dans le même ordre que ceux de ta table

    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
    Private Sub charge()
     
    dim t as variant
    dim db as dao.database:set db=currentdb
    dim r as dao.recordset:ser r=d,openrecordset("Table1")
    dim i as integer
     
    Open "C:\Documents and Settings\etienne\Bureau\calculcle\Federations_2008_12_01.txt" For Input As #1
    Line Input #1, ligne ' pour eviter la premiere ligne
    While Not EOF(1)
        Line Input #1, ligne
        t=split(line,";"):'Découpe la chaine ligne selon les ";"
        r.adnew :'Ajoute un nouvel enr
     
        for i=lbound(t) to ubound(t)
           r.fields(i)=t(i)
        next i
     
        r.update :'Enregistre les info dans la table
    Wend 'OK
     
    Close #1
     
    r.close:set r=nothing
    db.close:set db=nothing    
     
    End Sub
    Si tes champs ne sont pas dans le même ordre

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Private Sub charge()
     
    Dim ligne as string
    dim NUMFDC as string
    'Il faut mettre une déclaration de variable et de type par ligne sinon seul la dernière variable est typée les autres sont des variants. C'ets un piège de VBA.
    'Dans ton code seul DATEMAJFDC est une string.
     
    dim db as dao.database:set db=currentdb
    dim r as dao.recordset:ser r=d,openrecordset("Table1")
     
    Open "C:\Documents and Settings\etienne\Bureau\calculcle\Federations_2008_12_01.txt" For Input As #1
    Line Input #1, ligne ' pour eviter la premiere ligne
    While Not EOF(1)
        Line Input #1, ligne
        NUMFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(NUMFDC) + 1)))
        NOMFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(NOMFDC) + 1)))
        ADD1FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(ADD1FDC) + 1)))
        ADD2FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(ADD2FDC) + 1)))
        ADD3FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(ADD3FDC) + 1)))
        ADD4FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(ADD4FDC) + 1)))
        CODEPOSTFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(CODEPOSTFDC) + 1)))
        LOCDISTFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(LOCDISTFDC) + 1)))
        NUMTELFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(NUMTELFDC) + 1)))
        NUMFAXFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(NUMFAXFDC) + 1)))
        NOMPRESFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(NOMPRESFDC) + 1)))
        PRENOMPRESFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(PRENOMPRESFDC) + 1)))
        EMAILFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(EMAILFDC) + 1)))
        WEBSITEFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(WEBSITEFDC) + 1)))
        BANQ1FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(BANQ1FDC) + 1)))
        RIB1FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(RIB1FDC) + 1)))
        BANQ2FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(BANQ2FDC) + 1)))
        RIB2FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(RIB2FDC) + 1)))
        DATEMAJFDC = ligne
     
        with r
           .addnew
            ![NUMFDC]=NUMFDC
            'Répéter avec tous les champs
           .update
        end with
     
    Wend 'OK
     
     
    Close #1
     
    End Sub

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup de ton aide Marot. Je ne pas tester sa tout de suite mais je te fais confiance, tu as plus de chances de réussir que moi ^^'. En plus tu as énormement réduit le code. Enfin je verrais pour mettre quand meme le plus gros sa fera plus impressionant mdr, sinon le mec va me demander pkoi j'ai pris autant de temps a faire sa xD.

  4. #4
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Bonjour,

    Pour les fichier textes il y a plusieurs façon de les importer / Exporter.
    La solution que tu as évoqué en est une et il en existe 2 autres.
    Il y a la commande

    Qui permet d'importer et exporter des fichiers textes en format CSV (c'est ce qui t'interresse car c'est le format que nous as décris)

    Et il y a aussi une méthode qui consiste a créer un lien direct entre access et le fichier et de s'en servir directement comme une table. C'est un procédé un peu plus compliqué mais qui parfois permet de se sortir de situations délicates.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 363
    Points : 23 833
    Points
    23 833
    Par défaut
    Citation Envoyé par Huma7 Voir le message
    Merci beaucoup de ton aide Marot. Je ne pas tester sa tout de suite mais je te fais confiance, tu as plus de chances de réussir que moi ^^'. En plus tu as énormement réduit le code. Enfin je verrais pour mettre quand meme le plus gros sa fera plus impressionant mdr, sinon le mec va me demander pkoi j'ai pris autant de temps a faire sa xD.
    Une solution simple n'est pas forcément une solution évidente et elle peut prendre du temps à être trouver.

    Si le code couurt répond à ton besoin je t'invite à l'utiliser. Il est généralement plus facile de comprendre 4 lignes de code de haut niveau que 20 de bas niveau.

    Mais attention ma solution simple ne marche QUE si les champs sont EXACTEMENT dans le même ordre dans la table et dans ton fichier et que tu as AUTANT de champ dans ta table que dans ton fichier.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bon j'ai essayé de faire marché ta première solution mais vu que j'ai un peu de mal a la comprendre je n'ai pas réussi ^^'. Je me suis donc rabattu a la deuxième qui marche parfaitement bien et qui est dans mes cordes.

    Le problème que j'ai encore c'est que les informations contenues dans le fichier doivent écraser les informations déjà présentes. Mon maitre de stage m'a également dit que ce serait bien de pouvoir préciser quels champs ont été mis a jour. En gros j'aurai besoin de 2 informations : Pour naviguer d'une ligne a l'autre, toujours en gardant la possibilité de lire et d'écrire, y a-t-il une meilleure solution que le r.movenext ? Si non comment réagi un r.movenext une fois arrivé à la fin d'une table, est-ce qu'il repars au début ? Si oui y a t il une commande qui permet de vérifier qu'il est au début de la table ?
    Ah tiens sa fait 3 questions

    Mais sinon j'ai quand même bien réussi a avancer grâce a vous, je désesperait de trouver un tuto VBA access sur internet .


    EDIT : en fait je crois bien avoir trouvé : j'ai remplacé le "r.AddNew" par un "r.Edit" et j'ai rajouté un "r.movenext" à la fin

    Au passage je crois que je viens de voir pourquoi ta première solution ne marché pas, en la relisant une ultime fois (j'ai enfin réussi a bien la comprendre) tu as mis split(line, ";"), il manqué juste le g, et j'ai lu 5 fois sans le voir ^^'.

    Sa donne sa et sa à l'air de fonctionner

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    Option Compare Database
     
    Private Sub charge()
     
     
    Dim db As dao.Database: Set db = CurrentDb
    Dim r As dao.Recordset: Set r = db.OpenRecordset("Table1")
    Dim ligne As String
    Dim NUMFDC As String
    Dim NOMFDC As String
    Dim ADD1FDC As String
    Dim ADD2FDC As String
    Dim ADD3FDC As String
    Dim ADD4FDC As String
    Dim CODEPOSTFDC As String
    Dim LOCDISTFDC As String
    Dim NUMTELFDC As String
    Dim NUMFAXFDC As String
    Dim NOMPRESFDC As String
    Dim PRENOMPRESFDC As String
    Dim EMAILFDC As String
    Dim WEBSITEFDC As String
    Dim BANQ1FDC As String
    Dim RIB1FDC As String
    Dim BANQ2FDC As String
    Dim RIB2FDC As String
    Dim DATEMAJFDC As String
     
    Open "C:\Documents and Settings\etienne\Bureau\calculcle\Federations_2008_12_01.txt" For Input As #1
    Line Input #1, ligne ' pour eviter la premiere ligne
    While Not EOF(1)
        Line Input #1, ligne
        NUMFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(NUMFDC) + 1)))
        NOMFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(NOMFDC) + 1)))
        ADD1FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(ADD1FDC) + 1)))
        ADD2FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(ADD2FDC) + 1)))
        ADD3FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(ADD3FDC) + 1)))
        ADD4FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(ADD4FDC) + 1)))
        CODEPOSTFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(CODEPOSTFDC) + 1)))
        LOCDISTFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(LOCDISTFDC) + 1)))
        NUMTELFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(NUMTELFDC) + 1)))
        NUMFAXFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(NUMFAXFDC) + 1)))
        NOMPRESFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(NOMPRESFDC) + 1)))
        PRENOMPRESFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(PRENOMPRESFDC) + 1)))
        EMAILFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(EMAILFDC) + 1)))
        WEBSITEFDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(WEBSITEFDC) + 1)))
        BANQ1FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(BANQ1FDC) + 1)))
        RIB1FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(RIB1FDC) + 1)))
        BANQ2FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(BANQ2FDC) + 1)))
        RIB2FDC = Left(ligne, (len_enreg(ligne)))
        ligne = Right(ligne, (Len(ligne) - (Len(RIB2FDC) + 1)))
        DATEMAJFDC = ligne
     
        With r
           .Edit
            ![NUMFDC] = NUMFDC
            ![NOMFDC] = NOMFDC
            ![AD1FDC] = AD1FDC
            ![AD2FDC] = AD2FDC
            ![AD3FDC] = AD3FDC
            ![AD4FDC] = AD4FDC
            ![CODEPOSTFDC] = CODEPOSTFDC
            ![LOCDISTFDC] = LOCDISTFDC
            ![NUMTELFDC] = NUMTELFDC
            ![NUMFAXFDC] = NUMFAXFDC
            ![NOMPRESFDC] = NOMPRESFDC
            ![PRENOMPRESFDC] = PRENOMPRESFDC
            ![EMAILFDC] = EMAILFDC
            ![WEBSITEFDC] = WEBSITEFDC
            ![BANQ1FDC] = BANQ1FDC
            ![RIB1FDC] = RIB1FDC
            ![BANQ2FDC] = BANQ2FDC
            ![RIB2FDC] = RIB2FDC
            ![DATEMAJFDC] = DATEMAJFDC
           .Update
           .MoveNext
        End With
     
    Wend
     
    Close #1
     
    End Sub
     
    Private Function len_enreg(ByVal a As String) As Integer ' renvoi la taille de l'enregistrement en cours ( jusque ";")
     
    Dim cpt As Integer
    cpt = 1
    While Mid(a, cpt, 1) <> ";" And cpt < 2000
        cpt = cpt + 1
    Wend
     
    If cpt = 2000 Then
        MsgBox "Erreur de mise en page dans le fichier texte"
        End
    End If
     
    len_enreg = cpt - 1
     
    End Function
    Sub MAJ()
    charge
    End Sub

    EDIT2 : Le dernier problème qui se pose a moi est le suivant : si ma base de donnée est vide, alors j'ai une erreur qui me dit que je ne peut pas editer quelque chose qui n'existe pas (enfin quelque chose comme sa). C'est logique mais je ne vois pas pour autant comment remedier à ce problème

  7. #7
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Et bien pour répondre a tes question il existe deux propriété supplémentaires : le BOF et EOF.

    BOF pour Begin Of File qui est un booléen (true / false) qui indique si l'itérateur (pointeur) se trouve sur le début de la table.

    EOF pour End Of File qui est aussi un booléen qui indique si l'iterateur est à la fin de table.

    Une chose a savoir est que la fin et le début de table ne se situe pas sur un enregistrement (à vérifier pour le begin car j'ai un petit doute)

    Pour savoir si des enregistrements sont retournés il existe la méthode recordcount qui renvoi le nombre d'enregistrement attention tout de même à son utilisation si il n'y a aucun enregistrement ca retourne 0 mais si il y a des enregistrement il renvoie 1 à l'ouverture du recordset quelquesoit le nombre, il est nécessaire d'aller à la fin puis au début (movelast et movefirst) pour avoir le nombre exact. IL est possible que cela ne se produise qu'avec un type de recordset précis (différence entre ADO et DAO).

    Pour la méthode movenext c'est la meilleur méthode pour passer à l'enregistrement suivant si tu souhaite te déplacer de plusieurs enregistrements à la fois il existe la méthode Move qui permet de faire un saut directement de 5 enregistrements par exemple tout en gardant a l'esprit que c'est l'itérateur qui bouge directement d'un enregistrement X à X+5 par exemple.

    J'espère ne pas avoir oublié de répondre à une de tes questions.

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 363
    Points : 23 833
    Points
    23 833
    Par défaut
    Le code que tu as fait va remplacer complètement les données existantes dans la base de données par celles qui viennent du fichier texte.

    Il comporte la faille suivante : si tu as moins d'enregistrements dans ton fichier que dans ta table, les enregistrements supplémentaires vont restés dans ta table.

    Une solution simple consiterait à vider la table avant puis de faire ensuite seulement des ajouts (avec r.AddNew).

    Pour vider une table tu peux simplement créer une requête de suppression et l'appeler à partir de ton code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim db as dao.database:set db=currentdb
    db.querydefs("NomDeTaRequeteSupression").execute:'Execute la requête dont le nom est 'NomDeTaRequeteSupression'
    db.close:set db=nothing:'Ferme la base et libère la mémoire
    A+

Discussions similaires

  1. Réponses: 11
    Dernier message: 10/05/2011, 09h21
  2. Réponses: 5
    Dernier message: 17/04/2011, 10h52
  3. Lecture d'un fichier texte et affichage dans flash
    Par TaleMaker dans le forum Flash
    Réponses: 2
    Dernier message: 29/04/2010, 12h18
  4. Lecture d'un fichier texte dans un batch file
    Par cels dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 06/08/2009, 11h12
  5. Lecture d'un fichier texte dans un projet TOMCAT
    Par brice_nice dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 03/07/2005, 15h04

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