Quelle requête pour ce cas

Bonjour,
je dois importer un fichier .txt en access ( malheuresement je ne peux pas passer par excel car sur office 2000 le max de ligne c'est 65k ) la table est comme suite

Num Client
1 a1
2
3
4 a2
5
6
7 a3
8
9

quelle requête puis je élaborer pour avoir ce résultat

Num Client
1 a1
2 a1
3 a1
4 a2
5 a2
6 a2
7 a3
8 a3
9 a3

merci
Configuration: Windows XP Internet Explorer 8.0

9 réponses

  1. SELECT [Num] & [Client] AS MesDeuxChampsConcatenes FROM MaTable
    0
    1. Merci pour la réponse, cependant je crois que je ne me suis pas bien expliqué ( confusion suite à un probléme de présentation )
      voici la table initiale :
      Num --------------Client
      1 ------------------a1
      2
      3
      4 ------------------a2
      5
      6
      7 ------------------a3
      8
      9
      et voici le résultat auquel je veux aboutir :
      Num --------------Client
      1 ------------------a1
      2 ------------------a1
      3 ------------------a1
      4 ------------------a2
      5 ------------------a2
      6 ------------------a2
      7 ------------------a3
      8 ------------------a3
      9 ------------------a3
      autrement dit la valeur du champ "Client" correspondante à la valeur : "1" , "2" et "3" du champ "Num" doit être toujours = "a1" le probléme c'est que dans le fichier txt la valeur "a1" ne s'affiche que pour la valeur Num : "1" or comme précédemment annoncé sur requête access on a pas la même notion de cellule
      0
      1. SELECT [Num] & [Client] AS MesDeuxChampsConcatenes FROM MaTable
        WHERE Right([Client],1) =[Num]

        ca devrait marcher ça non ?
        0
        1. rebonjour,

          malheureusement non car l'exemple n'est qu'une illustration càd les valeurs : a1, a2 a3 c'est en fait des codes de 6 caractéres exemples : 526841, 148957, 985756 qui n'a aucun lien avec les valeur Num ( qui n'est qu'un compteur généré lors de l'importation ), la question est comment reprendre la derniére valeur "Client" de la table à chaque fois que la valeur est nul.

          et merci encore
          0
      2. mais la question la question est comment reprendre la derniére valeur "Client" de la table à chaque fois que la valeur est nul. est complètement différente du point de départ ! :-)
        Deux possibilités :
        1) rechercher la partie numérique dans le champ et prendre le maximum.
        2) ajouter un champ date qui sera remplit à chaque fois qu'un record s'ajoute.
        Ainsi, il suffira après de rechercher le record correspondant au dernier ajouté en faisant un TOP 1 sur un ORDER BY DESC du champ date en question.
        D'ailleurs c'est un conseil que je fais souvent. Systématiquement dans mes tables j'ai un champ "lastupdated" et "addedat" avec une date dans chacun, ce même si je n'en ai pas besoin.
        0
        1. Oui effectivement c'est une très bonne idée ça résout mon problème, mais à moitié car ça ne s'applique qu'au record qui s'ajoute or dans ma table il existe déjà dans le champ Client des valeurs nulles auxquelles je voudrais attribuer les valeurs correspondantes suivants le champ Num, est ce qu’en comptant le nombre d’enregistrements vides relatifs au même code client peut aider …
          0
          1. Ah il y a ça aussi :-) la prochaine fois expliquer TOUT en une fois, on gagnera du temps :-))
            Moi que je coderai un one shot qui irait chercher le max id et qui irait remplir les cases vides en mettant à jour chaque enregistrement. Vous voyez comment faire ?
            0
            1. oui je vois comment avec une requête mise à jour je crois que ceci sera faisable, je tente ça et je reviens vers vous

              merci bcoup
              0
          2. Bonjour,

            C'est parfait ça marche.

            Pour affiner mon analyse j'ai besoin de réinitialiser le compteur ( dans l'exemple ci-dessous : c'est le champ :"essai" ) placé dans une requête à chaque fois que la valeur d'un autre champ ( dans l'exemple ci-dessous : c'est le champ :"Client_tr" ) de la même requête est égale à zéro.

            j'ai déclaré les fonctions : QCntr et SetToZero dans un module :

            Option Explicit
            Global Cntr
            Function QCntr(x) As Long
            Cntr = Cntr + 1
            QCntr = Cntr
            End Function
            '**************************************************************
            Function SetToZero()
            Cntr = 0
            End Function

            et j'appel ces deux fonctions à partir de ma requête :

            SELECT [tabl1_trait].[Num], [tabl1_trait].[Client_tr], IIf([Client_tr]=0,SetToZero(),QCntr([Client_tr])) AS essai
            FROM tabl1_trait;

            j'ai tenté la fonction IIf pour conditionner la réinitialisation du compteur, mais le compteur ne reprend pas l'incrémentation à partir de 0

            ça donne ce résultat :

            Client_tr ********essai
            0
            910 ******** 1
            985 ******** 2
            975 ******** 3
            0 ********
            919 ******** 4 et pas 1
            988 ******** 5 et pas 2
            973 ******** 6 et pas 3
            0 ********
            930 ******** 7 et pas 1
            925 ******** 8 et pas 2
            973 ******** 9 et pas 3
            0
            1. Sub RemplirLesIdsManquants ()
              On error goto Err_
              dim db as dao.database
              dim rs as dao.recordset

              set db = currentdb
              set rs = db.openrecordset("select * from tl_client where client_tr = 0",dbOpendynaset)
              dim compteur as integer
              compteur = 1
              do while not rs.eof

              rs.edit
              rs!client_tr = compteur
              rs.update
              compteur = compteur + 1
              rs.next
              loop

              set db = nothing

              Exit_:
              exit sub

              Err_:
              msgbox err.description
              err.clear
              resume exit
              End Sub

              Voilà m'sieur ;-)
              0
              1. Bonjour,

                Merci beaucoup ça m'a résolu un grand probléme.

                pour ceux qui veulent utiliser le même code à noter que ce code s'est bloqué sur les déclarations "dim db as dao.database" et "dim rs as dao.recordset" il fallait activer donc la référence DAO 3.6, s'est bloqué sur la ligne : "rs.next" je l'ai modifié "rs.MoveNext", et enfin sur la ligne "Resume Exit" car il fallait mettre "Resume Exit_"

                Merci encore pour votre aide
                0