[access]interdire doublons encodage formulair

Fermé
alain105d - 24 févr. 2006 à 16:33
 Utilisateur anonyme - 27 févr. 2006 à 21:55
Bonjour à tous,
Voila mon problème,j’ai un projet en cours sur une location d’appartements(en access 2000) ,j’ai un formulaire client qui a un sous formulaire location
Dans le SF location j’ai les champs [date d’entrée] [date de sortie] [nom chalet] …
Après une réservation les données sont ajoutées à une table archive(puis effacées dans le SF location).
Je voudrais interdire l’encodage d’une date d’entrée déjà existante (dans table archive) pour un même chalet mais autoriser la date si c’est pour un autre chalet.
J’ai réussi à interdire quand la date est dans la table archive mais pas en associant l'appartement.
Quelqu’un a une idée ?
Merci de votre aide
A voir également:

7 réponses

zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
26 févr. 2006 à 17:12
Tu peux faire la même chose en VB sans être limité par le nombre de caractères.

La fct DCount est effectivement une bonne idée.
Tant pis pour la structure...
1
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
25 févr. 2006 à 10:06
Pourrais-tu en dire plus quant à la structure de tes tables?

Je ne trouve pas logique de déplacer les enregistrements d'une table à l'autre.

Ne serait-il pas plus simple d'extraire les dates libres à l'aide d'une requête pour n'afficher que les chalets libres.

Si tu fais de la location saisonnière comme la dénomination "chalet" me le fait penser (à moins que tu ne sois Suisse? (lol)) ne penses-tu pas illogique de faire d'un formulaire "client" le formulaire principal? ne serait-il pas plus simple de partir d'un tableau affichant tous les chalets libres par date puis, une fois le choix du chalet et de la date effectués d'encoder les données du client...

Je ferais une table "chalets" reprenant la description des chalets,
une table "location" reprenant les dates de location, une clé externe N°de client et une clé externe N°de chalet et une table "clients" reprenant les coordonnées des clients.

A mon avis avec ça tu as tout;
0
Bonjour
Merci d’avoir répondu
Je suis d’accord ,les tables chalet client et location sont faites comme ca
Je déplace les enregistrements de la table location pour les archivés dans une autre table.
Le formulaire location reprend chaque client avec le chalet qu’il loue les dates entrée ,de sortie, les charges et le prix a payer
Moi je voulais que la personne qui encode les dates de la location ne puisse pas encoder une date qui existe déjà pour un chalet ,normalement elle se base sur la table archive pour voir les date occupées mais si elle se trompe elle fera une deuxiéme reservation ?
Je ne sais pas si j’ai bien explique mon probléme
Merci
0
Utilisateur anonyme
26 févr. 2006 à 16:19
salut, comme l'a dit zenon, tu as 1 pb de structure...

sinon, si tu es "obligé" de faire avec, regarde la fonctin dcount, elle te permettra de regarder si 1 date est déja saisie.
0
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
26 févr. 2006 à 16:30
Je pense avoir bien compris, mais si tu laissais tous les enregistrements dans la même table, ce serait plus facile de n'afficher dans le formulaire dans lequel tu encodes les nouvelles locations que les périodes libres.

On pourrait par exemple créer un formulaire principal reprenant les chalets avec un sous-formulaire affichant les périodes disponibles et/ou un formulaire de recherche par dates affichant tous les chalets libres à la période voulue. On pourrait ajouter d'autres critères comme la capacité d'accueil...

Si les locations sont encodées dans une table distincte, ce n'est plus possible. On peut tout au plus écrire une procédure VB pour vérifier si le chalet est libre et afficher un message d'erreur si ce n'est pas le cas.

En fait, dès qu'une période est réservée, elle disparait des possibilités de location et si on veut afficher toutes les réservations, il suffit d'appliquer une requête sélection à la table pour n'afficher que les enregistrements où les dates ne sont pas Null. Comme la table contient une référence au N°de chalet et au N°Client toutes les données peuvent être retrouvées et on n'a pas besoins d'une table archives.
0

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

Posez votre question
Merci de vos réponse
J'essaie de resoudre le prob sans changer ma structure ,pour moi toute les dates sont libres sauf celle dans ma table archive
Je pensais faire une macro qui compare la date d'entrée et le chalet que l'on entre dans le formulaire et les comparer au enregistrement dans la table archive.
J'ai utilisé la condition
CpteDom("[Date d'entrée]";"Archive dates";"[Date d'entrée]=Forms![CLIENTS+ SFormulairelocation]![LOCATION Sous-formulaire1]![Date d'entrée]")>0
action bte message
dans la macro pour savoir si la date est déja prise cela fonctionne mais si j'essaie d'ajouter la condition pour le chalet je n'est pas assez de caractere (texte trop long)
une idée?
Merci
0
Bonjour,
Je crois que le VB est la meilleur solution ,mais comme je n’y connais pas grand chose en prog j’ ai converti ma macro ,qui fonctionne seulement avec les dates ,en VB
Mais je n’arrive pas a la transformer avec le deuxième critère le nomchalet
Voila ma macro convertie sans modif
Si quelqu’un a une idée
Merci

Option Compare Database

'------------------------------------------------------------
' verification_doublon_date
'
'------------------------------------------------------------
Function verification_doublon_date()
On Error GoTo verification_doublon_date_Err

If (DCount("[Date d'entrée]", "Archive dates", "[Date d'entrée]=[Formulaires]![CLIENTS+ SFormulaire]![LOCATION Sous-formulaire1]![Date d'entrée]") > 0) Then
Beep
MsgBox "attention doublon", vbOKOnly, ""
End If


verification_doublon_date_Exit:
Exit Function

verification_doublon_date_Err:
MsgBox Error$
Resume verification_doublon_date_Exit

End Function
0
Utilisateur anonyme
27 févr. 2006 à 16:16
Bonjour,

il te faut rajouter un AND dans ta condition.


If (DCount("[Date d'entrée]", "Archive dates", "[Date d'entrée]=[Formulaires]![CLIENTS+ SFormulaire]![LOCATION Sous-formulaire1]![Date d'entrée] AND nomchalet=form!location!blabla") > 0) Then 
0
Merci beaucoups
Ca marche
J'avais essayé avec and mais pas avec cette syntaxe.
Salut
0
Utilisateur anonyme
27 févr. 2006 à 21:55
Pas de mal, et bonne continuation !

0