Hallo, mir fällt momentan keine gute Lösung ein wie ich folgendes lösen kann....
Ich habe eine Eingabemaske wo das Datum,Name, eingeteiltes Fahrzeug, Dienstbeginn und das Dienstende ausgewählt wird. Das wird in eine Tabelle gespeichert.
So nun kann es vorkommen das Person 1 Fahrzeug 1 von 08:00 - 10:00 besetzt und Person 2 das Fahrzeug 1 von 10:00 - 19:00
jetzt hätte ich gerne, dass in meiner Abfrage oder Tabelle ein Feld erzeugt wird, wo eingetragen wird welche Person das Fahrzeug zuerst besetzt.
Bsp:
Datum Fahrzeug Name von bis Std neues Feld wo eingetragen wird wer das zuerst besetzt.
01.08.2011 Auto1 Meier 08:00 10:00 2 1
01.08.2011 Auto1 Schulz 10:00 19:00 9 2
01.08.2011 Auto2 Müller 08:00 19:00 11 1
01.08.2011 Auto3 Kohl 08:00 19:00 11 1
Die Abfrage gibt es schon wo alle Auflistungen wie oben zu sehen sind, erstellt werden, nur OHNE das neue Feld wo jetzt 1 und 2 steht. Das muss noch erzeugt werden, mir fällt da nur keine passende Formel für ein.
Oder geht das nur über VBA?
Liebe Grüße
Hallo,
ein Feld mit Zeit ist unglücklich.
Mache ein Feld Anfang und ein Feld Ende.
Dann kannst du nicht nur sauber sortieren (Datum, Anfang) sondern auch noch
auswerten wie lange jemand das Fahrzeug benutzt hat.
Gruß
Johann
ja sorry hab ich falsch geschrieben.
hab ein Feld [von] und ein Feld [bis]. Ausgewertet wie lange Person X das Fahrzeug besetzt hat, habe ich auch drin. Nur halt der für mich wichtige Punkt nun, nicht ob er als erstes oder erst als zweites das Fahrzeug besetzt.
Da ich Textfelder durch die Daten der Abfrage befülle, bringt mir sortieren glaube ich nichts...
HAllo,
was hast Du denn damit vor?
Du siehst doch anhand der "Von"-Zeit (in Verbindung mit dem Datumsfeld, was an sich in dieser Konstellation als zwei Felder eher unglücklich ist) und dem entspr. Fahrzeug, wer der "erste" Fahrer ist.
Hallo,
dann bringt dir die Sortierung doch was du willst (sortiere nach Datum, nach Auto und danach nach Von)
Tag ist zusammen, Auto ist zusammen und die kleinste Zeit von, also der Erste.
Gruß
Johann
Hallo,
Datum und Auto müssen schon zwei Felder sein weil innerhalb eines Datums alle Autos zusammenstehen müssen.
Bei einen Feld Datum und Zeit würde das nicht gehen.
Gruß
Johann
???
ja wenn ich drauf schaue sehe ich das, jetzt kommt aber das ABER
Ich befülle über VBA automatisch Textfelder mit den Daten der Abfrage und nun muss Access ja wissen wer in Textfeld1 und wer in Textfeld2 geschrieben werden muss.
Textfeld 1 soll in diesem Fall den Mitarbeiter beinhalten, der zuerst auf dem Fahrzeug eingesetzt ist und Textfeld 2 halt den Mitarbeiter, der danach das Fahrzeug besetzt.
Fahrzeug 1
08:00 - 10:00 10:00 - 19:00
[Mitarbeiter 1] [Mitarbeiter 2] Und nun muss ich den VBA Code ja so anpassen, dass man erkennen kann, wer zuerst das Fahrzeug besetzt.
Hoffe ist etwas klar geworden.
Hallo,
nein ;)
Klar ist , was Du machen willst, aber nicht, wofür das gut sein soll.
Welcher Fahrer der Erste ist, braucht nicht gespeichert werden, das ergibt sich aus der Tatsache der "frühen" Zeit.
"Textfeld 1 soll in diesem Fall den Mitarbeiter beinhalten, der zuerst auf dem Fahrzeug eingesetzt ist und Textfeld 2 halt den Mitarbeiter, der danach das Fahrzeug besetzt"
Sowas geht schief, wenn das zwei verschiedene Form-Textfelder im Detailbereich des Form sind. Zeige besser die Fahrer in ihrer zeitlichen Reihenfolge in einem Listenfeld oder Unterform an.
Erklär mal, was mit diesem Formular gemacht werden soll und poste den VBA-Code, der dazu gehört.
dauert nen moment :)
Was dauert?
Die Schockverarbeitung ? :D ;D :D ;D :D ;D ;) ;) ;)
Also das erste Bild ist die Maske wo der Dienstplan erstellt wird.
Das zweite Bild wird ausgedruckt und aufgehangen.
Dort sieht man alle Textfelder, die Zeiten dabei sind noch aus der Vorversion, also nicht beachten.
Nach der Eingabe der Daten in der Maske, werden die Daten in eine Tabelle eingetragen und über eine Abfrage so abgefragt, dass man die richtigen Bezeichnungen für die Textfelder halt.
Nun wird über einer DLookup Funktion nach verschiedenen Schlüsselelementen gesucht und dann der Name dem Textfeld zugeordnet.
Form_frmDienstplanAusdruck.RTW1_D.Value = DLookup("[Nachname]", "qryDienstplan", "[Fahrzeug] = 'RTW 1' and [Posten] = 'Fahrer'")
jetzt muss ich aber noch ein neues Schlüsselelement haben, wo drin steht ob er das Fahrzeug als ersten oder zweites besetzt.
So eine DLookup Funktion hab ich für jedes Textfeld.
jetzt war das wohl ein Schock für dich^^
wohl schlimmer als erwartet HA
Hallo,
nee, kein Schock für mich... ;)
Wenn das Formular ungebunden ist, was ich stark vermute, könnte man mittels eines Recordsets und SQL-Strings die entspr. Datensätze filtern, nach Datum plus Von-Uhrzeit sortieren und mittels Schleife die Von-Zeiten irgendwelchen Steuerelementen zuweisen.
Die Position dieser "irgendwelchen Steuerelementen" gibt die Reihenfolge (Erster, Zweiter,.. ) sichtbar an.
Oder wie vorher gesagt, gleich ein Listenfeld mit Zuweisung eines passenden SQL-Strings , das dann die Reiehnfolge anzeigt.
Hi,
also das mit dem Listenfeld hört sich ja ansich einfacher an, nur habe ich da nicht so die Formatierungsmöglichkeiten.
Demnach müsste das Listenfeld ja nicht untereinander die Datensätze anzeigen, sondern horizontal nebeneinander, das geht glaube ich nicht, oder?!
Mit nem RecordSet habe ich auch schon überlegt, da bin ich leider nicht so ganz fit drin, habe in meinem Code zwar schon zwei drin, aber da musste ich auch schon viel Hilfe für in Anspruch nehmen.
Wie z.B. könnte man alle Steuerelemente durchlaufen, wenn sie total unterschiedliche Namen haben, oder müsste ich sie umbenennen in 1,2.... und dann den Counter immer +1?
Und dann müsste ja auch noch jedem Textfeld in der Schleife der passende Datensatz zugeordnet werden. z.B. Textfeld1 muss RTW1 Fahrer sein, Textfeld2 RTW2 Fahrer etc... da weiß ich auch nicht wie das geht.
Das auch immer alles so kompliziert sein muss, bis mans kann....
Hallo,
warum muss das nun nebeneinander stehen und nicht untereinander? Das ist doch Deine Designvorstellung.
"da bin ich leider nicht so ganz fit drin" dann musst Du üben ;)
"oder müsste ich sie umbenennen in 1,2.... und dann den Counter immer +1?" genau so...
" z.B. Textfeld1 muss RTW1 Fahrer sein, Textfeld2 RTW2 "
Beispielhaft:
Dim rs as Dao.Recordset, i as Long
Set rs=CurrentDB.Openrecordset(" select Datum, Fahrzeug, [Name], von, bis, Std From DeineAbfrageTabelle where Fahrzeug='Auto1' and Datum = #08/01/2011# order by Von" , dbopensnapshot)
i=0
Do until rs.Eof
i=i+1
Me("Textfeld" & i) = rs![Name]
rs.Movenext
Next
rs.close:set rs=nothing
Huhu,
verstehe ich das nun richtig, das ich für jedes Fahrzeug einen neuen RecordSet machen müsste?
Die Sortierung geht damit ja, wie du gezeigt hast, sehr gut.
Probiere ich nachher mal aus :)
PS: warum ist im RecordSet eigentlich nur der Name in [] und die restlichen Felder nicht?
Hallo,
"für jedes Fahrzeug einen neuen RecordSet "
nein, nicht unbedingt. Du kannst auch in einem Recordset mit z. B. Findfirst nach dem(n) Fahrzeug(gruppen) suchen.
"nur der Name in [] und die restlichen Felder nicht?"
weil es sich bei "Name" um ein reserviertes Wort handelt und dieses Feld, das Du selber erzeugt und so genannt hast, UNBEDINGT in Eckklammern stehen muss.
Du kannst ja mal das einfügen:
Msgbox rs.Name
habs nun so gelöst. In der Abfrage auf der ich zugreife, erst nach der "von" Zeit sortiert und dann nach den "Fahrzeugen" per SQL.
Private Sub Vorschau_Click()
Dim DB As DAO.Database
Dim rs As DAO.Recordset
Dim qdf As DAO.QueryDef
Dim i As Integer
Dim RTW1D As Integer
Dim RTW1L As Integer
DoCmd.OpenForm "frmDienstplanAusdruck"
Set DB = CurrentDb
Set qdf = DB.QueryDefs("qryDienstplan")
qdf.Parameters(0) = Me!Datum
RTW1D = 1
RTW1L = 1
Set rs = qdf.OpenRecordset(dbOpenSnapshot)
With rs 'with vereinfacht die Schreibweise. direkt .Befehl
Do While Not .EOF
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If .Fields("Fahrzeug") = "RTW 1" And .Fields("Posten") = "Fahrer" Then
Form_frmDienstplanAusdruck("RTW1_D" & RTW1D).Value = .Fields("Nachname")
RTW1D = RTW1D + 1 Gibt hier genau zwei Felder RTW1D1 und RTW1D2, durch sie Sortierung beginnt er automatisch mit dem, der zuerst den Wagen besetzt
ElseIf .Fields("Fahrzeug") = "RTW 1" And .Fields("Posten") = "Führer" Then
Form_frmDienstplanAusdruck("RTW1_L" & RTW1L).Value = .Fields("Nachname")
RTW1L = RTW1L + 1
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End If
.MoveNext
Loop
.Close: Set rs = Nothing
End With
qdf.Close: Set qdf = Nothing
Set DB = Nothing
End Sub
irgendeine Verbesserung, bevor ich das nun für ALLE Textfelder mache :D