Requête SQL à partir du VBA via recordset
Bonjour,
Je m'adresse enfin directement à ce forum, car pour une fois, je n'arrive pas à trouver mon erreur avec les différentes discussion que j'ai lues. Je dois sûrement louper quelque chose de gros.
Je souhaite remplir une table via VBA grâce à un formulaire. Mes requêtes fonctionnent (quand je l'ai copie-colle dans la fenêtre SQL ACCESS, elles me renvoient ce que je veux). Mais soit je n'arrive pas à me servir correctement du recordset, soit... Je sais pas : Bref, voici le code.
L'erreur apparaît sur le rsTDataAbs.Update me disant que je n'ai pas de valeur sur mon champ TDataAbs.TShiftName.
C'est bien le cas, et je n'ai pas de valeur non plus pour les autres requêtes ouvertes avec le "openrecordset".
Le problème est donc sur la fin du code, je pense. Au niveau de ce fameux openrecordet
Je pensais au début que ma requête était mauvaise, mais après l'avoir testé directement dans ACCESS, je n'ai pas l'impression que cela vienne de là.
Petites précisions :
Le but est de saisir des congés.
Chaque opérateur est dans une équipe, chaque équipe a un planning différent avec des temps de travail qui peuvent être différents
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
Private Sub Validationconges_Click()
Dim rsTDataAbs As DAO.Recordset
Dim LgNbLignes As Long
Dim RequeteJrTravailleEquipe As String
Dim Postedujourtravaille As String
Dim Duration As String
Dim Shop1 As String
Dim i As Integer
Dim CodeOperateur As String
Set db = CurrentDb()
Set rsTDataAbs = db.OpenRecordset("TDataAbs", dbOpenDynaset)
RequeteJrTravailleEquipe = "SELECT TShiftCalendar.TShiftCalDate As TShiftCalDate FROM TShiftCalendar, TOpTeam WHERE (((TOpTeam.TOPCode)=" & "'" & Me.TOpCode & "'" & ") AND ((TOpTeam.TTeamId)=[TShiftCalendar].[TTeamId]) AND ((TOpTeam.TOPTEamStartDate)<TShiftCalendar.TShiftCalDate) AND ((TOpTeam.TOPTeamEndDate)>TShiftCalendar.TShiftCalDate));"
Set rcs = db.OpenRecordset(RequeteJrTravailleEquipe)
With rcs
If Not .EOF Then
'récupération du nombre d'enregistrements https://www.developpez.net/forums/d446953/logiciels/microsoft-office/access/vba-access/affecter-resultat-d-requete-variable/
.MoveLast
.MoveFirst
LgNbLignes = .RecordCount
JrTravailleEquipedate = .GetRows(LgNbLignes)
End If
End With
' parcours de chaque ligne et entrer dans la boucle if pour celles correspondants à un jour travaillé par l'équipe dans la période
For i = 0 To LgNbLignes - 1
If JrTravailleEquipedate(0, i) <= Me.DateFin And JrTravailleEquipedate(0, i) >= Me.DateDebut Then
JrTravailleEquipe = CStr(JrTravailleEquipedate(0, i))
CodeOp = Me.TOpCode
Postedujourtravaille = "SELECT TShiftCalendar.TShiftName FROM TShiftCalendar, TOPTeam WHERE (((TOPTeam.TOPCode)=" & "'" & CodeOp & "'" & ") AND ((TOPTeam.TTeamId)=[TShiftCalendar].[TTeamId]) AND ((TShiftCalendar.TShiftCalDate)=" & "#" & JrTravailleEquipe & "#" & "));"
Duration = "SELECT TShiftCalendar.TShiftCalOpenTime FROM TShiftCalendar, TOPTeam WHERE TOPTeam.TOPCode = " & "'" & CodeOp & "'" & " AND TOpTeam.TTeamId= TShiftCalendar.TTeamId AND TShiftCalendar.TShiftCalDate=" & "#" & JrTravailleEquipe & "#" & ";"
Shop1 = "SELECT TShiftCalendar.TShop1Name FROM TShiftCalendar, TOPTeam WHERE TOPTeam.TOPCode = " & "'" & CodeOp & "'" & " AND TOpTeam.TTeamId= TShiftCalendar.TTeamId AND TShiftCalendar.TShiftCalDate=" & "#" & JrTravailleEquipe & "#" & ";"
rsTDataAbs.AddNew
rsTDataAbs![TDataAbsDate] = JrTravailleEquipedate(0, i)
rsTDataAbs![TOpCode] = Me.TOpCode
rsTDataAbs![TShiftName] = CurrentDb.OpenRecordset(Postedujourtravaille, dbOpenSnapshot)
rsTDataAbs![TShop1Name] = CurrentDb.OpenRecordset(Shop1, dbOpenSnapshot)
rsTDataAbs![TAbsCode] = Me.TAbsCode
rsTDataAbs![TDataAbsDuration] = CurrentDb.OpenRecordset(Duration, dbOpenSnapshot)
rsTDataAbs![TDataAbsComment] = Me.TDataAbsComment
rsTDataAbs![TDataAbsLocked] = False
rsTDataAbs.Update
End If
Next
MsgBox "Période de congés saisie"
rcs.Close
rsTDataAbs.Close
Set rcs = Nothing
Set rsTDataAbs = Nothing
Erase JrTravailleEquipe
End Sub |
Merci d'avance pour votre aide :)