Votre question

VB: récupérer le max d'un champ, lui ajouter 1 et.. [RESOLU]

Tags :
  • Creation
  • Programmation
Dernière réponse : dans Programmation
12 Mai 2007 17:09:04

bonjour, Dans le cadre d'unr création de formulaire, je cherche a récupérer la valeur max d'un champ, lui ajouter 1 et l'attribuer à une variable:
un de mes cas:
Private Sub btn_ajoutclient_click()
DoCmd.SetWarnings False
DoCmd.RunSQL "insert into client values('" & Me.txt_num & "','" & Me.txt_nom & "' , '" & Me.txt_adresse & "','" & Me.txt_ville & "' , '" & Me.txt_cp & "' , '" & Me.txt_mail & "');"
End Sub

Dans ce cas là je voudrais récuperer la valeur maximum du champ CLIENT.NumCli, lui rajouter 1 et l'afficher dans le champ Me.txt_num

quelqu'un pourrait-il m'aider???

Autres pages sur : recuperer max champ ajouter resolu

13 Mai 2007 14:51:30

personne??? c'est impossible à faire??
Contenus similaires
Pas de réponse à votre question ? Demandez !
13 Mai 2007 15:24:24

ton idée n'est pas claire tu veux faire quoi au juste la valeur max num elle se trouve dans la base de donnée?? n'est ce pas? si oui alors tu doit à chaque evenement click de ajout client fair une requettel sql qui retourne le max puis cette valeur elle sera affecter dans le champ num client dans ton interface
13 Mai 2007 16:24:26

déja merci amen_1919 pour ta réponse :D 
oui c'est tout à fait ça mais ça ne marche pas :( 
j'ai fait ça:
Dim nbmax As Integer (pour declarer la varable en tant qu'entier)
DoCmd.RunSQL "select MAX (NumCli) from CLIENT;" = nbmax (pour récuperer le max du champs NumCli de la table CLIENT et l'affecter à la variable nbmax)
Me.txt_num = nbmax (pour afficher la variable dans le champs txt_num)

mais ça ne marche pas, ce qui n'est pas étonnant vu mon niveau en VB :( 
13 Mai 2007 18:00:52

essai Me.txt.text=nbmax dans l'affectation et tu as mis ça sous l'evt click de ajout client?
13 Mai 2007 18:35:54

oui je l'ai bien mis sous l'evenement ajout mais ça n'as pas marché puisque je n'ai aucun champ champ texte qui s'appel comme ça :( 
je vais voir avec mon prof d'informatique si il n'en n'a pas marre de toutes mes questions et si je trouve la solution je vous le dit :) 
13 Mai 2007 18:50:19

deja premiere erreure: Me.txt_num = nbmax +1
le +1 est essentiel car ou sinon c'est inutile puisque il y aura une redondance de clef primaire et que c'est interdit par la règle d'unicitée
13 Mai 2007 19:17:13

c pas un erreur juste pour verifier est ce que ca marche ou pas !!!! et puis comment t'a pas un champs me.txt.text!!!!!!!!!!!! me.txt c'est à dire que c'est un textbox!!!!!!!!comment l'utilisateur va mettre les données!!!num,nom...!!!!!!!!! ça doit être des textbox!!! n'est ce pas??? c quoi ce programme au juste!!!!!!!
13 Mai 2007 20:11:50

non ça marche pas
oui c'est bien des textbox c'est un programme pour pouvoir ajouter des clients dans une table mais il faut faire une auto-incrementation car ou sinon l'utilisateur peut mettre 2 fois un même numéro pour une clef primaire ce qui ne marcherait puisque il y a une règle d'unicitée
16 Mai 2007 07:40:31

Ouvre ta requette comme une table :

Set TableRechercheMax = MaDb.OpenRecordset("select MAX (NumCli) AS MaxTrouve from CLIENT;")
Me.txt_num = TableRechercheMax!MaxTrouve + 1

Après, tu peux faire INSERT avec RunQSQL

:-)
16 Mai 2007 11:01:55

apparement selon mes recherches et l'aide du prof, il faut utiliser un jeu d'enregistrement car c'est le seul moyen de récupérer des données et de faire des calcul (en l'occurence rajouter 1)
je cherche et je vous tiens au courant
16 Mai 2007 15:34:50

L'objet RecordSet que je te propose d'ouvrir contient des jeux [Set]d'enregistrements [Record], pour l'occasion issus de la requête SELECT.

Il faut mettre avant, si tu ne l'a pas déjà trouvé :

Dim MaDb as DataBase
Dim TableRechercheMax as RecordSet
Set MaDb = CurrentDb

Telle qu'est la requête, il ne contient qu'un seul jeu : pas la peine de chercher la bonne ligne dedans vu qu'il n'y en a qu'une. Il n'y a plus qu'à ajouter 1.

Tu pourrais aussi aller fouiller toi-même dans la table CLIENT pour trouver le jeu qui contient le max, sans faire de requête. Mais c'est bien plus compliqué.
16 Mai 2007 15:55:33

merci doatyn trop sympa de ta part :) 
je regarde si je comprend (et marche) et je post si j'ai des questions :) 
17 Mai 2007 18:53:06

ça ne marche pas mais access ne me propose pas son cher debogeur donc je pense que ça doit être une petite connerie du style un caractère invisible (par ex un espace ) qui m'a déja fait perdre un dimanche complet :( 
j'ai donc supprimer les espaces pour voir si c'était bien ce problème mais non :( 
je met le vb de mon formulaire:


Private Sub btn_ajoutclient_click()
DoCmd.SetWarnings False
Dim MaDb As Database
Dim TableRechercheMax As Recordset
Set MaDb = CurrentDb
Set TableRechercheMax = MaDb.OpenRecordset("select MAX (NumCli) AS MaxTrouve from CLIENT;")
Me.txt_num = TableRechercheMax!MaxTrouve + 1
DoCmd.RunSQL "insert into client values('" & Me.txt_num & "','" & Me.txt_nom & "' , '" & Me.txt_adresse & "','" & Me.txt_ville & "' , '" & Me.txt_cp & "' , '" & Me.txt_mail & "');"
Me.txt_num = ""
Me.txt_nom = ""
Me.txt_adresse = ""
Me.txt_ville = ""
Me.txt_cp = ""
Me.txt_mail = ""
If Me.txt_mail = "" Then MsgBox " Félicitation! L' ajout du client a été effectué avec succès." Else MsgBox " Attention! L' ajout du client n'a pas été effectué."
End Sub

Si une âme charitable pourrait me dire où est le problème sa serait vachement sympa :) 

EDIT: je sais que ma partie de VB pour les erreures n'est pas correcte mais je bosse dessus en paralèle
18 Mai 2007 03:18:05

Je te met mon adresse mail par MP, envoie-moi ta base.
18 Mai 2007 07:23:28

je viens de le faire et merci encore!!
18 Mai 2007 10:20:05

Bien reçu.

Apparamment Access ne comprends pas la clause value. Comme ça, ça marche:
Dim Req As String
Req = "INSERT INTO CLIENT ( NumCli, Nom, AdresseRue, "
Req = Req & "AdresseVille, AdresseCP, Email ) "
Req = Req & "SELECT '" & Me.txt_num & "','" & Me.txt_nom
Req = Req & "' , '" & Me.txt_adresse & "','" & Me.txt_ville
Req = Req & "' , '" & Me.txt_cp & "' , '" & Me.txt_mail & "';"
DoCmd.RunSQL Req

Si tu veux, je peux éplucher ta BD, mais il faut m'en donner le but. Ce qui m'a sauté aux yeux :
* La clef de la table client est Txt et pas Integer
* Ton formulaire "ajouter un client" est basé sur la table "devis"
* L'arrangement de tes tables "devis" et "prestation" sont un peu étonnants.
* Accessoirement : chaine vide interdite. Et si ton client n'a pas d'Email ?

Si on continue, ce sera par Email perso, il n'y a que l'info sur la clause insert qui a sa place sur ce site, tout le reste est hors sujet.

Topic à fermer.

:-)
18 Mai 2007 13:41:07

merci doatyn pour ton aide mais je vais éssayé de continuer un maximum tout seul mon but n'étant pas d'avoir un code parfait, mais d'acquérir des technioques mais tes remarques sont interessantes, je vais les creuser et je te contact si j'ai encore des questions!!!
et encore merci ;) 
18 Mai 2007 16:54:09

A ta dispo et bon courage. C'est pour moi un plaisir d'aider qq qui veut progresser.
3 Juin 2009 09:55:43

salut, est ce que vous pouvez m'aider!!
en fait je suis stage de fin d'etudes et j'ai un problème dans ma base sous acces 2000, alors je sollicite votre aide
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS