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

9 réponses

OlivrT Messages postés 323 Date d'inscription   Statut Membre Dernière intervention   36
 
SELECT [Num] & [Client] AS MesDeuxChampsConcatenes FROM MaTable
0
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
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
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
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
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
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