Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Programmation

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???
Lassé par la pub ? Créez un compte

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

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 :( 

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 :) 

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!!!!!!!

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

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

:-)

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

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é.

ç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

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.

:-)

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 ;) 
Lassé par la pub ? Créez un compte
Tom's guide dans le monde