Quelle requête pour ce cas

paralaika -  
 paralaika@gmail.com -
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. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    SELECT [Num] & [Client] AS MesDeuxChampsConcatenes FROM MaTable
    0
  2. paralaika
     
    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
  3. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    SELECT [Num] & [Client] AS MesDeuxChampsConcatenes FROM MaTable
    WHERE Right([Client],1) =[Num]

    ca devrait marcher ça non ?
    0
    1. paralaika
       
      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
  4. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. paralaika
     
    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
  7. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    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. paralaika
       
      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
  8. paralaika
     
    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
  9. OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
     
    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
  10. paralaika@gmail.com
     
    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