Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Abfrage, ob im Zeitraum genügend Plätze vorhanden sind

Begonnen von X-Ray1978, März 30, 2012, 11:08:22

⏪ vorheriges - nächstes ⏩

X-Ray1978

Hallo liebe Access-O-Manias,

ich habe eine Access97 Datenbank, in der ich eine Gerätebelegung (Testgeräte)
pflege. Über den Gerätenamen kann ich filtern und sehen wieviele Plätze frei sind.

Die Anzahl der Plätze ist bei dem Gerät hinterlegt.
Die Belegung wird mit Startdatum, Enddatum und Anzahl vollzogen.
Über eine Datumsauswahl, wird abgefragt, welche "Vorgänge" zu diesem
Zeitraum da sind und die Anzahl summiert.

Jetzt möchte ich eine Routine einfügen, die mir beim Einpflegen der Geräte
angibt, ob in diesem Zeitraum auch die Plätze zur Verfügung stehen, da
weitere Vorgänge in der Zukunft bereits eingepflegt werden können.

Die tägliche Abfrage funktioniert ja. Wie bekomme ich es hin,
dass ich dem Zeug jetzt sage, schaue zwischen Start- und Enddatum täglich
und falls dort die Anzahl der freien Plätze kleiner null wird, gib mir eine
Meldung "...kannst Du vergessen; VOLL!"  raus.  :-\

Gruß
Christian


DF6GL

Hallo,


unter "Testgeräte" kann ich mir ja was Konkretes vorstellen,  was aber "Plätze" sein sollen und warum diese Plätze (vielleicht sind das die Einsatzorte/Arbeitsplätze  für die Testgeräte..) bei den Testgeräten stehen, kann ich nicht nachvollziehen.


"beim Einpflegen der Geräte angibt, ob in diesem Zeitraum auch die Plätze zur Verfügung stehen"

Einpflegen:  Neues Testgerät erfassen ???

Plätze zur Verfügung :  Siehe oben...  ???  Ändern sich denn die Plätze?




"dass ich dem Zeug jetzt sage "   welchem "Zeug" ?  "(Zaum-)Zeug" kenne ich bei Pferden z. B. ;-)



Wie auch immer, stell bitte das Grundkonzept und die Aufgabe einigermaßen verständlich der DB vor, einschliesslich der genauen und vollständigen Beschreibung der Tabellen- und Feldnamen sowie den Beziehungen zwischen den Tabellen...


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

X-Ray1978

Hallo,

sorry, die Infos waren wirklich ein wenig knapp.

Nun ausführlicher:
Es geht darum Testgeräte zu belegen. Die Geräte haben eine
bestimmt Anzahl an Plätzen, die vergeben werden können.

z.B. (Testgerät 1 = 50 Plätze, Testgerät 2 = 20 Plätze, etc.)

Dafür gibt es die Tabelle "Geräte" mit: ID-Kammer; Gerätebezeichnung,
Plaetze (Anzahl der Plätze im Testgerät)

Zusätzlich gibt es noch die Tabelle "Belegung" dort gibt es die Felder
ID-Belegung; Kammer (Referenz auf Tabelle "Geräte") Vorgang (Textfeld/Bezeichnung)
Startdatum; Enddatum und Anz (Anzahl der Proben)

Um die Plätze zu planen, wird in einem Formular das Gerät ausgewählt und in einem
Unterformular für das gewählte Gerät geplant.

Über einen Kalender kann ich einen bestimmten Tag auswählen, im
Unterformular wird gefilter, welche Vorgänge vom Start- und Enddatum her
an diesem Tag laufen.

Ein Textfeld summiert mir dabei die Anzahl der Proben auf. Diese ziehe ich von Plaetze
in der Tabelle "Geräte" ab und habe somit meine freien Plätze im Gerät.

Da jedoch Vorgänge schon voraus geplant werden, kann es vorkommen, dass sich
Zeiten überschneiden.
Daher muss ich für das einplanen jeweils tagweise überprüfen, ob genügend Plätze frei sind.
Bis jetzt habe ich jeden Tag angewählt und händisch geschaut, ob es passt.

Ich habe versucht es mit einer Do While Schleife zu machen, es klappt aber noch nicht so ganz.

Hier mal der Code:


Private Sub Befehl43_Click()
Dim dDate As Date
Dim DSUM As Integer
Dim strFilter As String
Dim Summe1 As String
dDate = Me!Tagw  'Tagw ist der ausgewählte Tag über den Kalender'
Me!KonfDat = ""
Do While Me!Tagw < Me!Enddatum 'Me!Enddatum ist das Enddatum für den Vorgang der überprüft werden soll

        If Not IsNull(Me!Tagw) Then    'Filtern nach dem Tag start
            strFilter = "Start <= " & Format(Me!Tagw, "\#yyyy-mm-dd\#") & " AND Ende >= " & Format(Me!Tagw, "\#yyyy-mm-dd\#")
            Me.Filter = strFilter
            Me.FilterOn = True
        End If                                               'Filtern nach dem Tag ende
        Summe1 = Me!Text14.Value  ' Versuch die Anzahl der belegten Plätze aus dem Textfeld zu lesen; klappt aber nicht'
        Me!DSUME = Summe1  'War ein Kontrollfeld, welches auf dem Formular ist, um zu überprüfen, ob er die Zahl aus dem          Textfeld übernimmt
         DSUM = Summe1 + Me!Anzneu   'Me!Anzneu ist die Probenzahl für den neuen Vorgang soll mit dem aktuellen Stand addiert werden
            If DSUM > Me!Text48 Then ' Me!Text48 ist die Anzahl der Plätze, die das Gerät zur Verfügung hat.
            Me!KonfDat = "Am: " & Me!Tagw & " sind zuwenig Plätze frei" 'soll bei einer Anzahl größer als die Anzahl der Plätze eine Meldung geben, dass es an dem Datum nicht passt
            Exit Do
            End If
            If DSUM < Me!Text48 Then
            Me!KonfDat = "Passt !!"
            Me!Tagw = Me!Tagw + 1 'einen Tag weiter zählen
               
            End If
                               
Loop
Me!Tagw = dDate
End Sub



bin jetzt selber ein wenig konfus. Ich hoffe ihr blickt da durch.
Bei mir hackt es zur Zeit, wie ich aus dem Textfeld, welches mir die Anzahl der Proben aufsummiert
den Wert auslese um diesen zu addieren.

Gruß
Christian


... vielen Dank für die Hilfe


X-Ray1978

So...ich habs.

Ich habe es über RecordsetClone gemacht und einzeln summiert.
Jetzt geht es  ;D ;D ;D

Hier der Code


Dim dDate As Date
Dim DSUM1 As Integer
Dim DSUM As Integer
Dim strFilter As String
Dim Summe As Integer
Dim Rst As DAO.Recordset
Dim MeineSumme As Long
dDate = Me!Tagw
Me!KonfDat = ""
Do While Me!Tagw < Me!Enddatum

        If Not IsNull(Me!Tagw) Then
            strFilter = "Start <= " & Format(Me!Tagw, "\#yyyy-mm-dd\#") & " AND Ende >= " & Format(Me!Tagw, "\#yyyy-mm-dd\#")
            Me.Filter = strFilter
            Me.FilterOn = True
        End If
       
       
             MeineSumme = 0
             Set Rst = Me.RecordsetClone
              Rst.Filter = Me.Filter
             
                With Rst
                  .MoveFirst
                     Do While Not .EOF
                    MeineSumme = MeineSumme + ![Anz]
                    .MoveNext
                     Loop
                    End With
                          DSUM1 = MeineSumme + Me!Anzneu
                          DSUMEs = DSUM1
            If DSUM1 > Me!Text48 Then
            Me!KonfDat = "Am: " & Me!Tagw & " sind zuwenig Plätze frei"
            Exit Do
            End If
            If DSUM1 <= Me!Text48 Then
            Me!KonfDat = "Passt !!"
            Me!Tagw = Me!Tagw + 1
             
            End If
                               
Loop
Me!Tagw = dDate


Vielleicht ein wenig unübersichtlich...aber funktioniert.

Gruß
Christian