Juni 24, 2021, 19:44:20

Neuigkeiten:

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


Erstellung neue DB - Erstellen von Tabellen/Abfragen

Begonnen von methew1966, März 28, 2021, 17:59:01

⏪ vorheriges - nächstes ⏩

methew1966

Moin alle miteinander,


da ich hier schon oft professionelle Hilfe erhalten habe, wende ich mich heute wieder einmal an euch. Kurz mein Plan. Ich möchte in einem Kraftwerk diverse Rohre durch Wandstärkenmessung analysieren. Dies passiert in der Regel 1 x im Jahr (Datum). Um es zu visualisieren muss ich etwas ausholen. Es gibt viele Messpunkte. Diese habe ich schon deklariert mit einer Verkettung. Beispiel Überhitzer 1 (1-4) - Scheibe 1 (1-18) - Reihe 1 (1-19) - Ebene 1 (1-6) und Seite L (Links oder rechts).In diesem Beispiel  heißt der Meßpunkt Ü1_S1_R1_E1_L. In Klammern immer die Möglichkeiten - es kommen einige 1000 Messpunkte raus). Ich möchte einmal im Jahr Messungen durchführen und dafür über Filter Tabellen erstellen für die anstehenden Meßpunkte, also Datum, Messpunkt und natürlich dann der Meßwert. Diese Meßpunkte sollen mir dann natürlich die Verringerung zur letzten Messung erbringen.
Hat jemand eine Idee? Funktioniert das mit Access. Ich denke mal eher, als mit Excel. Ich weiß nur noch nicht genau, wie ich es angehe?

Vielen Dank schonmal im Vorraus

Gruß Methew

MzKlMu

Hallo,
4x18x19x6x2=16.416 Messpunkte. Ist das richtig ?
Gruß
Klaus

methew1966

jo, es werden natürlich nie alle meßpunkte gemessen.... immer nur relevante bereiche

MzKlMu

Hallo,
kann man die Messpunkte diesen Bereichen zuordnen die immer gleich sind ?
Kann man das in eine Regel fassen ?

Es muss ja nach Möglichkeit ein sinnvolle Auswahlmöglichkeit geben, damit man nicht jedes mal die relevanten Messpunkte aus den 16.426 auswählen muss.

Bitte bemühe Dich um ausführliche Antworten, diese lapidaren Kurzantworten helfen Dir nicht.
Und bitte immer alle Anforderungen nennen.

Gruß
Klaus

crystal

Hallo Methew,

über 16.000 Messpunkte wären schon recht viel, aber ich denke, dass es real weit weniger sind, da nicht alle möglichen Kombinationen auch vorkommen können.

Da stellt sich zunächst die Frage, wie diese Messpunkte überhaupt einigermaßen elegant erstellt werden sollen, ohne schon Messergebnisse einzugeben. Denn willst du "Tabellen" erstellen (ich denke, du meinst hier so etwas wie Arbeitszettel"), müssen die Messpunkte ja schon existieren - sonst kannst du nicht danach filtern.

Es ist natürlich recht einfach, eine Datenbank-Tabelle "Messpunkte" zu erstellen, in der zu jedem Messpunkt (Autowert oder Kürzel als Schlüssel) die o. g. Attribute eingetragen werden, jeweils referenziert aus einer entsprechenden Tabelle, und diese Tabelle manuell zu füllen.

Ich würde hier eher etwas anders vorgehen. Erstelle zunächst Tabellen für die verschiedenen Attribute, also z. B. eine Tabelle "Ueberhitzer" (Autowert als Schlüssel oder einfach "Ü" gefolgt von einer laufenden Nummer (einstellig reicht hier ja).

Nun erstellst du ein ungebundenes Formular mit 4 Listboxen (jeweils mit Multiselect). Das würde dann grob so aussehen:
Ü1  S01  R01  E1
Ü2  S02  R02  E2
Ü3  S03  R03  E3
Ü4  S04  R04  E4
    S05  R05  E5
    ...  ...  E6
    S18  R19

Nun könntest du die einzelnen Einträge der Listboxen markieren, zusätzlich L oder R (oder beides) auswählen (Häkchen), etwas so (* = Eintrag ist selektiert):
Ü1  S01*  R01   E1*
Ü2* S02   R02*  E2
Ü3* S03   R03*  E3*
Ü4  S04*  R04*  E4
    S05   R05   E5*
    ...   ...   E6
    S18   R19

Das würde also folgende Messpunkt-Kennungen für Ü2 ergeben (jeweils noch mit L oder R ergänzt):
ü2-s1-r02-e1
"         e3
"         e5
"     r03-e1
"         e3
"         e5
"     r04-e1
"         e2
"         e3
ü2-s4-r02-e1
"         e3
"         e5
"     r03-e1
"         e3
"         e5
"     r04-e1
"         e2
"         e3

Überlegung dabei: nicht alle Kombination kommen vor. 

Über eine Button "Anlegen" könntest du nun per VBA mittels SQL-INSERT entsprechende Einträge in die Messpunkt-Tabelle machen (vorher prüfen, ob ein entspr. Messpunkt schon existiert). Einen solchen Button müsstest du nach Änderungen der Selektionen in den Listboxen klicken. (Hinweis: je Listbox muss immer mindestens 1 Eintrag selektiert sein.)

Auch das ist noch ein etwas mühsames Unterfangen, wenn sich die Kombinations-Möglichkeiten deutlich unterscheiden.

Daher und als Ergänzung:
Erzeuge notfalls auch zu viele Messpunkte und lösche in einem entspr. Formular diejenigen, die nicht existieren und gebe weitere Daten ein (Bezeichnung, Ort etc.).


ALTERNATIVE:
Erstelle in Excel eine Messpunkt-Tabelle mit allen Kombinations-Möglichkeiten, bearbeite diese Tabelle in Excel (einzelne Zeilen löschen) und importiere den Rest in Access. Wäre vielleicht etwas schneller und einfacher...

Am Ende der Fleißarbeit hast du dann eine Messpunkt-Ur-Tabelle mit bis zu 16.416 Einträgen, real wahrscheinlich deutlich weniger.

Zur Vorbereitung einer Messung kopierst du nun alle Messpunkte aus der Ur-Tabelle mit einem zusätzlichen "Plan-Datum" in eine Messdaten-Tabelle; hier reicht es, eine Referenz auf die Messpunkt-Ur-Datei zu speichern. Jetzt kannst du Listen anhand dieser Tabelle drucken, die z. B. hinsichtlich Ü oder Ort gefiltert sind. Oder du nimmst einen Laptop zur Messung mit, wählst den Messpunkt und trägt den Wert ein (inkl. Name, evtl. Bemerkungen). Evtl. wäre es auch möglich, das Messgerät anzuschließen und den Messwert zu übernehmen.

Gruß,
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

methew1966

Ja, es wäre Zum Beispiel für die Messung an einem Tag gedacht eine Tabelle (Bericht ) zu erstellen, wo Überhitzer 1 alle Scheiben  in Reihe 1 in allen Ebenen links und rechts enthalten sind und gemessen werden , also praktisch über eine Abfrage Ü1_S*_R1_E*_S*(L und R). Sind dann 216 Meßpunkte. Am folgenden Tag wäre es dann die letzte Reihe, also Reihe 19
Ü1_S*_R19_E*_S*(L und R)

methew1966

Danke, das hilft mir beim Anfang/Konzept schonmal weiter...Ja , ich habe die Meßpunkte alle schon mit Exceel erstellt und in Access importiert. Jetzt brauchte ich eben nur noch die Möglichkeit, mir meßpunkte zu erfiltern und dann mit entsprechenden Datum und dem Meßwert zu vervollständigen.

Ich fange  mit euren tips, für die ich sehr dankbar bin, mal an und werde schauen, wie weit ich  kommen....

Danke an alle

MzKlMu

März 29, 2021, 00:43:15 #7 Letzte Bearbeitung: März 29, 2021, 15:35:27 von MzKlMu
Hallo,
ich würde das wie folgt machen.
Je eine Tabelle erstellen für
- Überhitzer
- Scheibe
- Reihe
- Ebene

Jeweils ein Feld für die Zahl (Nr) und ein Feld für den Buchstaben.
Dann noch eine Tabelle für die Seite, nur ein Feld für L und R.

Eine Tabellenerstellungsabfrage mit allen 5 Tabellen ohne Verknüpfung erstellt dann alle 16416 mögliche Kombinationen auf einen Schlag.
SELECT ÜText, Ü_Nr, SText, S_Nr, RText, R_Nr, EText, E_Nr, Seite,
[ÜText] & [Ü_Nr] & "_" & [SText] & [R_Nr] & "_" & [RText] & [E_Nr] & "_" & [EText] & [S_Nr] & "_" & [Seite] AS Messpunkt INTO Messpunkte
FROM Scheibe, Überhitzer, Reihe, Ebene, Seite
ORDER BY Ü_Nr, S_Nr, R_Nr, E_Nr, Seite
Die 5 Tabellen können dann gelöscht werden.
Das ist dann der Messpunktvorrat.
Dann wird eine Tabelle benötigt für die eigentlichen Messungen. Das ist vom Aufbau die gleiche Tabelle wie die Messpunkte ergänzt um eine Datumsfeld und ein Feld für den Messwert.
Mit einer Anfügeabfrage werden aus der Messpunkttabelle die gewünschten Messpunkte in diese Tabelle übertragen. Die Abfrage füllt das Messdatum mit dem heutigen Datum und einem leeren (NULL) Feld für den Messwert.
Mit dem Beispiel aus #5 (216 Messpunkte) ergibt sich folgende gefilterte Anfügeabfrage:
INSERT INTO Messungen ( Seite, Messpunkt, Ü_Nr, S_Nr, R_Nr, E_Nr, Messdatum, Messwert )
SELECT Seite, Messpunkt, Ü_Nr, S_Nr, R_Nr, E_Nr, Date() AS Messdatum, Null AS Messwert
FROM Messpunkte
WHERE Seite Like "*" AND Ü_Nr=1 AND S_Nr>0 AND R_Nr=1 AND E_Nr>0
ORDER BY Ü_Nr, S_Nr, R_Nr, E_Nr, Seite
Gruß
Klaus

crystal

Hallo Methew,

zunächst Mal sorry. Ich musste leider unerwartet für ein paar Tage ins Krankenhaus. Deshalb erst heute als Osterei

meine Fast-Komplett-Lösung.

Ähnlich wie MzKlMu habe ich für alle Attribute (enschließlich Position = L/R) je eine Tabelle erstellt.
Aus Macht der Gewohnheit habe ich diesen Tabellen jeweils einen Autowert als Schlüssel verpasst,
das wäre auch einfacher gewesen, indem man den Text (z.B. Ü1) direkt als Primärschlüssel beutzt.

Zwei weitere Tabellen: MessPunkte und MessWerte.
In MessPunkte stehen die 16416 verschiedenen Messpunkte; ein Autowert ist Primärschlüssel, die 5 Attribute sind Datenfelder mit Referenz auf die jeweilige Attribut-Tabelle und die zusammengesetzte Messpunkt-Bezeichnung (z.B. Ü1-S01-R01-E1-L) ein weiteres Textfeld.
Anders als MzKlMu und nicht so elegant kann ich mit "Formular1" all diese Messpunkte anlegen - ganz primitiv mit 5 verschachtelten Loops. Bitte das Formular NICHT benutzen!
Anmerkung: für die Attribute Großbuchstaben zu benutzen, ist nicht so elegant, da man beim manuellen Eingeben immer die Umschalt-Taste drücken muss; gleiches gilt für dein Trennzeichen "_". ist aber nicht mehr so wichtig, da ja alles per Kombobox auszuwählen ist, wenn die Attribute und Messpunkte erstmal erstellt sind.

Das Formular "FormularMachAlles" dient dazu, "irgendwas" aus den 5 Attributen (Komboboxen) auszuwählen, kurz zu zählen, wie viele Messpunkte das sind (Schritt 1), dann das Messdatum einzugeben und die betreffenden Messwert-Zeilen in die Tabelle Messwerte einzutragen (Schritt 2), die dann gleich wieder angewählt werden können, um Werte einzutragen (Schritt 3).

Um beim Anlegen der Messpunkt-Wert Duplikate zu vermeiden, habe ich in Tab. MessWerte einen Index auf MessPunkt-Referenz und Datum gelegt und im VBA-Code die Meldungen unterdrückt (on error resume next). Das bedeutet aber leider, dass NICHT alle fehlenden Messpunkte angelegt werden, wenn von z. B. 12 möglichen 3 fehlen sollten. Dazu müsste man das mit einem Recordset-Loop über im Beispiel alle 12 möglichen Punkte machen; wäre immerhin recht einfach möglich, weil der SQL-WHERE-Text ja noch zur Verfügung steht...

Statt Attribute zu wählen, ein Datum einzugeben und dann Schritt 1 und Schritt 2 zu klicken, kann man nach Eingabe des Messdatums auch gleich Schritt 3 klicken. wenn zu dem Datum keine Messpunkte gefunden werden, wird auch nichts angezeigt (noch nicht getestet). In der Demo-DB gibt es ein paar wenige Messpunkte für 27.3. und 1.4.2021.


Dieses Formular bzw. die Auswahl-Technik könnte auch dazu dienen, Messwert-Punkte mit ihren Werten auszuwählen (dann ohne vorgegebenes Datum) und an Excel zu exportieren oder einfache Linien-Grafiken mit Access zu erzeugen. Auch könnte man einen Button "Drucken" hinzufügen, der das gesamte Formular inkl. sich verlängerndem Ufo an einen Drucker schickt...

Im VBA-Code bzw. in der Herkunft der Komboboxen (SQL-UNION) verbergen sich einige kleine Tricks. So "merke" ich mit den zusammengebastelten SQL-WEHERE-Text aus Schritt 1 in einer Modul-Variablen, um ihn in Schritt 2 wieder benutzen zu können. Statt die Attribut-Werte mühsam zu übersetzen hole ich sie mit qryMessWerte gleich per JOIN aus den Attribut-Tabellen, entspr. für die Messpunkt-Kennung.
Damit im Ufo der Cursor nach Eingabe eines Messwerts gleich auf das Messwert-Feld des nächsten Datensatzes springt, habe ich in "Nach Änderung" ein "goto next record" eingefügt und das Feld in der Aktivier-Reihenfolge als erstes gesetzt; das erleichtert die manuelle Eingabe der Werte.

Viel Spaß beim Testen!

Gruß und schöne Ostern,
crystal


Nota bene: dies ist nur eine einfache Demo; wegen meiner Krankheit habe ich nur wenig Kraft, das schöner zu machen. Aber es ist ein ganz gut gelungener Anfang, wie ich meine.
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...