access et génération d'une valeur auto ??? - Programmation
Marsh Posté le 26-08-2002 à 15:06:17
Bon juste pour te donner quelques idées ...
soit une table : table4
champ x type date/time
champ y type numérique
ex : x y
12/04/2002 5
13/04/2002 6
SELECT format(x,'ddmmyyyy' & (select max(y)+1 from table4) AS Expr1
FROM Table4;
Résultat : 120420027
130420027
Marsh Posté le 26-08-2002 à 16:55:54
salut merci de me répondre
je vois bien ton truc mais j'en fait quoi ??? je le met où ???
Depuis hier j'ai à peu près compris les tables, les requètes, les formulaires, les liaisons entre tables, les combinaisons de tables, les requètes de tri et de calcul, les sous-formulaires.
Mais dès qu'il faut faire des macros ou générer des formules je suis naze. Pourtant je viens de PHP, MySQL, mais je n'arrive pas à m'y retrouver
j'en fais quoi de ton select ????
Marsh Posté le 27-08-2002 à 14:13:34
Ok
Bon tu veux générer un code style
on est le 25/02/2002 => 125022002
on est le 27/02/2002 => 227022002
on est le 27/08/2002 => 327082002 ....
on est toujours le 27/08/2002 mais c'est un 2 ème insert
=> 427082002 ...
Si tu créé une table CONSTU qui contient
1 champ numérique MAXI,
1 ligne et qui contient / va contenir
comme donnée le dernier numéro
utilisé (1 puis 2, puis 3 et enfin 4 dans notre cas)
Pour insérer dans une autre table
champ NUMAUT ex : TABDON une bonne valeur
formatée comme tu veux, tu peux faire par ex :
Update CONSTU set MAXI = MAXI + 1
(on passe de 4 à 5)
Insert into TABDON (NUMAUT, ...)
values ((select max(MAXI)+1 from CONSTU) & format(now,'ddmmyyyy',...)
(Valeur insérée ici 527082002)
Bon ya d'autre façon de procéder mais ça
ça devrait fonctionner
Marsh Posté le 27-08-2002 à 18:06:59
Tout d'abord merci de t'occuper de moi
je comprend bien ce que tu me dis.
Le problème c'est que je suis en train de faire les tables, les requètes et les formulaires pour gérer des prises de commandes et je ne sais pas ou mettre les lignes que tu me donne.
j'arrive à générer une valeur du type:
227/08/2002 (2 pour le numéro et le reste pour la suite de la date).
J'arrive à formater la date x avec 'jjmmaa' à l'affichage, et le chiffre y séparément.
Mais lors de l'enregistrement du numéro en faisant
num: [y]&[x] dans une requète
j'obtiens toujours le numéro 2 + la date en forme abrégée 27/02/2002 ==> 2/27/08/2002
j'ai bien matter le format(x,'ddmmyyyy' que tu me donne et qui devrait marcher, mais je ne sais pas ou l'insérer. J'ai essayé dans une requète, puis dans un formulaire mais il me dit toujours qu'il y a une erreur
Je l'ai fait en PHP+MySQL pour simuler une prise de commande de pizza , ça marche nickel pour les numéros de facture auto, pour les commandes, les clients, bref tout est nickel
j'essai de faire la même chose avec ACCESS, le prob c'est que je n'ais toujours pas trouver ou je devais coller le code que tu me donne
Quand je l'aurais trouver je n'aurais plus besoin de passer par l'assistant d'ACCESS pour programmer des valeurs.
merci d'avance
je vais essayer de matter de ce que tu viens de me donner
Marsh Posté le 28-08-2002 à 13:07:00
OK
Exemple d'une ligne (en passant) de
la Propriété "sur click" d'un bouton
texte2 (dans un formulaire formulaire1)
DoCmd.RunSQL "Insert into table4 (z) values (format(forms!formulaire1!texte2,'ddmmyyyy')"
=> enr. (z) inséré avec la valeur 27082002
Marsh Posté le 28-08-2002 à 17:50:14
Bon
je t'explique en détail car je pense qu'on est pas loin de la soluce
j'ai une table T1
clé primaire 'id' numauto
'date' format date
'num' texte
ensuite j'ai un formulaire F1 qui pointe sur T1
ensuite j'ai un formulaire F0 je met un bouton de commande 'nouveau numéro' qui pointe vers F1
sur propriété du bouton de commande , onglet évènement, sur clic
j'ai rentrer
DoCmd.RunSQL "Insert into T1 (num) values (format(F1!id,'ddmmyyyy')"
mais lorsque je clique sur le bouton de commande 'nouveau numéro'
ça me dit "access ne peut pas trouver la macro 'DoCmd'."
on ne doit pas être loin !!!
je suis en train de faire des tests pour savoir si on peut faire des requètes de cette façon pour afficher des données spécifiques.
Marsh Posté le 28-08-2002 à 18:15:55
OUPS je viens de coller ton code dans une feuille visual basic.
apparament c'est là qu'il faut le mettre car je viens de voir des DoCmd.
par contre il m'enregistre toujours 311299 et il faut que mette ddmmyy et non jjmmaa.
Marsh Posté le 29-08-2002 à 01:56:21
il est 2h
et je viens de trouver ou je peux mettre ces satanées instructions SQL
je m'y retrouve enfin
mais la syntaxe n'est pas la même qu'avec MySQL, y aurait t'il une doc sur le net dur la syntaxe ????
Marsh Posté le 29-08-2002 à 03:04:41
il est 3h07
je viens de trouver en fait c'est vraiment tout kon
UPDATE T1 SET num=num+1 WHERE id=1;
dans une requete heing.
comme avec MySQL koi
Marsh Posté le 29-08-2002 à 03:29:37
Bon ça y est je viens de capter la procédure évènementielle
en fait maintenant lorsque j'ouvre une nouvelle facture j'ai automatiquement une incrémentation du numéro de facture de type 1290802, 2290802, 3290802, etc... top kool et du coup je viens de comprendre ou il fallait mettre toutes les formules que tu m'as donné
vieux motard que jamais heing
le seul truc maintenant c'est j'aimerais bien supprimer la boite de dialogue qui s'affiche entre les deux formulaires qui m'annonce que je met à jours une ligne de la table.
Bon j'm'en vais m'coucher car y s'fait tard quand même heing !!!
merci encore pour ta patience
Marsh Posté le 29-08-2002 à 14:33:01
le seul truc maintenant c'est j'aimerais bien supprimer la boite de dialogue qui s'affiche entre les deux formulaires qui m'annonce que je met à jours une ligne de la table.
=> DoCmd.SetWarnings False
puis après ne pas oublier de le repositionner ...
=> DoCmd.SetWarnings True
Bon je vois que ça devient tout bon ...
Marsh Posté le 29-08-2002 à 14:59:21
Nickel ça marche d'enfer.
Y'a t'il un moyen dans un formulaire de n'afficher qu'un seul enregistrement ? et de virer par la même occasion les icones qui permettent de naviguer dans les tables, pour n'avoir accès qu'a ce que je met sur le formulaire ?? en fait je voudrais pouvoir faire comme avec PHP faire un formulaire et le valider en l'enregistrant avec un bouton de commande (pour éviter d'avoir des enregistrements sans rien du tout dans les champs).
Merci encore
Marsh Posté le 29-08-2002 à 15:59:52
Il faut regarder dans
propriétés du Formulaire
onglet format
options
afficher sélecteur ... boutons de déplacement
Marsh Posté le 29-08-2002 à 16:19:13
Trop fort
bon je vais te laisser un peu en paix
je vaix essayer de faire un formulaire sans faire un enregistrement auto, et mettre un bouton OK pour valider l'enregistrement.
Je trouve ça nul, le fait qu'il suffise de mettre une valeur dans un champ pour automatiquement valider un nouveau enregistrement
merci encore
Marsh Posté le 29-08-2002 à 16:26:28
OUPS encore moi
une dernière chose , y'a moyen d'annuler la navigation dans les enregistremnt avec la roulette de la souris ?????
Et je suppose qu'il y a aussi des commandes pour virer les barre d'outils ??? je suis en train de matter ça aussi.
Marsh Posté le 29-08-2002 à 16:34:27
OUPS OUPS encore moi mais promis je te laisse après ça
comment je peux faire pour lors de l'ouverture d'un formulaire tester le jour du mois et remettre à 0 le numéro de facture ????
genre
if 'jj' est 1 update num=0;
quoi y marche pas ce code ???? t'es sur ????
je suis en train de matter sur les propriétés du formulaire...
Marsh Posté le 25-08-2002 à 16:33:08
Salut tout le monde
je suis en train de matter ACCESS, le log de db pas le film hein
Et je cherche à générer une valeur automatiquement.
En gros c'est un chiffre "numfacture" qui correspond à un numéro de commande.
Qui contient l'id (clè primaire et NuméroAuto) et la date sous le format jjmmaa.
Jusqu'à là ça va ??? j'arrive bien à afficher l'id (1 pour le premier), et la date sous le format jjmmaa (240802 pour aujourd'hui). Mais lorsque je demande dans une requète de m'afficher [id]&[date] il me met 124/08/02 (le 1 de l'id et la date au format abrégé ).
Comment je peux faire pour générer un numéro du type 1240802 automatiquement ????
une macro peut-être ?????
je suis un newbie sur ACCESS ! alors n'y aller pas trop fort hein
merci d'avance