Januar 24, 2021, 22:24:53

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Datensatzzähler pro Jahr

Begonnen von tismo, Mai 09, 2010, 19:43:42

⏪ vorheriges - nächstes ⏩

tismo

Hallo zusammen.

ich benutze Access 2002 und stehe vor folgendem Problem:

In meiner Datenbank werden alle neu angelegten Datensätze automatisch gezählt. Das Problem ist, dass dadurch sowohl die Aufträge als auch die Angebote als Datensatz gezählt werden. Letztendlich sollen aber nur die Aufträge, nicht die Angebote gezählt werden. da in den Angeboten noch Daten fehlen, die erst im Auftrag eingegeben werden können.

Wie kann kann ich mein Angebot so umwandeln, dass in die Aufträge geleitet wird und anschließend auch bei den Aufträgen gezählt wird. Meistens wird sofort ein Auftrag geschrieben und nur in den seltensten Fällen ein Angebot, welches aber später zum Auftrag wird.

im Modul habe ich folgend Anweisung:

Option Compare Database

Public Function LNr()
  Dim db As DAO.Database
  Dim rs As DAO.Recordset
  Dim Anz As Double

Set db = CurrentDb
Set rs = db.OpenRecordset("Daten")

Anz = DCount("JahresNr", "Daten", "Year(DatumErfassung) = Year(Date())")
If Anz = 0 Then
  LNr = 1
Else
  LNr = DCount("JahresNr", "Daten", "Year(DatumErfassung) = Year(Date())") + 1

End If
End Function

Aber wie gesagt, hier wird automatisch beim Erstellen eines neuen Auftrages der Datensatz gezählt. Ich hatte vor  zwei identische Formulare ( Auftrag und Angebot) über dieselbe Tabelle laufen zu lassen und im Falle eines Wechsels vom Angebot zum Auftrag über ein Textfeld (nach Aktualisierung) den Status Auftrag zu vergeben.

Ich hoffe meine Erklärung ist verständlich. ;D

MzKlMu

Mai 09, 2010, 19:55:23 #1 Letzte Bearbeitung: Mai 09, 2010, 20:00:51 von MzKlMu
Hallo,
diese 4 Zeilen sind schon mal überflüssig.
 Dim db As DAO.Database
 Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("Daten")


Und Anz ist als Long zu deklarieren. Die Anzahl kann nie eine Kommastelle haben.

Die Aufträge kannst Du auch ganz einfach zählen, wenn das Statusfeld eingebaut ist.

 Dim AnzAuftraege As Long
AnzAuftraege = DCount("JahresNr", "Daten", "Year(DatumErfassung) = Year(Date())" & " and Status = 'Auftrag'")

Ich würde auch keine 2 Formulare machen. In einem Formular setzt Du einfach den Status auf "Auftrag", wozu ein zweites Formular?
Gruß
Klaus

DF6GL

Mai 09, 2010, 20:04:15 #2 Letzte Bearbeitung: Mai 09, 2010, 20:09:01 von DF6GL
Hallo,


mhmm, nicht so wirklich....


Sind in Tabelle "Daten"  (btw: "unerklärliche" Benennung   ;)  )  die Daten sowohl eines Angebotes als auch die eines Auftrages hinterlegt?


Ist es wirklich (geschäftlich) so, dass immer alle(!) Daten eines Angebotes sich auch zu einem Auftrag "wandeln"?


Wenn ja, dann belasse es bei dieser Tabelle und erweitere um  ( wie Du schon angedeutet hast) ein Feld "Status" (oder besser vielleicht: "Dokumenttyp" oder "Kategorie" ), das den Typ der Daten beschreibt.




Sodann kannst Du durch Angabe eines weiteren Kriteriums die DAtensätze passend zählen:


Anz = DCount("JahresNr", "Daten", "Year(DatumErfassung) = Year(Date()) And Kategorie = 'Angebot'")



In Deinem Code ist das Öffnen/Verwenden eines Recordsets überflüssig.

Weiterhin sollte "Anz" vom Datentyp Long sein,    z. B. gibt es 3,7 Datensätze nicht.

Ein weiteres Form brauchst Du auch nicht.


PS: da war ich wohl etwas langsam   :o ;D :D ;) :)