Hallo liebe Access-Maniacs,
ich habe ine einer Abfrage aus zwei Tabellen ein Feld erzeugt, dass sich aus den Werten mehrerer Tabellenfelder zusammensetzt GZ: "UA-" & [Kennziffer] & "-" & Format([ZaehlNr];"000") & "-" & Format([ZaehlNrV];"0000"). Nr und NrV sind jeweis aus verschiedenen Tabellen. Nun möchte den enstandenen Wert (UA-.....) unveränderlich in eine der Tabellen speichern, da ich bemerkte, dass sich beim Filtern der Werte z.B. nach der Kennziffer, die Zählnummern veränderten. Daher müssen die Werte unveränderlich in eine der beiden Tabellen geschrieben werden. Wie kann ich das anstellen? Über eine Anfügeabfrage hat es nicht geklappt. Vielen Dank im voraus...
Zitatda ich bemerkte, dass sich beim Filtern der Werte z.B. nach der Kennziffer, die Zählnummern veränderten
Es passiert das, was Du programmierst hast. Beim Filtern wird nur die Anzahl der angezeigten Datensätze geändert, nicht aber die Berechnung selber. Überprüfe Deine Berechnung.
Grundsätzlich ist die Speicherung von berechneten Werten sehr zu durchdenken und in der Regel zu unterlassen, weil sich nachträglich über Löschen, Editieren und Anfügen an den Ursprungsdaten Anomalien ergeben können. Daneben setzen sehr viele mit höchster Begeisterung Informationen zu Konstrukten zusammen, wenn sie daraus aber wieder Einzelinformationen benötigen (und das beginnt schon mit einem simplen Sortieren) dann scheitern sie oder sie ertrinken im zusätzlichen Aufwand.
Kannst Du auch den Horizont sehen, oder schaust Du nur auf die Schuhspitzen?
Danke für deine Antwort. Wenn das berechnete Feld eine Schlüsselnummer bildet, die aus mehreren Datensatz-Zählern zusammengesetzt ist, verändert eine Filterung die Anzahl der angezeigten Datensätze und damit verändern sich die Werte der Zähler. Daher würde ich das berechnete Feld nach der Erstellung des Schlüssels gern in einem Tabellenfeld speichern, um diese Veränderung zu verhindern. Egal, ob man das so macht oder nicht. Auch Donkarl bemerkte, dass es Situationen gibt, die so etwas notwedig machen.
Ich möchte doch nur wissen, wie ich das machen kann. Die Erstellung des Schlüssels funktioniert problemlos und reicht für meine Zwecke. Ich würde nur zusätzlich gern nachträglich per Filter Gruppen von Schlüsseln zusammenfassen können.
ZitatWie kann ich das anstellen?
Technisch: Aktualisierungsabfrage (trägt Inhalte in bestehende Datensätze ein), oder Recordset mit Edit.
Hallo,
Irgendwie verstehe ich es nicht.
ZitatNr und NrV sind jeweis aus verschiedenen Tabellen
Felder nehme ich doch an. Da ist doch ein Wert gespeichert. Wie kann der
sich bei einer Filterung verändern?
gruss ekkehard
Hallo,
ZitatWenn das berechnete Feld eine Schlüsselnummer bildet,
wenn damit ein echtes Schlüsselfeld (PS/FS) gemeint ist, geht das mit berechneten Feldern ohnehin nicht.
Zitatverändert eine Filterung die Anzahl der angezeigten Datensätze und damit verändern sich die Werte der Zähler.
Wenn der Zähler von der Filterung abhängt hast Du auch was falsch gemacht.
Kannst Du mal ein Bild des Beziehungsfensters zeigen ?
Zitat von: Beaker s.a. am Januar 26, 2023, 14:24:32Hallo,
Irgendwie verstehe ich es nicht.
Felder nehme ich doch an. Da ist doch ein Wert gespeichert. Wie kann der
sich bei einer Filterung verändern?
Ja, Felder.
Gerade verstehe ich es auch nicht... Ich habe zwei Abfragen erstellt, um meinen "Schlüssel" zu generieren. Die eine hat nur die allernotwendigsten Felder zum Testen. Bei der anderen habe ich alle verfügbaren Felder mitgenommen, um dann das Ergebnis in einem Formular anzuzeigen. Die erste generiert den Schlüssel und auch das Filtern funktioniert, ohne dass sich die Werte ändern :o . Die andere also die große Abfrage erstellt auch den Schlüssel, aber zeigt beim Fitern veränderte Werte... Irgendwo habe ich einen Fehler, aber wo....?
Hallo,
ZitatWerte... Irgendwo habe ich einen Fehler, aber wo....?
Dem Fehler könnte man auf die Spur kommen wenn Du zeigst was Du machst (Abfrage als SQL).
Und ein Bild des Beziehungsfensters wäre auch hifreich.
Zitat von: MzKlMu am Januar 26, 2023, 14:30:20Kannst Du mal ein Bild des Beziehungsfensters zeigen ?
Ich hoffe, du kommst damit klar...
Screenshot 2023-01-26 145501.png
Danke erstmal...
Hier gibt es den Fehler
SELECT tblAkte.ID, tblVorgang.IDv, tblAkte.Kennziffer, tblAkte.Aktenbetreff, tblAkte.AkteHybrid, tblAkte.angelegtAm, tblAkte.angelegtVon, tblAkte.Bearbeiter, tblVorgang.BearbeitungDurch, tblAkte.Schließvermerk, tblAkte.Link, tblAkte.Institution, tblAkte.Anfrageort, tblAkte.Bemerkungen, tblAkte.verknuepftAkte, tblVorgang.IDv, tblVorgang.FKAkte, tblVorgang.hybrid_Vorgang, tblVorgang.Vorgangsbetreff, tblVorgang.angelegtVon, tblVorgang.angelegtAm, tblVorgang.Schließvermerk, tblVorgang.BearbeitungDurch, tblVorgang.Link, tblVorgang.Anfrageort, tblVorgang.Bemerkungen, tblVorgang.InhaltlAblauf, tblVorgang.verknuepftVorgang, (Select Count (*) FROM tblAkte AS temp WHERE temp.Id < tblAkte.Id AND temp.Kennziffer=tblAkte.Kennziffer)+1 AS ZaehlNr, (Select Count (*) FROM tblVorgang AS temp WHERE temp.IDv < tblVorgang.IDv AND temp.FKakte=tblVorgang.FKakte)+1 AS ZaehlNrV, "UA-" & [Kennziffer] & "-" & Format([ZaehlNr],"000") & "-" & Format([ZaehlNrV],"0000") AS Geschaeftszeichen, Trim("UA-" & [Kennziffer] & "-" & Format([ZaehlNr],"000")) AS GZAkte
FROM tblAkte INNER JOIN tblVorgang ON tblAkte.ID = tblVorgang.FKAkte;
Die Abfrage
SELECT tblAkte.ID, tblAkte.Kennziffer, (Select Count (*) FROM tblAkte AS temp WHERE temp.Id < tblAkte.Id AND temp.Kennziffer=tblAkte.Kennziffer)+1 AS ZaehlNr
FROM tblAkte;
Und die Abfrage:
SELECT tblVorgang.IDv, tblVorgang.FKAkte, (Select Count (*) FROM tblVorgang AS temp WHERE temp.IDv < tblVorgang.IDv AND temp.FKakte=tblVorgang.FKakte)+1 AS ZaehlNrV
FROM tblVorgang;
bilden zusammen diese "filterbare" Abfrage:
SELECT qryZaehlerAkte.ID, qryZaehlerVorgang.IDv, qryZaehlerAkte.Kennziffer, qryZaehlerAkte.ZaehlNr, qryZaehlerVorgang.ZaehlNrV, Trim("UA-" & [Kennziffer] & "-" & Format([ZaehlNr],"000") & "-" & Format([ZaehlNrV],"0000")) AS Geschaeftszeichen, Trim("UA-" & [Kennziffer] & "-" & Format([ZaehlNr],"000")) AS GZAkte
FROM qryZaehlerAkte INNER JOIN qryZaehlerVorgang ON qryZaehlerAkte.ID = qryZaehlerVorgang.FKAkte
ORDER BY qryZaehlerVorgang.IDv DESC , Trim("UA-" & [Kennziffer] & "-" & Format([ZaehlNr],"000") & "-" & Format([ZaehlNrV],"0000"));
Hallo,
warum ist nicht bei allen Beziehungen RI eingestellt ?
Die Beziehung Kennziffer-Kennziffer ist falsch. Für Beziehungen ist der PS zu nutzen, dazu ist der da.
Abfragen haben in den Beziehungen nichts zu suchen.
Welches ist denn jetzt das Feld das Du zusammensetzen willst (Schlüssel) ?
Und mit welchen Feldern ?
ZitatAuch Donkarl bemerkte, dass es Situationen gibt, die so etwas notwedig machen.
DonKarl hat aber auch Argumente angeführt für das Speichern, aber keines dieser Argumente trifft auf Deinen Fall zu.
Die Abfragen zum Hochzählen von ZaehlNr und ZaehlNrV sind ungeeigenet, denn Du zählst ja immer hoch, völlig unabhängig ob das ein neuer Datensatz ist oder nicht.
Die Abfragen sind auch in der Form ersatzlos überfüssig, denn Hochgezählt wird mit
Me.ZaehlNr = DMax("ZaehlNr","Tabellenname","Whereklausel") +1
Als Where Klausel ist die gleiche wie in den unnötigen Abfragen zu verwenden, ohne das Schlüsselwort "Where".
Der Code kommt in das Ereignis bei Fokuserhalt eines auszufüllenden Pflichtfeldes.
Es ist auch noch zu prüfen, ob das ein neuer Datensatz ist. Die ZaehlNr und ZaehlNrV müssen gebundene Felder im Formualr sein.
Zusammengefasst sieht das dann etwa so aus:
Private Sub Feldname_GotFocus()
If Me.NewRecord = True Then
Me.ZaehlNr = Nz(DMax("ZaehlNr", "Tabellenname", "Whereklausel), 0) + 1
End If
End SubAnalog auch für ZaehlNrV.
Da verändert sich der Zähler nicht mehr und der Schlüssel muss nicht gespeichert werden.
Oh, Gott. Vielen Dank. Ich hoffe, ich kann das umsetzen....
Schlüssel ist Geschaeftszeichen
Es setzt sich so zusammen: "UA-" & [Kennziffer] & "-" & Format([ZaehlNr],"000") & "-" & Format([ZaehlNrV],"0000"
z.B. Akte1/1. Vorgang: UA-2634(festgelegte Kennziffer)-001-0001
Akte 1/2. Vorgang: UA-2634-001-0002
Akte 2/1. Vorgang: UA-0111-001-0001
zweite Akte mit gleicher Kennziffer/1. Vorgang: UA-2634-002-0001 usw.
Ich hoffe, das ist verständlich
Das Procedere ist folgendermaßen: Man legt eine neue Akte an, wählt die entsprechende Kennziffer aus dem Aktenplan (Kombifeld) aus, vergibt Erstellungsdatum, Ersteller, Aktenbetreff, Bearbeiter, etc.... Zu jeder Akte werden Vorgänge (verknüpft über die ID) erstellt (Post, Emails, Anträge, ...) Durch die in den Abfragen erstellten Regeln wird ein Geschäftszeichen generiert, unter dem jeder Vorgang eindeutig benennbar ist. Im Nachhinein können Akten und Vorgänge editiert werden, das Geschaeftszeichen ist fest.
Eine weitere Ausbaustufe ist dann, dass jeder Bearbeiter nur seine (als Bearbeiter) Vorgänge einsehen kann und diese bearbeiten (den Vorgangsablauf beschreiben, etc.) kann.
Durch die Filter sollen komfortabel Kennziffern bzw. Geschäftszeichen zusammen gefasst und gesucht werden
Ich habe bisher mit Access nur fertige csv-Datenbanken verknüpft und über Formulare einsehbar gemacht. Hab auch mal ein Makro geschrieben. Aber das ist iwie schon Neuland für mich... ;)
Ich kann ja mal die Datenbank schicken, so wie sie jetzt ist (schäme mich ja schon fast...)
Die Daten, die drin sind, sind nur Dummies... :)
ZitatZu jeder Akte werden Vorgänge (verknüpft über die ID) erstellt (Post, Emails, Anträge, ...) Durch die in den Abfragen erstellten Regeln wird ein Geschäftszeichen generiert, unter dem jeder Vorgang eindeutig benennbar ist. Im Nachhinein können Akten und Vorgänge editiert werden, das Geschaeftszeichen ist fest.
Ich weiss ja nicht, aber ein Geschäfts- oder Aktenzeichen ist doch auch eindeutig, steht bei mir
jedenfalls immer das gleiche drauf bei Schreiben von Ämtern zu einer Akte. Die Vorgänge/Dokumente
erhalten doch nur eine fortl. Nummer, - die Beziehung zur Akte hast du ja schon über die AktenID.
Diese Nummer kannst du speichern (festlegen) und in einer Abfrage mit anderen Komponenten zur
Ausgabe zusammensetzen.
gruss ekkeard
Zitat von: Beaker s.a. am Januar 26, 2023, 18:16:30Ich weiss ja nicht, aber ein Geschäfts- oder Aktenzeichen ist doch auch eindeutig, steht bei mir
jedenfalls immer das gleiche drauf bei Schreiben von Ämtern zu einer Akte. Die Vorgänge/Dokumente
erhalten doch nur eine fortl. Nummer, - die Beziehung zur Akte hast du ja schon über die AktenID.
Diese Nummer kannst du speichern (festlegen) und in einer Abfrage mit anderen Komponenten zur
Ausgabe zusammensetzen.
Hmm, da hast du recht, aber die Vorgabe seitens der Leitung ist, dass innerhalb jeder Akte die Vorgänge neu durchgezählt werden sollen. Gerade das hat micht Tage gekostet. Das Durchzählen wäre auch für mich (fast) pillepalle gewesen. Die IDv zählt im Hintergrund (mehr oder weniger, da Autowert) die Vorgänge. Es sollten wohl mehrere Fliegen mit einer Klappe geschlagen werden, da man dann immer die Zahl der Vorgänge pro Akte feststellen kann.
ZitatIch habe bisher mit Access nur fertige csv-Datenbanken verknüpft und über Formulare einsehbar gemacht.
Da ist es doch schön, wenn Dir die Chefetage etwas gibt, wo Du spielen und lernen kannst. Hoffentlich gibt sie darüber hinaus auch Zeit und Unterstützung, insbesondere fachliche Unterstützung.
Zitat von: ebs17 am Januar 26, 2023, 22:21:36Da ist es doch schön, wenn Dir die Chefetage etwas gibt, wo Du spielen und lernen kannst. Hoffentlich gibt sie darüber hinaus auch Zeit und Unterstützung, insbesondere fachliche Unterstützung.
Wäre ja schön, wenn das nur zum Spielen wäre. Die Datenbank soll Anfang Februar produktiv werden. Fachliche Unterstützung ist ein Access2019-Buch. Lustig wirds, wenn ich dir sage, dass ich an einer Universität arbeite...
Nun, die Vorgabe(?), zweifach eine temporäre Anzahl an Datensätzen als Inhalt eines Geschäftszeichens aufzunehmen, ist schon ein inhaltlicher Leckerbissen und "qualifiziert" den Auftraggeber.
Zitatda man dann immer die Zahl der Vorgänge pro Akte feststellen kann
Hört sich an, als fällt man unmittelbar auf die Papierakte zurück, in der man nicht erst blättern, suchen und nachdenken muss.
Für eine elektronische Akte könnte man für ein fest erzeugtes Aktenzeichen immer Zusatzinformationen wie Fälle, offene Vorgänge, verbrauchte Frühstückssemmeln usw. per Abfrage(n) ermitteln und unmittelbar mitliefern.
Zitat von: ebs17 am Januar 27, 2023, 10:26:31Hört sich an, als fällt man unmittelbar auf die Papierakte zurück, in der man nicht erst blättern, suchen und nachdenken muss.
Für eine elektronische Akte könnte man für ein fest erzeugtes Aktenzeichen immer Zusatzinformationen wie Fälle, offene Vorgänge, verbrauchte Frühstückssemmeln usw. per Abfrage(n) ermitteln und unmittelbar mitliefern.
Ääh, wir sind das Archiv der Universität. Soviel zu dem Hang zum Papier...
Ich habe jetzt erstmal den Fehler gefunden, der die Zählung veränderte beim Filtern. Seitdem ich beim Erstellen von Ausdrücken in der Abfrage vor jede Feldbezeichnung die Herkunft gestellt habe: tblAkte![Kennziffer] usw., funktioniert es. Jedoch ist natürlich deine Variante die elegantere. Ich versuche mich da iwie reinzufitzen. Hab ja noch ein paar Tage...