voici une fonction que j'ai créé fonctionnant très bien
mais donc j'aimerais savoir s'il y a moyen de simplifier nettement la chose.
j'ai une table qui s'appelle t2cour où un champ numérique à pour nom
NumIntDep
cette table est dans le même fichier mdb
ce qui me déplait (je n'ai peut être pas le choix) c'est les déclarations du
type SET
pas facilement controlable et les dim des adodb.recordset
ainsi que la libération de la fonction en mémoire
y a t'il moyen de faire bien plus simple pour la même efficacité ?
Cette fonction me permet de créer un compteur automatique pour le suivi
d'une base courrier où l'utilisateur
doit toujours mettre un numéro d'enregistrement du format 200300001
de cette manière on peut se rendre compte que la base permet 100000
enregistrement maximum par an
et passe automatiquement à 200400001 l'année suivante
Function NumDepart()
On Error GoTo ErreurHic
'd'abord j'ouvre une pseudo connection
Dim cnn As ADODB.Connection
Dim Recherche As ADODB.Recordset
' précise l'objet comme étant une base virtuelle
Dim rst As New ADODB.Recordset
' precise que nous sommes dans le projet en cours
Set cnn = CurrentProject.Connection
' variable de la requete sql
Dim StrSql As String
Dim Compteur As Variant
Compteur = Year(Now) * 100000
StrSql = "SELECT Max(t2cour.NumIntDep) AS Reponse FROM t2cour; "
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
3stone
Salut,
"Papy Frenchie" a écrit | ce qui me déplait (je n'ai peut être pas le choix) c'est les déclarations du | type SET | pas facilement controlable et les dim des adodb.recordset | ainsi que la libération de la fonction en mémoire | y a t'il moyen de faire bien plus simple pour la même efficacité ?
Moi, et cela n'engage que moi ;-) je n'aime pas les "goto" autres que pour la gestion d'erreur, ainsi que les erreurs qui font partie du fonctionnement "normal" d'une fonction... Je préfère prévoir tous les cas dans la fonction et garder la gestion d'erreur pour les mauvais sorts ;o)
Avec un "Option explicit" les déclarations ne me gène pas... ni leurs libérations !
En DAO, j'aurai fait quelque chose comme ceci... (pour un NumIntDe numérique)
Function f_Code() On Error GoTo err_Code
Dim db As DAO.Database Dim rs As DAO.Recordset Dim lngMax As Long Dim lngCode As Long
lngCode = Year(Date) * 100000
Set db = CurrentDb Set rs = db.OpenRecordset("SELECT Max(NumIntDep) AS MaxDeNumIntDep FROM t2cour;")
lngMax = Nz(rs!MaxDeNumIntDep, 0)
If (lngMax = 0) Or (lngCode > lngMax) Then lngCode = lngCode + 1 Else lngCode = lngMax + 1 End If
exit_Code: f_Code = lngCode rs.Close: db.Close Set rs = Nothing Set db = Nothing Exit Function
err_Code: MsgBox "Table ou champ inexistant..." Resume exit_Code
End Function
Si ca peut aider...
-- A+ Pierre (3stone) Access MVP ------------------------------------------------------- Bien démarrer ? c'est ici http://users.skynet.be/mpfa/ ( Je ne réponds pas aux emails qui concernent Access ) -------------------------------------------------------
Salut,
"Papy Frenchie" <marcel.picquette@free.fr> a écrit
| ce qui me déplait (je n'ai peut être pas le choix) c'est les déclarations du
| type SET
| pas facilement controlable et les dim des adodb.recordset
| ainsi que la libération de la fonction en mémoire
| y a t'il moyen de faire bien plus simple pour la même efficacité ?
Moi, et cela n'engage que moi ;-) je n'aime pas les "goto" autres que pour la gestion d'erreur,
ainsi que les erreurs qui font partie du fonctionnement "normal" d'une fonction...
Je préfère prévoir tous les cas dans la fonction et garder la gestion d'erreur
pour les mauvais sorts ;o)
Avec un "Option explicit" les déclarations ne me gène pas... ni leurs libérations !
En DAO, j'aurai fait quelque chose comme ceci... (pour un NumIntDe numérique)
Function f_Code()
On Error GoTo err_Code
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim lngMax As Long
Dim lngCode As Long
lngCode = Year(Date) * 100000
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT Max(NumIntDep) AS MaxDeNumIntDep FROM t2cour;")
lngMax = Nz(rs!MaxDeNumIntDep, 0)
If (lngMax = 0) Or (lngCode > lngMax) Then
lngCode = lngCode + 1
Else
lngCode = lngMax + 1
End If
exit_Code:
f_Code = lngCode
rs.Close: db.Close
Set rs = Nothing
Set db = Nothing
Exit Function
err_Code:
MsgBox "Table ou champ inexistant..."
Resume exit_Code
End Function
Si ca peut aider...
--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------
"Papy Frenchie" a écrit | ce qui me déplait (je n'ai peut être pas le choix) c'est les déclarations du | type SET | pas facilement controlable et les dim des adodb.recordset | ainsi que la libération de la fonction en mémoire | y a t'il moyen de faire bien plus simple pour la même efficacité ?
Moi, et cela n'engage que moi ;-) je n'aime pas les "goto" autres que pour la gestion d'erreur, ainsi que les erreurs qui font partie du fonctionnement "normal" d'une fonction... Je préfère prévoir tous les cas dans la fonction et garder la gestion d'erreur pour les mauvais sorts ;o)
Avec un "Option explicit" les déclarations ne me gène pas... ni leurs libérations !
En DAO, j'aurai fait quelque chose comme ceci... (pour un NumIntDe numérique)
Function f_Code() On Error GoTo err_Code
Dim db As DAO.Database Dim rs As DAO.Recordset Dim lngMax As Long Dim lngCode As Long
lngCode = Year(Date) * 100000
Set db = CurrentDb Set rs = db.OpenRecordset("SELECT Max(NumIntDep) AS MaxDeNumIntDep FROM t2cour;")
lngMax = Nz(rs!MaxDeNumIntDep, 0)
If (lngMax = 0) Or (lngCode > lngMax) Then lngCode = lngCode + 1 Else lngCode = lngMax + 1 End If
exit_Code: f_Code = lngCode rs.Close: db.Close Set rs = Nothing Set db = Nothing Exit Function
err_Code: MsgBox "Table ou champ inexistant..." Resume exit_Code
End Function
Si ca peut aider...
-- A+ Pierre (3stone) Access MVP ------------------------------------------------------- Bien démarrer ? c'est ici http://users.skynet.be/mpfa/ ( Je ne réponds pas aux emails qui concernent Access ) -------------------------------------------------------
Papy Frenchie
Merci 3stone, je vais m'amuser à faire des tests avec ta méthode
Papy
Merci 3stone,
je vais m'amuser à faire des tests avec ta méthode
-- A+ Pierre (3stone) Access MVP ------------------------------------------------------- Bien démarrer ? c'est ici http://users.skynet.be/mpfa/ ( Je ne réponds pas aux emails qui concernent Access ) -------------------------------------------------------
re,
"Papy Frenchie"
| je vais m'amuser à faire des tests avec ta méthode
Tu peux même t'affranchir de la plupart des déclarations,
si tu utilise une fonction de domaine...
Function f_Code()
On Error GoTo err_Code
Dim lngMax As Long
Dim lngCode As Long
--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------
-- A+ Pierre (3stone) Access MVP ------------------------------------------------------- Bien démarrer ? c'est ici http://users.skynet.be/mpfa/ ( Je ne réponds pas aux emails qui concernent Access ) -------------------------------------------------------