collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 56
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 1

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13953
  • stats Beiträge insgesamt: 66364
  • stats Themen insgesamt: 8942
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Wert eines Abfragefeldes in einem Modul verwenden  (Gelesen 4231 mal)

Offline 69bruno

  • Heimwerker
  • Access-Profi
  • **
  • Beiträge: 262
Wert eines Abfragefeldes in einem Modul verwenden
« am: März 02, 2012, 14:20:12 »
Hallo,

ich habe eine Abfrage mit folgenden Feldern:

Nachname/von/bis/Mo/Di/Mi/Do/Fr

Am Ende der Abfrage soll ein berechnetes Feld entstehen. Dazu habe ich ein Modul, welches die Sollarbeitstage zwischen zwei Datumswerten berechnet. Dieses Modul muss aber wissen, ob derjenige Montags, dienstags,.... tatsächlich arbeitet.

Ich baue also in der letzten Spalte eine Funktion auf, die dann wie folgt aufgerufen wird:

Ausdr1: AnzWerktagesoll([beginn];[ende];5;falsch;falsch;wahr.....)

Die 5 steht für 5-Tagewoche und die wahr/falsch für feiertage.

Jetzt müsste in dem Modul geprüft werden, ob zB das Abfragefeld "Mo" true oder false ist.
Meine Eingabe:

"If Abfrage!Solltage!Mo = true then"

klappt nicht. Verschiedenste Eingabemethoden führen nicht zum erfolg, höchstens zur Fehlermeldung "Objekt erforderlich". Mir ist klar, der Verweis muss anders eingegeben werden, aber ich krieg nicht raus, wie.......
 :-\
Wäre für Tipps dankbar

If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If
 

Offline Bitsqueezer

  • Newbie
  • Beiträge: 30
    • Bitsqueezers Access Downloads
Re: Wert eines Abfragefeldes in einem Modul verwenden
« Antwort #1 am: März 02, 2012, 14:51:57 »
Hallo,

wenn ich das jetzt richtig verstanden habe, rufst Du innerhalb der Abfrage die Funktion "AnzWerktagesoll" auf? In dem Fall bekommt VBA von einer Abfrage gar nichts mit, es ist einfach eine Funktion, die Parameter entgegennimmt und deren Inhalt auswertet. Du müßtest also aufgrund der ungünstigen Tabellenstruktur für jede Tagesspalte einen Wert als Parameter an die Funktion übergeben und Deine Funktion muß dann jeden Tageswert entsprechend prüfen.

Gruß

Christian
 

Offline 69bruno

  • Heimwerker
  • Access-Profi
  • **
  • Beiträge: 262
Re: Wert eines Abfragefeldes in einem Modul verwenden
« Antwort #2 am: März 02, 2012, 15:04:22 »
Hallo Bitsqueezer

Ich habe das gerade mal mit dem Montag ausprobiert und siehe da, es geht. Die ungünstige Tabellenstruktur ist in Wirklichkeit noch viel ungünstiger, weil sie Felder für Mo/Di/Mi.....ungerader und Mo/Di/Mi.....gerader Wochen enthält.
Ich muss also 10 Parameterwerte beim Funtionsaufruf mitliefern.
Blöd, aber es gibt eben Modelle, wo jemand nur an ungeraden Montagen nicht arbeitet. Und da ich ja überprüfen muss, ob einer der geraden Montage zufälligerweise noch ein Feiertag ist, muss ich eben die Information für jeden noch so geliebten Tag übernehmen.......

Aber Danke für die Lösung......
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If
 

Offline Bitsqueezer

  • Newbie
  • Beiträge: 30
    • Bitsqueezers Access Downloads
Re: Wert eines Abfragefeldes in einem Modul verwenden
« Antwort #3 am: März 02, 2012, 15:36:15 »
Hallo,

nicht wirklich. Normalerweise erstellt man sowas zeilenorientiert, also für jeden Tag eine Zeile, dann gibt es auch keinen Parameterwust.

Gruß

Christian
 

Offline 69bruno

  • Heimwerker
  • Access-Profi
  • **
  • Beiträge: 262
Re: Wert eines Abfragefeldes in einem Modul verwenden
« Antwort #4 am: März 05, 2012, 14:43:12 »
 :o Und was ist mit redundanten Daten ?

Ich hätte ja dann bei 10 Zeilen 8 mal Namen und Beginn/Ende-Daten mit gleichem Inhalt..........ist es da nicht besser, ne Parameterwurst zu haben als vollgepackte Tabellen ??

Und extra dafür ein Unterdatenblatt zu erstellen mit einer Beziehung scheint mir zu aufwä(e)ndig, Beziehungskisten sind kompliziert  :D

Ne, mal im Ernst, gibt es Performancegründe, die dafür sprechen, eher Zeilenorientiert vorzugehen ??
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If
 

Offline Bitsqueezer

  • Newbie
  • Beiträge: 30
    • Bitsqueezers Access Downloads
Re: Wert eines Abfragefeldes in einem Modul verwenden
« Antwort #5 am: März 05, 2012, 15:28:41 »
Hallo,

eine Datenbank soll ja gerade über Beziehungen helfen, Redundanzen zu vermeiden. Selbstverständlich gehört in so eine Tabelle nicht xmal der Name hinein, das wäre in der Tat redundant, sondern man verwendet eine Tabelle mit Mitarbeiterdaten wie Personalnummer, Name, Vorname, usw. und eine Tabelle Arbeitszeiten, in die nur die ID der Mitarbeitertabelle hineinkommt und die dann für jedes Datum (!, nicht Wochentag) eine Von-Bis-Zeit, oder noch komprimierter ein Datum/Zeitfeld Von und ein Datum/Zeitfeld Bis. Im Formular bringt man dann alles wieder zusammen, dort wird aus der ID über die Mitarbeitertabelle dann wieder Name des Mitarbeiters (z.B. in einer zweispaltigen Combobox, die aus ID und Name besteht) sowie eine Auswahl für das Datum und die Eingabe für Von/Bis-Werte, die man am Ende der Eingabe dann in die entsprechenden Felder transferiert.
Excel-Denke hat in einer Datenbank nichts zu suchen. Eine Datenbank ist grundsätzlich zeilenorientiert optimiert und die Tabellenstruktur im Hintergrund hat nichts mit der Anzeige/Eingabe in Formularen zu tun, es ist Sache des Programmierers, die Daten so auszugeben, daß der User etwas damit anfangen kann. Eine ordentlich aufgebaute Datenbank wird von Beziehungen nur so strotzen und IDs ohne Ende miteinander verknüpfen, die kein Mensch in der Lage wäre, adäquat direkt einzugeben, das muß man auch nicht, das erledigt schon die Datenbank.

Gruß

Christian
 

Offline 69bruno

  • Heimwerker
  • Access-Profi
  • **
  • Beiträge: 262
Re: Wert eines Abfragefeldes in einem Modul verwenden
« Antwort #6 am: März 05, 2012, 15:35:06 »
Jojo, das tut sie schon......etwa 20 Tabellen mit Beziehungen. Die Arbeitstage wäre dann die letzte Stufe gewesen, vielleicht habe ich zu früh aufgehört.  8)

Das von bis ist übrigens keine Zeit, sondern ein Datum, z. B. vom 1.1. bis x.x. hat die Person an allen Tagen/betimmten Tagen in der Woche gearbeitet, vom x.x. bis y.y. hat die Person wiederum an anderen Tagen gearbeitet..... usw.

Werden also pro Person höchstens 2 Wechsel im Jahr sein, daher hatte ich es nicht weiter runtergebrochen.
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23320
Re: Wert eines Abfragefeldes in einem Modul verwenden
« Antwort #7 am: März 05, 2012, 15:39:14 »
Hallo,


als Lösungs-Vorschlag zur anfänglichen Frage (hinter einem Button "btnBearbeiten" im Formular "Verfahrensformular"):
Private Sub btnBearbeiten_Click()
Dim db As Dao.Database, rs As Dao.Recordset, lngRang As Long
Set db = CurrentDb

Set rs = db.OpenRecordset("select Rang, Kennziffer from [todo-Tabelle] order by Rang", dbOpenDynaset)
rs.FindFirst "[Kennziffer] = '" & Me!Verfahrensnummer & "'"
If Not rs.NoMatch Then
lngRang = rs(0)
rs.Delete
rs.MoveNext

Do Until rs.EOF
rs.Edit
rs(0) = rs(0) - 1
rs.Update
rs.MoveNext
Loop
 
End If


rs.Close: Set rs = Nothing: Set db = Nothing


End Sub

Offline 69bruno

  • Heimwerker
  • Access-Profi
  • **
  • Beiträge: 262
Re: Wert eines Abfragefeldes in einem Modul verwenden
« Antwort #8 am: März 05, 2012, 15:42:18 »
Wow danke, zwar in einem anderen Thread, aber soooooooo habe ich mir das vorgestellt und habe es nicht hinbekommen..... :D

Super!
« Letzte Änderung: März 05, 2012, 15:49:14 von 69bruno »
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If
 

Offline Bitsqueezer

  • Newbie
  • Beiträge: 30
    • Bitsqueezers Access Downloads
Re: Wert eines Abfragefeldes in einem Modul verwenden
« Antwort #9 am: März 05, 2012, 15:50:28 »
Hallo,

ich verstehe nur nicht, was das ganze bringen soll. Wenn man Arbeitstage erfaßt, an denen ein Mitarbeiter gearbeitet hat, dann kann man immer noch sagen, von Datum X bis Datum Y alle Tage oder von mir aus auch in dem gleichen Zeitraum alle Montage ("Arbeiter für die Montage gesucht"...;-) ) dann kann man passende INSERTs erstellen, die daraus die Datumswerte berechnen und in einer Tabelle mit MitarbeiterID und Datum speichern, fertig.
So eine Tabelle kann man dann auch sinnvoll auswerten.

Gruß

Christian
 

Offline 69bruno

  • Heimwerker
  • Access-Profi
  • **
  • Beiträge: 262
Re: Wert eines Abfragefeldes in einem Modul verwenden
« Antwort #10 am: März 05, 2012, 15:57:18 »
Ah, da liegt die Verständigung brach  :D

Ich erfasse hier Arbeitszeitmodelle, weil anschließend über variable Zeiträume, z. B. ein Jahr eine Statistik erhoben wird, wieviel Personen, die zu einer bestimmten Personengruppe gehören (Alter, Geschlecht, Mitarbeitergruppe) an wievielen Tagen (hier eben "echte" Arbeitstage krankheitsbedingt gefehlt haben.
Da es mir zu umständlich ist, die doch noch überwiegenden Anwesenheitstage zu erfassen, erfasse ich eben Fehlzeiträume und die Information, mit welchem Modell in der Fehlzeit gearbeitet wurde und rechne dann per Funktion aus, wieviel echte Tage das waren (exklusive aller NRW-Feiertage). Dazu noch die "Sollarbeitstage" über den Berichtszeitraum gerechnet und schon hat man eine schöne Statistik, die seit mehreren Jahren schon per Hand gerechnet wird.....richtig, per Hand......jeder Tag wird gezählt, jedes Arbeitsmodell ausgewertet.........Dauer etwa 2 Monate.....künftig hoffentlich ein Mausklick.......
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If
 

Offline Bitsqueezer

  • Newbie
  • Beiträge: 30
    • Bitsqueezers Access Downloads
Re: Wert eines Abfragefeldes in einem Modul verwenden
« Antwort #11 am: März 05, 2012, 16:09:48 »
Hallo,

das ändert nichts an dem Gesagten, ob es nun Arbeitszeiten oder Fehlzeiten sind, bei Fehlzeiten hast Du wahrscheinlich wohl etwas weniger einzugeben, das ist alles.

Eine Statistik kann man dann jederzeit aus den Daten herausholen, dazu gibt es u.a. Pivottabellen, mit denen sowas kein Problem ist.

Wenn in einer Mitarbeitertabelle auch Daten wie Geburtsdatum, Geschlecht und Mitarbeitergruppe stehen (was logisch wäre), dann kann man diese Daten ebenfalls mit einbeziehen. Alles mit nur einer einzigen MitarbeiterID in der genannten Tabelle.

Gruß

Christian
 

Offline 69bruno

  • Heimwerker
  • Access-Profi
  • **
  • Beiträge: 262
Re: Wert eines Abfragefeldes in einem Modul verwenden
« Antwort #12 am: März 05, 2012, 16:31:19 »
Letztendlich habe ich die Lösung ja.
Mit Pivottabellen habe ich keine Erfahrungen und ich musste eine (vollständig) vorgegebene Berichtsform einhalten (Mit Spaltenbreiten, Zeilenhöehen und statistischen Fragestellungen). eben das Excelblatt, das es vorher gab....vielleicht habe ich mich daran zu sehr orientiert......Ich fürchte fast, die Pivottabelle hätte mir die etwa 40 Domänenaggregatfunktionen erspart, die ich zimmern musste....  ::)
Und Ich habe ja verschiedene Tabellen, die über die ID miteinander verknüpft sind. Nur bei den zu erfassenden Tagen hatte ich das nicht mehr gemacht. Ich werde mich in einer ruhigen Minute mal drangeben und sehen, wie das anders aussehen würde........

Auf jeden Fall nochmal Danke für den Hinweis mit den Paramterwerten, die erstmal zum Ziel führen.

Und jetzt sehe ich da, dass ich im Ausgangsthread "Name" geschrieben hatte.......natürlich Quatsch, da ist ne ID drin mit 1:n Beziehung von den Grunddaten zu den Arbeitszeitmodellen......
« Letzte Änderung: März 05, 2012, 16:35:15 von 69bruno »
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If
 

Offline Bitsqueezer

  • Newbie
  • Beiträge: 30
    • Bitsqueezers Access Downloads
Re: Wert eines Abfragefeldes in einem Modul verwenden
« Antwort #13 am: März 05, 2012, 16:35:51 »
Hallo,

zum Lernen empfehle ich Dir, die Pivottabellen in Excel auszuprobieren, das Prinzip ist das gleiche, aber der Pivottabelleneditor ist weitaus besser als der von Access und macht das Verständnis einfacher.

Gruß

Christian
 

Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 883
Re: Wert eines Abfragefeldes in einem Modul verwenden
« Antwort #14 am: März 05, 2012, 23:37:19 »
Zitat von: 69bruno
Ne, mal im Ernst, gibt es Performancegründe, die dafür sprechen, eher Zeilenorientiert vorzugehen ??
Dafür gibt es sehr gute Gründe:
- Performance bekommt man z.B. durch Massendatenverarbeitung statt Einzeldatenverarbeitung (Bagger statt Sandschaufel), also SQL statt Recordset- oder Array-Schleifen.
- SQL benötigt bestimmte Strukturen (eben diese Zeilenorientierung), um einfach und effektiv laufen zu können. Ein Sportwagen läuft auf einer Autobahn eben etwas besser als in einer Altstadt-Innenstadt.

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard