OVH Cloud OVH Cloud

Erreur de syntaxe urgent svp...

12 réponses
Avatar
Baptiste
Bonjour,

J’ai un petit problème, pour cela je vous explique ma base

J'ai une table "Horaire" qui est relie par une relation 1 a plusieurs a une
table "Contenu Horaire". Cette derniere est relie a la table employe par une
relation plusieurs a 1. En fait, je veux creer un nouvel enregistrement
horaire correspondant a une date precise. Cette enregistrement contiendra un
sous formulaire (cont horaire). Chaque ligne du sous formulaire fera
reference a un employe. Je sais creer tout cela et ca fonctionne, mais ce que
je veux, c'est que chaque nouvel enregistrememt "horaire" contiennent deja
l'ensemble des employes avec par exemple le champ "Heure_normale" de la table
cont horaire egal a 8 pour chaque employe. Ce qui m'eviterait de
reselectionner + de 100 employes par jour...

Mon code VB pour generer un nouvel enregistrement automatiquement
correspondant a chaque ligne de la table employe en assignant par defaut une
valeur au champ "Heure_normale" ne fonctionne pas…

Voilà le code que j'ai appliqué sur l'évenement Click d'un bouton dans mon
formulaire Horaire.

Dim dbsCurrent As Database
Dim rstEmp As Recordset
Set dbsCurrent = OpenDatabase(CurrentDb.Name)
Set rstEmp = dbsCurrent.OpenRecordset("SELECT * FROM [Employé];")

Do While Not rstEmp.EOF

dbsCurrent.Execute "INSERT INTO [Cont horaire]
(Heure_normale,Ref_employé)"
VALUES (" & 8 & "," & rstEmp.Fields("Ref_employé") & ";")
rstEmp.MoveNext

Loop

Set rstEmp = Nothing
Set dbsCurrent = Nothing

Lors de l'execution, j'obtiens une erreur qui me ramène à la ligne suivante :
VALUES (" & 8 & "," & rstEmp.Fields("Ref_employé") & ";")
et plus particulièrement sur ("Ref_employé") en disant :
erreur de compilation, séparateur de liste attendu.

J'ai essayé de changer plein de trucs mais pas de solution

Voici le détail de ma base pour plus de clareté

Tables : Horaire

Ref_horaire
Date

Cont horaire

Ref_cont_horaire
Ref_employé
Ref_horaire
Heure_normale
Heure_supp

Employé

Ref_employé
Nom

Formulaire : Horaire
Sous-formulaire : Cont horaire Sous-formulaire


D'avance merci beaucoup car je ne peux m'en sortir seul...

Baptiste

2 réponses

1 2
Avatar
3stone
Salut,

"Baptiste"
Désolé...il n'y a plus d'erreur de syntaxe mais rien ne se passe...
Je crée une nouvelle fiche horaire, je clique sur mon bouton qui contient le
code pour générer automatiquement un enregistrement par employé et rien ne se
passe..


rien ne se retrouve dans la table ?

J'ai pourtant bien mes deux champs qui sont crées dans mon sous formulaire...


il sont liés aux champs de la bonne table ?


Voici à nouveau le code que j'utilise :

Private Sub Commande22_Click()
On Error GoTo Err_Commande22_Click

Dim dbsCurrent As Database
Dim rstEmp As Recordset
Set dbsCurrent = OpenDatabase(CurrentDb.Name)
Set rstEmp = dbsCurrent.OpenRecordset("SELECT * FROM [Employé];")

Do While Not rstEmp.EOF
dbsCurrent.Execute "INSERT INTO [Cont horaire] (Heure_normale,
Ref_employé) VALUES (" & 8 & "," & rstEmp.Fields("Ref_employé") & ")"
rstEmp.MoveNext
Loop
<snip>


Heu... en gros tu essaies...
- de sélectionner TOUS les employés (sans clause Where ? )
- de coller 8 dans [Heure_normale]
écrit plutôt:
Values ( 8," & rstEmp.Fields("Ref_employé") & ");"

- et la Ref_employé du recordset dans cette même table ?

Remplace dbsCurrent.Execute par:

DoCmd.RunSQL "Insert Into...

tu aura les messages d'erreurs ;-)


PS: Normalement, tu devrais avoir quelque chose comme:

Dim strSQL As String
strSQL = "Insert Into [Cont horaire] (Heure_normale,Ref_Employé) " _
& "Select valeur, ref_employé " _
& "From .... Where ..."

et sans devoir ouvrir de recordset...


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome

Avatar
Baptiste
Merci pour ta réponse mais je ne suis pas assez expérimenté pour en tirer
bonne usage, en clair que dois-je écrire comme code?!

Merci


Salut,

"Baptiste"
Désolé...il n'y a plus d'erreur de syntaxe mais rien ne se passe...
Je crée une nouvelle fiche horaire, je clique sur mon bouton qui contient le
code pour générer automatiquement un enregistrement par employé et rien ne se
passe..


rien ne se retrouve dans la table ?

J'ai pourtant bien mes deux champs qui sont crées dans mon sous formulaire...


il sont liés aux champs de la bonne table ?


Voici à nouveau le code que j'utilise :

Private Sub Commande22_Click()
On Error GoTo Err_Commande22_Click

Dim dbsCurrent As Database
Dim rstEmp As Recordset
Set dbsCurrent = OpenDatabase(CurrentDb.Name)
Set rstEmp = dbsCurrent.OpenRecordset("SELECT * FROM [Employé];")

Do While Not rstEmp.EOF
dbsCurrent.Execute "INSERT INTO [Cont horaire] (Heure_normale,
Ref_employé) VALUES (" & 8 & "," & rstEmp.Fields("Ref_employé") & ")"
rstEmp.MoveNext
Loop
<snip>


Heu... en gros tu essaies...
- de sélectionner TOUS les employés (sans clause Where ? )
- de coller 8 dans [Heure_normale]
écrit plutôt:
Values ( 8," & rstEmp.Fields("Ref_employé") & ");"

- et la Ref_employé du recordset dans cette même table ?

Remplace dbsCurrent.Execute par:

DoCmd.RunSQL "Insert Into...

tu aura les messages d'erreurs ;-)


PS: Normalement, tu devrais avoir quelque chose comme:

Dim strSQL As String
strSQL = "Insert Into [Cont horaire] (Heure_normale,Ref_Employé) " _
& "Select valeur, ref_employé " _
& "From .... Where ..."

et sans devoir ouvrir de recordset...


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome








1 2