Ein formular statt viele gleiche

Hallo alle zusammen,

ich habe mir eine Datenbank aufgebaut in dem es viele Tabellen gibt. Alle Tab. haben den gleichem Aufbau und bis jetzt mit einem Formular pro Tabelle, mit ebenfalls exakt mit dem gleichem Aufbau.

Da sich die DB in Zukunft weiter entwickeln wird, in Bezug auf die Anzahl der Tabellen und der Formulare sowie dem Informationsgehalt der einzelnen Tabelle und des Formulares, muss natürlich jedes einzelne Formular samt VBA Code angepasst werden.

Meine Frage dazu ist, ist es möglich, da ich recht faul bin, dass ich nur ein Formular habe und die Datensatzherkunft für die einzelen Tabelle per VBA und einer Variable bestimme.

Mein Gedanke war, dass ich ein Formular habe in der ich einen „Überblick“ in Form von Button oder Kombiliste über meine Tabellen habe. Mit dem Klick auf einem der Button bzw. der Auswahl der Kombiliste wollte ich dann das eigentliche Formular für die „Tabelle“ öffnen in dem ich eine Variable mit dem Tabellennamen fülle und damit die Datensatzherkunft bestimme.

Ich hoffe ich habe mich verständlich genug ausgedrückt und nicht zu viel wirres Zeug geschrieben.

Für eine Antwort und eventuelle Beispiele bedanke ich mich schon mal im Voraus und sagen schon mal Gute Nacht.

Grüße aus Wismar von der Ostseeküste
Ricardo

Hallo

ich habe mir eine Datenbank aufgebaut in dem es viele Tabellen
gibt. Alle Tab. haben den gleichem Aufbau und bis jetzt mit
einem Formular pro Tabelle, mit ebenfalls exakt mit dem
gleichem Aufbau.

das ist ein falscher Ansatz für eine DB…

Da sich die DB in Zukunft weiter entwickeln wird, in Bezug auf
die Anzahl der Tabellen und der Formulare sowie dem
Informationsgehalt der einzelnen Tabelle und des Formulares,
muss natürlich jedes einzelne Formular samt VBA Code angepasst
werden.

nein, nicht, wenn es besser (richtig) gemacht wird.
d. h. EINE Tabelle und EIN Formular. Dabei wird in der Tabelle ein Feld geführt, das die Datensätze kategorisiert (so, wie es jetzt mit den verschiedenen Tabellen gemacht wird) und (im Formular) die Datensätze je nach Notwendigkeit über Auswahlkombis oder Suchtextfelder filtert. Diese Filterung kann passieren durch Verwendung der FILTER-Methode des Forms oder durch Neuzuweisen eines SQL-Strings (Abfrage) mit entspr. Kriterien an die Datenherkunft-Eigenschaft des Forms.

Meine Frage dazu ist, ist es möglich, da ich recht faul bin,
dass ich nur ein Formular habe und die Datensatzherkunft für
die einzelen Tabelle per VBA und einer Variable bestimme.

„Faulheit“ wird bestraft. Das, was auf den ersten Blick als einfach/bequehm aussieht, entpuppt sich im Folgenden meist als KO-Kriterium und zum Wegwerfen der DB…, sprich, die Arbeit war umsonst.

Im Prinzip ja, wobei das nur ein Herumbasteln an den Symptomen wäre und nicht das ursächliche Problem (siehe oben) bekämpft würde.

Mein Gedanke war, dass ich ein Formular habe in der ich einen
„Überblick“ in Form von Button oder Kombiliste über meine
Tabellen habe. Mit dem Klick auf einem der Button bzw. der
Auswahl der Kombiliste wollte ich dann das eigentliche
Formular für die „Tabelle“ öffnen in dem ich eine Variable mit
dem Tabellennamen fülle und damit die Datensatzherkunft
bestimme.

z. B::

Sub cmbKombiTabellenauswahl_ Afterupdate()
Docmd.Openform „frmAllgemeinesFormular“,Me!cmbKombiTabellenauswahl
End Sub

wobei in der ersten Spalte des ungebundenen Kombis die Tabellennamen stehen.

Im Form „frmAllgemeinesFormular“:

Sub Form_Open(Cancel as Integer)
If not isnull(Me.Openargs) Then Me.Recordsource=Me.Openargs
End Sub

Ich hoffe ich habe mich verständlich genug ausgedrückt und
nicht zu viel wirres Zeug geschrieben.

war verständlich :wink: Ich hoffe, dass mein Hinweis auf den falschen Tabellenaufbau auch verständlich ist.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Moin Moin,

erstmal Danke für deine schnelle Antwort.

d. h. EINE Tabelle und EIN Formular. Dabei wird in der Tabelle
ein Feld geführt, das die Datensätze kategorisiert (so, wie es
jetzt mit den verschiedenen Tabellen gemacht wird) und (im
Formular) die Datensätze je nach Notwendigkeit über
Auswahlkombis oder Suchtextfelder filtert. Diese Filterung
kann passieren durch Verwendung der FILTER-Methode des Forms
oder durch Neuzuweisen eines SQL-Strings (Abfrage) mit entspr.
Kriterien an die Datenherkunft-Eigenschaft des Forms.

Die Methode, dass ich nur eine Tabelle mit einem Formular führe hatte ich auch schon durch dacht und wieder verworfen.
Warum:
Die Datenbank soll von mehreren Benutzern zugleich bearbeitet werden und darum habe ich eine Aktuallisierung des Formulares bei bestimmten Aktionen eingearbeitet.
Das heisst, es findet von Zeit zu Zeit ein Schließen und Neuöffnen der Abfragetabelle für das Formular statt. Da aber im Laufe der Zeit die Anzahl der Datensätze immer weiter steigt, ist dies für die Performenz der Datenbank ungünstig.
Darum halte ich die Anzahl der Datensätze (sollten im ideallfall zw. 200 -500 liegen) in den einzelnen Tabellen (derzeit bereits 10) „künstlich“ unten. Eine Verknüpfung zw. den Tabellen gibt es nicht.
Mir wurde in der Schule beigebracht das Access nur bei einer Datenanzahl von bis zu 1000 verwendet werden sollte. (Die DB wird vom Kundendienst mit genohmen und daher ist für uns SQL erstmal außenvor)
Meine Persönlichen Erfahrungen hatte dies im Bezug auf Zunahme der Datensätze und der Performenz auch gezeigt, dass die Performenz bei zu nehmender Anzahl der Datensätze unproporzional rapide abnimmt.

„Faulheit“ wird bestraft.

Für die Faulheit gibt es drei Gründe:

  1. Jemehr Formulare ich anpassen und ändern muss, um so mehr Fehler können sich einschleichen, weil man irgend etwas irgend wo vergessen hat.
    Werden die Tabellen geändert, muß dies in den Formularen ebenfalls erfolgen. D.h. ich muß jedes von zur zeit nur!!! 10 Formularen (und das steigend) einzeld anfassen.
    (Wer Ordnung hält ist zufaul zum suchen *grins*)

  2. Ich weiß was ich hier Programmiert habe und somit weiß ich !eigentlich! auch was ich wo ändern muss. Falls eine Neue Tabelle und somit Formular benötigt wird, sollte mal ein anderer mal eine neue Tabelle anlegen müssen, wollte ich den entsprechenden Aufwand sogering wie möglich halten.
    Und das ist doch nun wirklich nicht verwerflich/falsch.

Daher der Gedanke, ein kleines Formular mit wenigem aber überschaulichem VBA-Code zum öffnen des eigentlichen Formulares, in dem die Variable für die entsprrechende Tabelle gesetzt wird und nur ein Formular das angepasst werden muss.

Ich hoffe du kannst mein Gründe verstehen, warum ich gerne diesen Weg gehen wollte.

Mit freundlichen Grüßen aus Wismar
Ricardo

Moin Moin,

Die Methode, dass ich nur eine Tabelle mit einem Formular
führe hatte ich auch schon durch dacht und wieder verworfen.

das war ein Fehler

Warum:
Die Datenbank soll von mehreren Benutzern zugleich bearbeitet
werden und darum habe ich eine Aktuallisierung des Formulares
bei bestimmten Aktionen eingearbeitet.

das macht Access automatisch, wenn du durch die Datensätze blätterst, oder suchst.

Das heisst, es findet von Zeit zu Zeit ein Schließen und
Neuöffnen der Abfragetabelle für das Formular statt.

sorry, das ist total überflüssig und bremst die Performance erheblich
Außerdem: Mit dem VBA Befehl Me.REQUERY erreichst du das gleiche!

Da aber im Laufe der Zeit die Anzahl der Datensätze immer weiter
steigt, ist dies für die Performenz der Datenbank ungünstig.

ja, so ca. ab 1 Mio. Datensätze, oder ab 1000 Mitarbeitern die darauf zugreifen.

Darum halte ich die Anzahl der Datensätze (sollten im
ideallfall zw. 200 -500 liegen) in den einzelnen Tabellen
(derzeit bereits 10) „künstlich“ unten.

sorry, das ist absolut überflüssig und bremst die Performance.

Du solltest Front- und Backend trennen. Das Frontend bekommt jeder auf seinen PC. Das Backend (die Tabellen) liegen auf dem Server.
Die Tabellen sind verknüpft.

In den Grundeinstellungen von Access (auf dem Client-PC) kannst du dann bestimmen, wie viele Datensätze jeweils bearbeitet werden sollen/dürfen. Da muss man nichts „künstlich“ unten halten!
(btw: 1000 Datensätze ist voreingestellt und völlig in Ordnung)

Eine Verknüpfung zw. den Tabellen gibt es nicht.

sollte es aber, denn das bringt den Vorteil

Mir wurde in der Schule beigebracht das Access nur bei einer
Datenanzahl von bis zu 1000 verwendet werden sollte.

*LOL* den Lehrer würde ich mal entlassen, weil er keine Ahnung hat.
Obwohl ich muss vorsichtig sein, mein Sohn kam mit einer Rechenaufgabe nach Hause: 2+3= ! Die Antwort meines Sohnes = 6
Ich habe es mit Fingern und allem anderem Möglichen versucht…seine Antwort = 6
Als ich Ihn dann fragte, wie er darauf kommt, war sein Antwort: Das hat der Lehrer so gesagt, und der hat immer Recht!

(Die DB wird vom Kundendienst mit genohmen und daher ist für uns SQL
erstmal außenvor)

Großer Irrtum, Datenbank und SQL sind wie Auto und Lenkrad miteinander verbunden.

Jedem Außendienst-Mitarbeiter solltest du „seine“ DATENBANK mitgeben. Diese kannst du dann später mit der Haupttabelle synchronisieren.

Meine Persönlichen Erfahrungen hatte dies im Bezug auf Zunahme
der Datensätze und der Performenz auch gezeigt, dass die
Performenz bei zu nehmender Anzahl der Datensätze
unproporzional rapide abnimmt.

ja, wenn man das so unperformant macht, wie du es konzipiert hast.

  1. Jemehr Formulare ich anpassen und ändern muss, um so mehr
    Fehler können sich einschleichen, weil man irgend etwas irgend
    wo vergessen hat.

genau, daher ist es sinnvoll nur ein Formular zu verwenden

Werden die Tabellen geändert, muß dies in den Formularen
ebenfalls erfolgen. D.h. ich muß jedes von zur zeit nur!!! 10
Formularen (und das steigend) einzeld anfassen.
(Wer Ordnung hält ist zufaul zum suchen *grins*)

wer keine Arbeit hat, macht sich welche :smile:
Dir ist also klar, dass das nicht sinnvoll ist. Das ist schon mal ein guter Weg zur Besserung :smile:

  1. Ich weiß was ich hier Programmiert habe und somit weiß ich
    !eigentlich! auch was ich wo ändern muss. Falls eine Neue
    Tabelle und somit Formular benötigt wird, sollte mal ein
    anderer mal eine neue Tabelle anlegen müssen, wollte ich den
    entsprechenden Aufwand sogering wie möglich halten.
    Und das ist doch nun wirklich nicht verwerflich/falsch.

in keinster Weise ist das verwerflich, im Gegenteil, es zeugt von guter Programmierung.

Daher der Gedanke, ein kleines Formular mit wenigem aber
überschaulichem VBA-Code zum öffnen des eigentlichen
Formulares, in dem die Variable für die entsprrechende Tabelle
gesetzt wird und nur ein Formular das angepasst werden muss.

verabschiede dich von den Tabellen (Mehrzahl)
Verwalte deine Daten in einer Tabelle und einem Formular

Ich hoffe du kannst mein Gründe verstehen, warum ich gerne
diesen Weg gehen wollte.

dann tue es auch, und vergiss mal was dein Lehrer gesagt hat.

Grüße aus Rostock
Wolfgang
(Netwolf)

Hallo,

d. h. EINE Tabelle und EIN Formular. Dabei wird in der Tabelle
ein Feld geführt, das die Datensätze kategorisiert (so, wie es
jetzt mit den verschiedenen Tabellen gemacht wird) und (im
Formular) die Datensätze je nach Notwendigkeit über
Auswahlkombis oder Suchtextfelder filtert. Diese Filterung
kann passieren durch Verwendung der FILTER-Methode des Forms
oder durch Neuzuweisen eines SQL-Strings (Abfrage) mit entspr.
Kriterien an die Datenherkunft-Eigenschaft des Forms.

Die Methode, dass ich nur eine Tabelle mit einem Formular
führe hatte ich auch schon durch dacht und wieder verworfen.
Warum:
Die Datenbank soll von mehreren Benutzern zugleich bearbeitet
werden und darum habe ich eine Aktuallisierung des Formulares
bei bestimmten Aktionen eingearbeitet.

Mehrbenutzerbetrieb ist für Access-Datenbanken normal und Bedarf keiner Tricksereien. Lediglich sollte eine Aufteilung in Frontend (Alles außer abellen) und Backend (nur Tabellen) stattfinden.

Das heisst, es findet von Zeit zu Zeit ein Schließen und
Neuöffnen der Abfragetabelle für das Formular statt. Da aber
im Laufe der Zeit die Anzahl der Datensätze immer weiter
steigt, ist dies für die Performenz der Datenbank ungünstig.

Schließen und Öffnen ist für das Speichern nicht nötig. Bei jedem Datensatzwechsel , bzw. bei entspr. Programmierung, werden die DAten in die entspr. Tabelle geschrieben.

Darum halte ich die Anzahl der Datensätze (sollten im
ideallfall zw. 200 -500 liegen) in den einzelnen Tabellen
(derzeit bereits 10) „künstlich“ unten. Eine Verknüpfung zw.
den Tabellen gibt es nicht.
Mir wurde in der Schule beigebracht das Access nur bei einer
Datenanzahl von bis zu 1000 verwendet werden sollte.

Sag dem Lehrer einen schönen Gruß und er soll keinen solchen Unsinn verzapfen…

(Die DB
wird vom Kundendienst mit genohmen und daher ist für uns SQL
erstmal außenvor)

Was meinst Du mit „SQL“? Access benutzt auch SQL, um sein Datenbanksystem anzusprechen. Vermutlich meinst Du aber als DB-System den MS SQL Server im Gensatz zum (internen) DB-System von Access (die sogenannte JET-Engine)

Meine Persönlichen Erfahrungen hatte dies im Bezug auf Zunahme
der Datensätze und der Performenz auch gezeigt, dass die
Performenz bei zu nehmender Anzahl der Datensätze
unproporzional rapide abnimmt.

Nun, die Performance (Du meinst sicher die Geschwindigkeit der Datensatz-Anzeige) hängt eher vom Aufbau der Tabellen und der richtigen Verwendung der Datentypen und deren Indizierung ab.

„Faulheit“ wird bestraft.

Für die Faulheit gibt es drei Gründe:

  1. Jemehr Formulare ich anpassen und ändern muss, um so mehr
    Fehler können sich einschleichen, weil man irgend etwas irgend
    wo vergessen hat.
    Werden die Tabellen geändert, muß dies in den Formularen
    ebenfalls erfolgen. D.h. ich muß jedes von zur zeit nur!!! 10
    Formularen (und das steigend) einzeld anfassen.
    (Wer Ordnung hält ist zufaul zum suchen *grins*)

  2. Ich weiß was ich hier Programmiert habe und somit weiß ich
    !eigentlich! auch was ich wo ändern muss. Falls eine Neue
    Tabelle und somit Formular benötigt wird, sollte mal ein
    anderer mal eine neue Tabelle anlegen müssen, wollte ich den
    entsprechenden Aufwand sogering wie möglich halten.
    Und das ist doch nun wirklich nicht verwerflich/falsch.

IMHO schon :wink:

Daher der Gedanke, ein kleines Formular mit wenigem aber
überschaulichem VBA-Code zum öffnen des eigentlichen
Formulares, in dem die Variable für die entsprrechende Tabelle
gesetzt wird und nur ein Formular das angepasst werden muss.

Habe ich doch geschrieben, wie das geht…

Ich hoffe du kannst mein Gründe verstehen, warum ich gerne
diesen Weg gehen wollte.

Verstehen schon, nur nicht gut-heißen.

Wenigstens schreibst Du „wollte“, was Hoffnung läßt, dass Du auf meine Vorschläge noch umschwenkst :wink:)

Grüße
Franz,DF6GL

Hallo,

danke für eure ausführlichen Antworten.

Eins muss ich aber vorher noch sagen:
Ihr macht mich fertig! *grins*

Also, das mit einer Tabelle sorgt bei mir einbisschen für Bauchschmerzen. Werde es mir aber zur Brust nehmen und umsetzen (auch wenn ich es eigentlich nicht möchte).

Mit SQL meinte ich natürlich den Einsatz von SQL-Server, wie Franz richtig vermutet hatte.

Dass bei jedem Vor und zurück Navigieren im Formular oder Suchen die Formularabfrage von Access selbstständig aktualisiert wird, halte ich für ein Gerücht. Das hatte ich nämlich ausprobiert und es geht nicht. Daten die am Arbeitsplatz1 (AP1) über das Formular erfasst wurden, können nicht auf dem Arbeitsplatz2 (AP2) eingesehen werden, wenn das Formular bereits vor dem Abspeichern am AP1 geöffnet wurde.
Hierzu hatte ich bereits das Me.REQUERY eingebaut, welches mir bei bestimmten Aktionen im Formular die Abfrage aktualisiert.
Soweit ich es gelernt habe, wird mit dem Öffnen von Abfragen eine temporäre Abfragetabelle geöffnet (Formularabfragen sind auch nur Abfragen). In dieser werden dann die Änderungen erfasst und zugleich in die „richtige“ Tabelle erfasst. Es erfolgt dabei aber kein Abgleich zw. der richtigen Tabelle und der temporären Abfragetabelle. Wodurch geänderte Datensätze von anderen Abfrage-„Aktionen“ nicht in meiner temporären Abfragetabelle erscheinen. Hierzu muss ein Requery erfolgen und dies erfolgt nach meinem mir beigerachten Wissenstand über das schliessen und öffnen der temporären Abfragetabelle. Das geht schneller als der Vergleich von vorhandenen und nicht vorhandenen Datensätzen (hab ich, hab ich nicht, hab ich, hab ich, hab ich nicht) in meiner Abfragetabelle.

Da ich aber bei der Verwendung von „vielen“ einzel Tabellen keinen Filter auf die Tabelle anwenden muß geht das Neuöffnen der Abfragetabelle schneller, als wenn ich eine Tabelle habe und erst den Filtern drüberlegen muß.
Das Filtern ist ja auch nur das Überprüfen jedes einzelnen Datensatzes ob er den geforderten Kriterien entspricht, damit dieser in die temporäre Abfragetabelle geschrieben werden darf. Ist diese Tabelle dannoch mit einer Anderen verknüpft erfolgt auf diese ebenfalls ein Filter um den Zugehörigen Datensatz zufinden.
Das geht natürlich wahnsinnig schnell mit den heutigen Rechnern. Aber es ist schon ein unterschied ob 1.000 oder 50.000. Ok es sind nur Millisekunden wenn der Prozessor gerade nichts anderes zutun hat. Aber trotzdem *schmoll*

Das gleiche gilt übrigens auch in der Programmierung, bei der heutigen Technik ist es vielen Programmierern egal ob 50.000 Zeilen Quellcode oder 1.000 Zeilen für das gleiche Ergebniss brauchen. Haben doch genug Prozesorleistung und RAM zur Verfügung. Diese Diskussusion schweift jetzt aber vom Thema ab also schluß damit :wink:

Sollte ich das falsch sehen, lasse ich mich gerne belehren.

Grüße von der Ostsee und einen Schönen Sonntag noch
Ricardo

Moin, Ricardo,

Ihr macht mich fertig! *grins*

dafür sind wir da.

…geht das Neuöffnen der Abfragetabelle schneller, als wenn
ich eine Tabelle habe und erst den Filtern drüberlegen muß.

Deine Überlegungen zur Performance in Ehren, aber hier hat’s Dir das Maß verrissen. Eine Abfrage, selbst wenn sie im Zehntelsekundenbereich liegt, ist allemal schneller als der Anwender begreifen kann, was er da sieht.

Das gleiche gilt übrigens auch in der Programmierung, bei der
heutigen Technik ist es vielen Programmierern egal ob 50.000
Zeilen Quellcode oder 1.000 Zeilen für das gleiche Ergebniss
brauchen.

Vielleicht erinnerst Du Dich an ALGOL - eine Zeile machte das gleiche wie 7 Seiten Fortran. Hatte allerdings den Nachteil, dass selbst der Autor am nächsten Tag nicht mehr wusste, was er da programmiert hatte. Das stand unter dem Motto „Nicht ändern, sondern wegschmeißen und neu schreiben“. Heute wird verlangt, dass Applikationen von jetzt auf gleich erweitert, sprich geändert werden.

Gruß Ralf

Hallo,

Ihr macht mich fertig! *grins*

I Wo , Du machst Dich selber fertig mit deinen Überlegungen :wink:

Also, das mit einer Tabelle sorgt bei mir einbisschen für
Bauchschmerzen. Werde es mir aber zur Brust nehmen und
umsetzen (auch wenn ich es eigentlich nicht möchte).

glaube uns, es IST besser.

Mit SQL meinte ich natürlich den Einsatz von SQL-Server, wie
Franz richtig vermutet hatte.

ok, tut aber weiter nichts zur Sache.

Dass bei jedem Vor und zurück Navigieren im Formular oder
Suchen die Formularabfrage von Access selbstständig
aktualisiert wird, halte ich für ein Gerücht.

NEIN, das ist KEIN Gerücht.

Das hatte ich
nämlich ausprobiert und es geht nicht.

Du interpretierst etwas falsch: Speichern in eine Tabell und das Anzeigen des Tabelleninhaltes sind zwei Paar Stiefel.

Daten die am
Arbeitsplatz1 (AP1) über das Formular erfasst wurden, können
nicht auf dem Arbeitsplatz2 (AP2) eingesehen werden, wenn das
Formular bereits vor dem Abspeichern am AP1 geöffnet wurde.

Stimmt nicht.

Hierzu hatte ich bereits das Me.REQUERY eingebaut, welches mir
bei bestimmten Aktionen im Formular die Abfrage aktualisiert.

WO hast Du das eingebaut? Bei welchen „Aktionen“ (falls Du damit Ereignisse meinst)?

Soweit ich es gelernt habe, wird mit dem Öffnen von Abfragen
eine temporäre Abfragetabelle geöffnet (Formularabfragen sind
auch nur Abfragen).

WO öffnest Du denn Abfragen (hier in den Beispielen)?

In dieser werden dann die Änderungen
erfasst und zugleich in die „richtige“ Tabelle erfasst. Es
erfolgt dabei aber kein Abgleich zw. der richtigen Tabelle und
der temporären Abfragetabelle.

??? ist unverständlich.

Wodurch geänderte Datensätze
von anderen Abfrage-„Aktionen“ nicht in meiner temporären
Abfragetabelle erscheinen.

???

Hierzu muss ein Requery erfolgen
und dies erfolgt nach meinem mir beigerachten Wissenstand über
das schliessen und öffnen der temporären Abfragetabelle.

In den Access-Optionen gibt es eine Eigenschaft „Aktualisierungsintervall“. Das bestimmt den Aktualisierungsabstand z. B. in einer Abfrageansicht oder auch des Formulares, wenn Daten in der enstpr. Tabelle von woanders aus geändert wurden. (Betrifft NICHT neu in die Tabelle eingefügte Datensätze.

Das
geht schneller als der Vergleich von vorhandenen und nicht
vorhandenen Datensätzen (hab ich, hab ich nicht, hab ich, hab
ich, hab ich nicht) in meiner Abfragetabelle.

??? verstehe ich nicht. Was bedeutet „Vergleich“

Da ich aber bei der Verwendung von „vielen“ einzel Tabellen
keinen Filter auf die Tabelle anwenden muß geht das Neuöffnen
der Abfragetabelle schneller, als wenn ich eine Tabelle habe
und erst den Filtern drüberlegen muß.

Stimmt nicht. Das Filtern einer Tabelle (—> Angabe von Kriterien in einer Abfrage) hängt vom Aufbau der Tabelle und dem „Filteroperator“ ab. D. H. Felder, nach denen gefiltert wird ( auf die ein Kriterium angesetzt wird) sollten indiziert sein. Dabei sind numerische Filtervorgänge am schnellsten, alphanumerische langsamer. Am langsamsten ist der LIKE (WIE) -Operator , weil der massive Zeichen(Text)verarbeitung benötigt und nicht auf Indizierungen zurückgreifen kann.

Das Filtern ist ja auch nur das Überprüfen jedes einzelnen
Datensatzes ob er den geforderten Kriterien entspricht, damit
dieser in die temporäre Abfragetabelle geschrieben werden
darf. Ist diese Tabelle dannoch mit einer Anderen verknüpft
erfolgt auf diese ebenfalls ein Filter um den Zugehörigen
Datensatz zufinden.

Das solltest Du die Sorge der Jet-Engine ( Accesss-DB-System) sein lassen. Die SQL (Abfragen) werden intern passend optimiert.

Das geht natürlich wahnsinnig schnell mit den heutigen
Rechnern. Aber es ist schon ein unterschied ob 1.000 oder
50.000. Ok es sind nur Millisekunden wenn der Prozessor gerade
nichts anderes zutun hat. Aber trotzdem *schmoll*

Das gleiche gilt übrigens auch in der Programmierung, bei der
heutigen Technik ist es vielen Programmierern egal ob 50.000
Zeilen Quellcode oder 1.000 Zeilen für das gleiche Ergebniss
brauchen. Haben doch genug Prozesorleistung und RAM zur
Verfügung. Diese Diskussusion schweift jetzt aber vom Thema ab
also schluß damit :wink:

ok, das ist hier wirklich nicht das Thema.

Sollte ich das falsch sehen, lasse ich mich gerne belehren.

„belehren“ will Dich keiner… :wink: , nur besser aufklären.

Stell Dir einfach die Sachlage so vor:

Wenn ein Formular in seiner Datenherkunft eine Abfrage oder Tabelle enthält (oder auch dynamisch per Code zugewiesen bekommt), wird beim Öffnen (Laden) des Formulares ein Formular-Recordset erstellt, der die durch die Abfrage gefilterten Datensätze enthält. Dieser Recordset wird durch den User während der Formularbedienung bearbeitet. Sobald nun ein Datensatzwechsel oder das Schliessen des Forms stattfindet, wird der akt. Recordset-Datensatz in die Tabelle geschrieben, sofern man das selber nicht anderweitig unterbunden hat.

Zu diesem Zeitpunkt ist ein Form auf einem anderen PC (User) , das den selben Datensatz anzeigt, noch nicht aktualisiert, das passiert erst nach Ablauf des o. g. Aktualisierungsintervalls. Es kann Situationen geben, bei denen der Datensatz (oder Teile davon) anderweitig angezeigt wird, z. B. in einem Listenfeld oder Kombifeld. Dann ist ein explizites Requery dieses Feldes nötig.

Ein Requery (Refresh tut es auch…) für das Formular auf dem anderen PC kann man natürlich trotzdem durchführen, wenn man es tun möchte. Dabei sollte aber auch das für die spezielle Situation geeignete Ereignis gewählt werden.

Ein Filter auf den Formular-Recordset ist in der Tat langsamer als ein Filter (Kriterium) auf eine Abfrage. Aber da spielt die o. g. Rechner-Schnelligkeit stärker mit hinein.

Alles in Allem passiert im Hintergrund wesentlich mehr an „Datenverarbeitung“ als man als User am Monitor überhaupt erkennen kann.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo,

erstmal mit Aktionen meine ich Ereignisse, umgenauer zusein _Click()
Beispiel:
____________________________________
Private Sub vorheriger_Click()
Dim lngStore As Long

lngStore = Me!ID
Me.Requery
Me.Recordset.FindFirst "Id = " & lngStore
End Sub

____________________________________

Das (oder Den?) Requery führe ich durch, um den Aktualisierungsinterval zu umgehen und bin damit sofort auf dem Neustenstand und muss nicht erst „warten“.

Bis her bin ich davon ausgegangen, dass wenn ich ein Formular öffne, im Hintergrund eine Abfrage auf die am Formular beteiligten Tabellen erfolgen und somit eine temporäre (im Speicher) Abfragetabelle erstellt wird.

Beim Filtern meine ich mit Vergleich, dass jeder Datensatz überprüft wird ob das Filterarrgument mit dem für die Filterung relevante Zellen des Datensatzes übereinstimmt.
Z.B. Ich habe eine Tabelle mit 100 Datensätzen, es soll ein Filter auf die Spalte „Ort“ durchgeführt werden. Es sollen alle Datensätze angezeigt werden die als Ort den Eintrag „Wismar“ haben.
Jetzt überprüft/„vergleicht“ das Accesss-DB-System jeden einzelnen Datensatz ob der entsprechende Eintrag in der Spalte Ort mit dem Filterarrgument übereinstimmt, da es ja noch nicht weiss, wie viele es sind und in welchem Datensatz es steht.
Für den User ist das Vergleichen des einzelnen Datensatzes mit dem Filterarrgument als einzel Schritt natürlich nicht warnehmbar (die Anzahl der Datensätze und der Anzuwenden Filterarrgumente sind im nachhinein ausschlaggebend).

Mein Hauptgedanke bei dem Verwenden von vielen Tabellen (je Gemeinde eine Tabelle) in einer Datenbanken war eigentlich, dass ja mehrere User zugleich auf die DB zugreifen und diese eher selten auf die gleichen „Gemeinde“ zugreifen und somit der zahlenmäßige gleichzeitige Zugriff von Usern auf eine Tabelle gering halten wollt. Verwende ich eine Tabelle greifen z.B. 7 User zugleich auf diese eine zu und es gibt damit 7 Datensatzsperrungen anstatt vieleicht 2 pro Tabelle bei der Aufsplittung von Tabellen.
Die Performenz war eigentlich hintergründig und nur in Bezug auf die mögliche Gesamtanzahl der Datensätze in naher Zukunft in betracht gezogen worden.

Nach deiner Ausführung, werde ich für das Verwenden von einer Tabelle eine zweite Verknüpfen, in der ich den Gemeindenamen (alphanummerisch) eintrage und von dieser den Index (nummerisch) mit den entsprechenden Datensätzen in die Haupttabelle verknüpfen.

Grüße von der Sonnigen Ostseeküste
Ricardo