Addition dans une bdd et gestion des erreurs

titilechat001 Messages postés 22 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 18 septembre 2005 - 16 sept. 2005 à 09:48
Tuning Max Messages postés 314 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 31 août 2006 - 16 sept. 2005 à 19:41
bonjour



voila, je fais une appli de gestion d'un restaurant, liée à une base access en dao.

J'ai deux pb. je n'arrive pas à calculer l'addition : je mets dans mon
controle data ma requete pour faire la somme de mes champs prix, sur un
critère where, mais il ne me la prend pas. j'ai tellemnt chercher quee
je ne sais plus quoi faire, alors je vous mets mon coed, si vous savez,
pourriez vous m'écrire le bon code?



private sub dataplat_addition_reposition()

me.dataplat_addition.caption = dataplat_addition.recordset.absoluteposition + 1

end sub



private sub form_activate()

with me.dataplat_addition

.recordsource="select sum(prix) as somme from plat_table where id_table=" & idtable&";"

;refresh

end with

endsub



d'autre part, quand j'ai des erreurs liées à ma base de données, par
exemple, l'utilisateur clique sur un enregistrement, mais il n'y a pas
d'enregistrement connexe, ca maet une message d'erreur. mais le message
d'erreur arrive à des moments que je ne sais pas déterminer. voyez vous
ou je pourrais savoir ou mettre mon message d'erreur?



merci de votre aide

8 réponses

VBFranceBlub Messages postés 27 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 19 septembre 2005
16 sept. 2005 à 10:15
Salut;


Essayes:


private sub form_activate()


dataplat_addition.recordsource="select sum(prix) as somme from plat_table where id_table=" & idtable
dataplat_addition.refresh


end sub

Perso, sous ma version de Vb, je dois faire comme ça plutôt:

private sub form_activate()
Set dataplat_addition.recordset=OpenRecordset("select sum(prix) as somme from plat_table where id_table=" & idtable, dbOpenDynaset)
dataplat_addition.refresh
end sub


Pour la gestion des erreurs, cherche dans les évènements de ton controle data, en général, les erreurs se déclarent sur le Reposition ou le Validate.

<-Blub->
0
Tuning Max Messages postés 314 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 31 août 2006 1
16 sept. 2005 à 11:41
Salut, pour ma part, je passe souvent par un recordset pour ce genre d'opération, je trouve cela plus pratique

Dim sql As String, db As Database, rcd As Recordset
' Là tu écrit ta requête SQL
sql = " SELECT Sum(plat_table.prix) as Somme FROM plat_table WHERE ((plat_table.id_table)= '" & idtable & "'); "
' Là tu ouvre le recordset en question
Set db = CurrentDb
Set rcd = db.OpenRecordset(sql)
' Enfin tu affecte la valeur de ton recordset
With Me.dataplat_addition
.Value = rcd.Fields("Somme").Value
End With
' Et tu referme le tout
rcd.Close
Set db = Nothing
Set rcd = Nothing

Pour la gestion des erreurs, si j'ai bien compris tu souhaite changer le message d'erreur affiché aux utilisateurs pour un type d'erreur précis.
Je pense que le plus simple est encore de mettre " On Error GoTo " au debut de ton code pour intercepter les erreurs lorsqu'elles se produisent. enfin tu met en fin de code ton ettiquette de gestion d'erreurs

un truc du genre :

private sub form_activate()
On Error GoTo Err_form_activate

' *** Tu met tout le code que tu veut

Err_form_activate :

erreur:
If err.Number = "Tu met là le numéro de ton erreur" Then
MsgBox "Ca ne marche pas !"
Resume Next
Else
MsgBox err.Description
Exit Sub

End Sub

Voilà j'espère que cela pourra t'aider un peu
0
titilechat001 Messages postés 22 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 18 septembre 2005
16 sept. 2005 à 13:18
merci à tous les deux



mais concernant la gestion des erreurs, le pb, c'est qu'elles
apparaissent quand l'enregistrement requis dans la table n'existe pas.
et ca, je ne sais pas le prévoir. est ce que vous savez sur quel
événement je dois faire intervenir le code de gestion d'erreur de
tuning max??



merci beaucoup
0
Tuning Max Messages postés 314 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 31 août 2006 1
16 sept. 2005 à 15:19
comme je te l'ai indiqué, tu met au debut de ton code un "On Error GoTo" pour intercepter toute les erreurs pendant l'execution du code

private sub form_activate()
On Error GoTo Err_form_activate

' *** Tu met tout le code que tu veut

Err_form_activate :

If err.Number = "Tu met là le numéro de ton erreur" Then
MsgBox "L'enregistrement spécifié n'existe plus !"
Resume Next
Else
MsgBox err.Number & err.Description
Exit Sub

End Sub

il faut que tu fasse un test en condition pour récupérer le numéro de cette erreur. Je ne connais malheuresement tout les codes erreurs par coeur
0

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

Posez votre question
titilechat001 Messages postés 22 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 18 septembre 2005
16 sept. 2005 à 17:20
merci, je vais essayer de ce pas. J'ai un autre pb sur une boucle, peux tu me dire ce qui ne fonctionne pas, si tu vois :





Private Sub Form_Activate()

'sélection de l'addition correspondant à la table en cours

Dim id As Integer

Dim compteur As Integer

Dim add As Integer

id = 0

compteur = 0

add = 0



Do

Me.DataGrid1add.Row = compteur

Me.DataGrid1add.Col = 0

id = Val(Me.DataGrid1add.Text)

If (id = idtable) Then

Me.DataGrid1add.Row = compteur

Me.DataGrid1add.Col = 1

add = Val(Me.DataGrid1add.Text)

Me.lbltotalht.Caption = add 'a ffiche l'addition ht

Me.lbltotalttc.Caption = (add * 0.196) + add

Exit Do

End If

compteur = compteur + 1

Loop Until Me.DataGrid1add.Row = -1

End Sub

dans un datagrid, j'essaye de balayer toutes les premières cellules jusqu'à la fin du datagrid,

je compare ma première cellule (id) à idtable, ma variable

je met ensuite dans lbltotalht.Caption le résultat de la cellule deux de cette ligne



à l'éxécution, ca plante des fois en me mettant "en surcapacité à la ligne compteur = compteur + 1





merci si tu peux m'aider
0
Tuning Max Messages postés 314 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 31 août 2006 1
16 sept. 2005 à 18:19
Désolé, mais je ne comprend pas trop ce que tu cherche à faire. Pourrait tu être plus explicite
0
titilechat001 Messages postés 22 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 18 septembre 2005
16 sept. 2005 à 18:40
en fait, je voudrais parcourir toutes les cellules de la première colonne de mon datadrid1add et les comparer à idtable.

quand j'ai ma cellule =idtable, prendre la cellule de la colonne 2 correspondante et la mettre dans ma variable add



est ce que tu y vois plus clair?
0
Tuning Max Messages postés 314 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 31 août 2006 1
16 sept. 2005 à 19:41
Je pense avoir compris. Voilà ton code modifié.
test le car je viens de l'écrire et comme on est vendredi soir, je suis désolé mais je n'ai pas le temps de le tester. De toute manière, c'est l'idée que tu doit suivre à mon avis pour ce test.
J'espère que j'aurais put aider et bon week-end

Private Sub Form_Activate()
'sélection de l'addition correspondant à la table en cours
Dim i As Integer
Dim Total As Double


Total = 0
' créer une boucle le nombre total de lignes fixes au sein du contrôle en partant de la fin
For i = DataGrid1add.FixedRows To DataGrid1add.Rows - 1
If Trim(DataGrid1add.TextArray(DataGrid1add, i, 1)) = idtable Then ' test la valeur de la cellule de la ligne i et colonne 1
Total = Total + (Val(DataGrid1add.TextArray(DataGrid1add, i, 2))) ' calcul de la somme des valeurs trouvées
End If
Next i
Me.lbltotalht.Caption = Total ' Affiche la valeur calculé ci-dessus
Me.lbltotalttc.Caption = (Total * 0.196) + Total ' Affiche et re-calcul la valeur de Total * 0.196
End Sub
0
Rejoignez-nous