Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Matrix im Formular

82 views
Skip to first unread message

Jörg Böhmichen

unread,
Jul 7, 2004, 2:07:00 PM7/7/04
to
Hallo NG,
in einer Lehrgangs-Datenbank wird für jeden Lehrgang
die Anzahl der Einzelstunden und die Anzahl TN in der
DB eingetragen (Teilnehmer pro Lehrgang in Detailtabelle,
im Formular als Ufo).
Nun soll ich zu jeder Einzelstunde die Anwesenheit
jedes Teilnehmers erfassen. Dazu dachte ich an eine
Checkbox-Matrix: Teilnehmer als Zeilen, Einzelstunden
als Spalten - aber wie kann ich diese Matrix aus den
beiden Werten für Anzahl TN und Anzahl Stunden aufbauen?
Oder ist Checkboxen keine so gute Idee, besser nähme ich
Textboxen mit einem Buchstaben, z.B. 'x'?

Wer hat mit sowas schon Erfahrungen und kann mir
damit helfen?

Vielen Dank!
Jörg


Jörg Ackermann

unread,
Jul 7, 2004, 2:53:36 PM7/7/04
to
Hi,

Jörg Böhmichen schrieb:

> Hallo NG,
> in einer Lehrgangs-Datenbank wird für jeden Lehrgang
> die Anzahl der Einzelstunden und die Anzahl TN in der
> DB eingetragen (Teilnehmer pro Lehrgang in Detailtabelle,
> im Formular als Ufo).
> Nun soll ich zu jeder Einzelstunde die Anwesenheit
> jedes Teilnehmers erfassen. Dazu dachte ich an eine
> Checkbox-Matrix: Teilnehmer als Zeilen, Einzelstunden
> als Spalten - aber wie kann ich diese Matrix aus den
> beiden Werten für Anzahl TN und Anzahl Stunden aufbauen?
> Oder ist Checkboxen keine so gute Idee, besser nähme ich
> Textboxen mit einem Buchstaben, z.B. 'x'?

Da fallen mir nur Byte-Arrays (ein Beispiel in der KnowHow-MDB) oder
Strings ala 101010101111000000 ein.

Gruß

Henry Habermacher [MVP Access]

unread,
Jul 7, 2004, 10:56:15 PM7/7/04
to
Hallo Jörg

Jörg Böhmichen wrote in news:2879f01c4644d$3315e9b0$a401...@phx.gbl:

Genau genommen müsste das im DAtenmodell so aussehen:
Teilnehmer - Anwesenheit - Einzelstungen - Lehrgang

TeilnehmerAnwesenheit wäre dann eine Beziehungsentität, welche nur die
Information trägt, ob ein Teilnehmer an einer Einzelstunde anwesend war.
Diese Tabelle beinhaltet nur die Schlüssel der TAbelle Teilnehmer und
der Tabelle Einzelstunden, wenn ein Teilnehmer anwesend war. Wenn er
nicht anwesend war, gibt es in dieser Tabelle einfach keinen Eintrag.

Das dann in eine Matrix Form zu bringen würde eigentlich eine
Kreuztabelle verlangen, nur sind diese nicht aktualisierbar.

Es gibt mehrere Möglichkeiten, eine davon ist der Vorschlag von Jörg

Alternativ kannst Du z.B. eine temporäre Tabelle anlegen, welche genau
den Aufbau der Matrix hat. Diese befüllst Du mit einem einzelnen
Lehrgang. In den Spalten die Daten der Einzelstunden, in den Zeilen die
Teilnehmer, die für diesen Lehrgang angemeldet sind.
Die einzelnen Felder können nun sehr wohl Boolean Felder sein, die bei
der Erfassung mit Kreuzchen oder Häckchen versehen werden können.

Nun kommt aber das aufwändige: Du musst nun nach der Erfassung der
Anwesenheiten wieder in die Original Tabelle zurückschreiben. Das kannst
Du beispielsweise beim Boolean-Feld After_Update EReignis machen. Dort
machst Du Code rein, der schaut, ob das Feld jetzt falsch ist, falls ja,
versuchst es den Eintrag aus der Anwesenheittabelle zu löschen, falls es
true ist, versucht es einen Eintrag in die Anwesenheittabelle zu machen.
Wenn Du das einigermassen generisch aufbaust, dann kannst Du dafür eine
einzelne Funktion machen, die Du überall in den Boolean Feldern (alle
mit gedrückter Shifttaste auswählen) einfügen kannst. Dieser Funktion
übergibst Du dann den Schlüssel der Einzelstunde (z.B. Datum und
Uhrzeit) und die Teilnehmer Nummer.

HTH
Henry

--
Keine E-Mails auf Postings in NGs senden!
Don't send e-mails to postings in newsgroups!
KB: http://support.microsoft.com/default.aspx
FAQ: http://www.donkarl.com/AccessFAQ.htm
OH: Online Hilfe von Microsoft Access (Taste F1)
Downloads: http://www.dbdev.org

Jörg Böhmichen

unread,
Jul 8, 2004, 6:48:29 AM7/8/04
to
Hallo Jörg, hallo Henry,

vielen Dank für Eure Tipps - scheint doch ziemlich
aufwendig zu sein: im OnCurrent jedes Records die
temp.Tabelle generieren, mit Werten aus der Tabelle
TeilnehmerAnwesenheit füllen und dann die "generische
Funktion" basteln, mit der ich Records entfernen oder
hinzufügen kann.

So gern ich das probieren würde, mir fehlt die Zeit.
Da werd' ich dem AG sagen, dass es ein Wunschtraum bleibt,
oder er muss kräftig nachlegen ...

Viele Grüße!
Jörg

>-----Originalnachricht-----
>
>Genau genommen müsste das im Datenmodell so aussehen:


>Teilnehmer - Anwesenheit - Einzelstungen - Lehrgang
>
>TeilnehmerAnwesenheit wäre dann eine Beziehungsentität,
welche nur die
>Information trägt, ob ein Teilnehmer an einer
Einzelstunde anwesend war.

>Diese Tabelle beinhaltet nur die Schlüssel der Tabelle

>.
>

Henry Habermacher [MVP Access]

unread,
Jul 8, 2004, 8:33:23 AM7/8/04
to
Hallo Jörg

Jörg Böhmichen wrote in news:28fe801c464d9$1ad64f70$a401...@phx.gbl:

> vielen Dank für Eure Tipps - scheint doch ziemlich
> aufwendig zu sein: im OnCurrent jedes Records die
> temp.Tabelle generieren, mit Werten aus der Tabelle
> TeilnehmerAnwesenheit füllen und dann die "generische
> Funktion" basteln, mit der ich Records entfernen oder
> hinzufügen kann.
>
> So gern ich das probieren würde, mir fehlt die Zeit.
> Da werd' ich dem AG sagen, dass es ein Wunschtraum bleibt,
> oder er muss kräftig nachlegen ...

Ganz so kompliziert ist das gar nicht. Ich schätze, dass das unter einem
Tag realisierbar ist, wenn die Datenstrukturen einigermassen passen.

Gruss

Michael Zimmermann

unread,
Jul 8, 2004, 11:35:50 AM7/8/04
to
Hallo!

Jörg Ackermann:


> Da fallen mir nur Byte-Arrays (ein Beispiel in der
> KnowHow-MDB) oder Strings ala 101010101111000000 ein.

Ich hab auch noch einen:

Vektorprodukt des Auswahlvektors
(1 0 1 1 0 ...)
mit dem Basisvektor
(2^0 2^1 2^2 2^3 ...) = (1 2 4 8 16...)
ergibt für jede Zustandskombination eine eindeutige Zahl a,
also
a = 1*a0 + 2*a1 + 4*a2 + 8*a3 + ...

Mit

a(1) = (a \ 1) Mod 2
a(2) = (a \ 2) Mod 2
a(3) = (a \ 4) Mod 2
a(4) = (a \ 8) Mod 2 usw.

lassen sich die einzelnen Zustände aus dem Aggregat
wieder herauslesen.

Da das Verfahren nur Ganzzahloperationen erfordert,
ist es auch sehr schnell.

Das hier beschriebene Vorgehen ist darauf zugeschnitten,
daß jedes Element genau einen von zwei Zuständen
annimmt.

Andernfalls muß man die Methode anpassen.

Gruß aus Mainz
Michael

Henry Habermacher [MVP Access]

unread,
Jul 8, 2004, 8:18:50 PM7/8/04
to
Hallo Michael

Michael Zimmermann wrote in news:2l580iF...@uni-berlin.de:

> Ich hab auch noch einen:

Wie war das nun wieder mit der Normalisierung und den atomaren Feldern
;-) ?
Eine Abfrage zu machen, die dann die Teilnehmer auslistet, welche genau
an einem Tag dabei war, wird dann nicht ganz trivial. Und wenn es mal
viele Einzeltermine sind, werden die Zahlen schon zimelich gross, nehmen
wir mal 17 Einzeltermine, da wird's mit einem Long bereits kritisch und
Realzahlen dann Binär Folgen zu kodieren kann aufgrund der Rundung
problematisch werden.

Nur so einige Randbemerkungen zu diesem Thema.

Michael Zimmermann

unread,
Jul 9, 2004, 5:42:48 AM7/9/04
to
Hallo!

> Wie war das nun wieder mit der Normalisierung und den
> atomaren Feldern ;-) ?

Er soll das ja nicht so in Tabellen speichern.
Mir ging's nur darum, daß eine Long-Zahl ggf. schneller
verarbeitet wird als ein Byte-Array oder gar Stringfolgen.
Wobei, bei den anzunehmenden Größenordnungen macht es
absolut wohl nicht soviel aus ...

> Eine Abfrage zu machen, die dann die Teilnehmer
> auslistet, welche genau an einem Tag dabei war, wird dann
> nicht ganz trivial.

Trivial wäre ja langweilig. ;-) Die Formel, um aus dem
Aggregat Einzelwerte zu extrahieren, hatte ich aber
mitgeliefert.

> Und wenn es mal viele Einzeltermine sind, werden die
> Zahlen schon zimelich gross, nehmen wir mal 17
> Einzeltermine, da wird's mit einem Long bereits

> kritisch ...

Berechtigter Hinweis. 31 ist die Grenze, da Long 32 Bit
hat, von denen das erste das Vorzeichenbit ist.
Wenn jeder Zustand zwei Werte annehmen kann, kommen
wir mit 31 Zuständen auf diese Bit-Zahl.

> ... und Realzahlen dann Binär Folgen zu kodieren


> kann aufgrund der Rundung problematisch werden.

Das auf jeden Fall. Dann muß man sich etwas anderes
einfallen lassen. Von der Rundunsproblematik ganz
abgesehen, hätte ja z. B. Single genauso 32 Bit wie
Long und kann daher auch nur 2^32 verschiedenen Zustände
annehmen. Daß die Zahlen "größer" sind, hilft da gar
nichts. Es geht ja nicht um die Zahlengröße, sondern um
die Menge Information.

Um in VBA-Code in Formularen Zustandskombinationen
(z. b: 12 Artikelkategorien, wie die Apostel;
Auslauf/Lieferbar; Fremd/Eigen) zu codieren, habe
ich damit beste Erfahrungen gemacht.

> Nur so einige Randbemerkungen zu diesem Thema.

Aber immer. Du weißt doch, daß ich gerne mit Dir
diskutiere. ;-)

Gruß aus Mainz
Michael

Henry Habermacher [MVP Access]

unread,
Jul 9, 2004, 6:04:04 AM7/9/04
to
Hallo Michael

Michael Zimmermann wrote in news:2l77l9F...@uni-berlin.de:

--

Henry Habermacher [MVP Access]

unread,
Jul 9, 2004, 6:05:03 AM7/9/04
to
Hallo Michael

Michael Zimmermann wrote in news:2l77l9F...@uni-berlin.de:

>> Nur so einige Randbemerkungen zu diesem Thema.
>
> Aber immer. Du weißt doch, daß ich gerne mit Dir
> diskutiere. ;-)

Klar doch, sonst würde ich Deine Postings ja auch nicht mehr lesen. Geht
mir ja genau so.

Gruss aus Thailand

Henry Habermacher [MVP Access]

unread,
Jul 9, 2004, 6:05:58 AM7/9/04
to

Michael Zimmermann

unread,
Jul 9, 2004, 9:03:55 AM7/9/04
to
Hallo!

Henry Habermacher [MVP Access]:


> > Du weißt doch, daß ich gerne mit Dir diskutiere. ;-)

> ... Geht mir ja genau so.

Was sind wir schmusig heute. ;-)

Gruß aus Mainz
Michael


0 new messages