Ciao a tutti.
Premesso che ho cercato ovunque una soluzione senza venirne a capo, posto questa situazione a dir poco delirante.
Sto lavorando in VBA su una form che contiene una query che deve aggiornare i campi di una tabella; sono numerosi campi di tipo diverso e la query è costruita a partire da variabili che si alimentano a seconda di cosa l'utente fa sulla form.
Il problema mi sorge sulle date, vi posto il codice completo sotto.
La prima cosa strana succede quando digito in VBA: assegnando un valore ora ad una variabile, mi cambia automaticamente il formato dell'ora, ossia: io scrivo
PlanOraIn1 = #13:00:00#
e VBA corregge in
PlanOraIn1 = #9:00:00 AM#
Non so perché e non so come modificare la cosa, ma questo mi ha ovviamente insospettito. Dopo di che, valorizzo il campo data; nella finestra immediata, la data è SEMPRE in formato "italiano", ma quando la query inserisce i dati nel database, modifica il formato e scrive in formato "inglese".
Questo però succede SOLO finché la data non è sbagliata per il formato, in quel caso il sistema AUTOMATICAMENTE (senza il mio intervento da codice) lascia, ad esempio, che il 13 giugno (13/06/2015) sia il 13/06/2015, mentre il primo giugno (01/06/2015) diventa 6 gennaio (06/01/2015).
Giacché il campo "data", manco a farlo apposta, è fondamentale per la mia pianificazione, come posso ovviare? DI seguito il codice. Le query interessate sono le stringhe "StringaCreaPlan".
Grazie a chi ha pazienza
DoCmd.OpenForm "Attendere", acNormal, , , acFormReadOnly
Dim ToPlanDB As dao.Database
Dim ToPlanRS As dao.Recordset
Dim ToPlanST As String
Dim NumGiorni, NumTurni
Dim PlanDateIn, PlanDateEnd, PlanOraIn1, PlanOraIn2, PlanOraEnd1, PlanOraEnd2 As Date
Dim PlanZone, PlanAct, PlanWeekDay, PlanTurno1, PlanTurno2, PlanMate As String
Dim PlanQuant As Integer
NumGiorni = DataEndIst - DataStartIst + 1
If Me.SelezioneTurni = 1 Then
NumTurni = NumGiorni
PlanOraIn1 = #9:00:00 AM#
PlanOraEnd1 = #1:00:00 PM#
PlanTurno1 = "Mattina"
End If
If Me.SelezioneTurni = 2 Then
NumTurni = NumGiorni
PlanOraIn1 = #2:00:00 PM#
PlanOraEnd1 = #6:00:00 PM#
PlanTurno1 = "Pomeriggio"
End If
If Me.SelezioneTurni = 3 Then
PlanOraIn1 = #9:00:00 AM#
PlanOraEnd1 = #6:00:00 PM#
NumTurni = NumGiorni
PlanTurno1 = "Giornata intera"
End If
If Me.SelezioneTurni = 4 Then
NumTurni = NumGiorni * 2
PlanOraIn1 = #9:00:00 AM#
PlanOraEnd1 = #1:00:00 PM#
PlanOraIn2 = #2:00:00 PM#
PlanOraEnd2 = #6:00:00 PM#
PlanTurno1 = "Mattina"
PlanTurno2 = "Pomeriggio"
End If
i = 1
Dim DataPlan
DataPlan = Me.DataStartIst
PlanWeekDay = StrConv(WeekdayName((Weekday(DataPlan, vbMonday)), False, vbMonday), vbProperCase)
Dim StringaCreaPlan, StringaCreaPlan1, StringaCreaPlan2 As String
DoCmd.SetWarnings (False)
For i = 1 To NumTurni
If NumTurni = NumGiorni Then
PlanZone = DLookup("Zona", "Zonecontrattosel", "IDContratto = " & Me.IDContratto)
PlanAct = "Affissione"
PlanMate = "Locandine"
StringaCreaPlan = "INSERT INTO [Planning] ([IDContratto], [IDIstanza], [Data], [GiornoSettimana], [Turno], [InizioTurno], " & _
"[FineTurno], [Attivita], [Zona], [Materiale], [Quantita]) VALUES " & _
"(" & Me.IDContratto & ", " & Me.IdIstanza & ", #" & DataPlan & "#, '" & PlanWeekDay & _
"', '" & PlanTurno1 & "', #" & PlanOraIn1 & "#, #" & PlanOraEnd1 & "#, '" & PlanAct & _
"', '" & PlanZone & "', '" & PlanMate & "', 5);"
DoCmd.RunSQL (StringaCreaPlan)
DataPlan = DataPlan + 1
PlanWeekDay = StrConv(WeekdayName((Weekday(DataPlan, vbMonday)), False, vbMonday), vbProperCase)
Else
PlanZone = DLookup("Zona", "Zonecontrattosel", "IDContratto = " & Me.IDContratto)
PlanAct = "Affissione"
PlanMate = "Locandine"
StringaCreaPlan1 = "INSERT INTO [Planning] ([IDContratto], [IDIstanza], [Data], [GiornoSettimana], [Turno], [InizioTurno], " & _
"[FineTurno], [Attivita], [Zona], [Materiale], [Quantita]) VALUES " & _
"(" & Me.IDContratto & ", " & Me.IdIstanza & ", #" & DataPlan & "#, '" & PlanWeekDay & _
"', '" & PlanTurno1 & "', #" & PlanOraIn1 & "#, #" & PlanOraEnd1 & "#, '" & PlanAct & _
"', '" & PlanZone & "', '" & PlanMate & "', 5);"
StringaCreaPlan2 = "INSERT INTO [Planning] ([IDContratto], [IDIstanza], [Data], [GiornoSettimana], [Turno], [InizioTurno], " & _
"[FineTurno], [Attivita], [Zona], [Materiale], [Quantita]) VALUES " & _
"(" & Me.IDContratto & ", " & Me.IdIstanza & ", #" & DataPlan & "#, '" & PlanWeekDay & _
"', '" & PlanTurno2 & "', #" & PlanOraIn2 & "#, #" & PlanOraEnd2 & "#, '" & PlanAct & _
"', '" & PlanZone & "', '" & PlanMate & "', 5);"
DoCmd.RunSQL (StringaCreaPlan1)
DoCmd.RunSQL (StringaCreaPlan2)
DataPlan = DataPlan + 1
PlanWeekDay = StrConv(WeekdayName((Weekday(DataPlan, vbMonday)), False, vbMonday), vbProperCase)
End If
Next i