Hallo liebe Community,
ich habe ein etwas komplexeres Problem. Ich erstelle gerade eine Datenbank die Messdaten zu verschiedenen Teilen (Welle und Gehäuse) beinhaltet. Nun möchte ich eine Welle allen Gehäusen gegenüberstellen, den Spalt zwischen beiden Teilen ausgeben lassen und das aber auch mit allen Wellen machen. Statisch (mit Hilfe einer weiteren Tabelle) habe das bereits schon geschafft, nun würde ich das ganze gerne automatisieren. Nutze ich dazu ein Formular, eine Abfrage, oder was ganz anderes? Als Info ich habe folgende Tabellen angelegt:
tblMessdatenWelle
tblMessdatenGehäuse
tblSeriennummern (Welle und Gehäuse zusammen)
tblPaarungen
VBA-Kenntnisse habe ich so gut wie keine und auch mit SQL ist es nicht soweit her. Ich hoffe, dass ihr mir dennoch weiterhelfen könnt. Vielen Dank schon mal!
Hallo,
die Tabelle Seriennummern verstehe ich nicht, was heißt hier Welle und Gehäuse zusammen ?
Die Messdaten einer Welle sind ja individuell für jede Welle, also gehört die Seriennummer in die Tabelle mit den Messdaten.
Wie viele Messdaten pro Welle werden denn erfasst ?
Und theoretisch könnte es ja so sein, dass alle Wellen allen Gehäusen gegenübergestellt wird um die günstigste Paarung zu finden.
Ich glaube auch nicht, dass Du eine statische Tabelle brauchst für die Paarungen.
Erkläre das also mal genauer.
Hallo
und willkommen im Forum!
Deine Frage ist etwas unklar.
Was willst du mit der Gegenüberstellung erreichen? Willst du zu einer Welle das Gehäuse finden, das am besten passt (kleinster Spalt)? Was soll geschehen, wenn du Messdaten neuer Wellen erfasst: ist dann eine zuvor gefundene optimale Paarung "tabu"? Soll eine einmal gefundene optimale Paarung "final" sein oder wie soll festgelegt werden, dass eine solche Paarung "final" ist, die betreffende Welle und das betreffende Gehäuse also aus dem Vorrat ungepaarter Bauteile herausgenommen werden?
Könnte man deine Frage als Aufgabe auch so formulieren:
1. finde zu einer Welle das optimale Gehäuse (kleinster Spalt) oder
2. finde zu einem Gehäuse die optimale Welle,
jeweils bezogen auf den aktuellen Bestand.
lg
crystal
Guten Morgen,
und erst mal vielen Dank für Euer Bemühen. Ich versuche mal eure Fragen der Reihe nach zu beantworten.
In der Tabelle tblSeriennummer werden die Seriennummern für Wellen und Gehäuse festgelegt (per Autowert). Diese nutze ich dann wieder in den tblMessDatenWelle, usw.
Pro Welle und Gehäuse werden einige Messdaten aufgenommen (bis zu 100). Für die Gegenüberstellung werden allerdings nur jeweils zwei Werte betrachtet (2x Wellendurchmesser + 2x Bohrungsdurchmesser im Gehäuse).
Ich möchte wie crystal bereits sagte, die beste Paarung finden = kleinster Spalt. Diese beiden Teile werden dann verbaut und stehen nicht mehr zur Verfügung. Dafür gibt es wiederum eine tblSpindel. Ich würde die Aufgabe daher mit
Zitat2. finde zu einem Gehäuse die optimale Welle,
jeweils bezogen auf den aktuellen Bestand.
beschreiben. Was für mich aber schon dem Idealzustand entspricht. Fürs erste würde es mir reichen eine automatische Gegenüberstellung aller Wellen und Gehäuse zu haben.
LG
Daniel
Hallo,
die Tabelle mit den Seriennummer würde ich mal als überflüssig bezeichnen, wenn das ohnehin Autowerte sind kann der Autowert auch in den jeweiligen Tabellen erzeugt werden.
Zitatdie beste Paarung finden = kleinster Spalt.
möchte ich bezweifeln.
Der kleinste Spalt könnte auch negativ sein und dann wäre das keine mögliche Paarung. Eine Welle die gerade mal 0,001 mm kleiner ist, passt auch nicht in das Gehäuse.
Das heißt, für mögliche Paarungen muss ein Grenzbereich angegeben werden wo es gerade noch zulässig ist.
Wie ist denn die jeweilige Tabelle mit den Messwerten aufgebaut, als 100 Datensätze oder 100 Felder ?
Wenn es 2 relevante Messwerte sind, wie hängen die zusammen, es muss ja eine Abhängigkeit vorhanden sein.
Messwert1Welle zu Messwert1Gehäuse
Messwert2Welle zu Messwert2Gehäuse
und nicht
Messwert1Welle zu Messwert2Gehäuse
Messwert2Welle zu Messwert1Gehäuse
Und wie kommen die Messwerte in die Accesstabelle, durch Import oder werden diese von Hand eingetragen.
Auch die Tabelle "tblSpindel" würde ich zunächst mal für überflüssig betrachten, das lässt sich auch mit einer Abfrage ermitteln.
Hallo,
aufgrund der Toleranzen der Welle und des Gehäuses ist immer sichergestellt, dass das Gehäuse größer als die Spindel ist. Ein negativer Spalt ist somit - wenn man Gehäuse - Welle rechnet - nicht möglich.
Die Messwerte stehen in Spalten, somit habe ich bis zu 100 Felder pro Tabelle. Der Zusammenhang
ZitatMesswert1Welle zu Messwert1Gehäuse
Messwert2Welle zu Messwert2Gehäuse
ist richtig, allerdings möchte ich ja aber auch folgendes vergleichen
Messwert1Welle1 zu Messwert1Gehäuse1
Messwert2Welle1 zu Messwert2Gehäuse1
Messwert1Welle1 zu Messwert1Gehäuse2
Messwert2Welle1 zu Messwert2Gehäuse2 usw und auch
Messwert1Welle2 zu Messwert1Gehäuse1
Messwert2Welle2 zu Messwert2Gehäuse1
Messwert1Welle2 zu Messwert1Gehäuse2
Messwert2Welle2 zu Messwert2Gehäuse2
Bisher erhalten wir die Messdaten in Form eines Messprotokolls als PDF-Datei. Daher müssen diese von Hand in die Tabelle eingetragen werden. Das das recht umständlich ist und sehr stark fehlerbehaftet ist, weiß ich. Ob und wie die Messdaten von der Messmaschine in eine Excel-Tabelle geschrieben werden können, muss ich klären. Wenn das möglich ist, könnte man ja diese Excel-Liste in Access verknüpfen. Wobei sich dann die Frage stellt ob die Messmaschine alle Messungen in eine Tabelle schreiben kann, oder aber für jede Messung eine eigene Tabelle geschrieben wird.
Die Tabelle "tblSpindel" ist wichtig, da dort alle verbauten Teile festgehalten werden und somit nicht nur eine Auswertung über den Spalt zwischen Welle und Gehäuse gemacht werden kann.
Hallo,
ZitatDie Messwerte stehen in Spalten, somit habe ich bis zu 100 Felder pro Tabelle.
Damit ist Dein Vorhaben nicht umsetzbar. Das ist Excelgestaltung und für eine Datenbank völlig ungeeignet. Die Messwerte müssen als Datensätze vorliegen, also nicht 100 Felder, sondern 100 Datensätze. In die Tabelle muss dann noch ein Feld zur Kennzeichnung der für die Paarung notwendigen 2 Messwerte, sowei ein Kennzeichen ob Welle oder Gehäuse. Dabei ist darauf zu achten, dass die Messwertpaarungen sinnvoll sind.
Weiterhin wird eine Tabelle benötigt für Wellen und Gehäuse, mit einem Autowert als Seriennummer. Die Messwerte benötigen dann einen Fremdschlüssel zu diesem Autowert (Datentyp: Longinteger).
Die Eingabe der Messwerte erfolgt in einem Hauptformular (Wellen und Gehäuse) und darin einem über die Schlüsselfelder verknüpften Unterformular zur Erfassung der Messwerte.
Nur mit einem solchen Aufbau
Hallo,
ich merke gerade, dass ich mich falsch ausgedrückt habe. Die Messungen werden natürlich als Datensatz erfasst. Wobei ein Datensatz viele Messwerte (Spalten) hat.
Wahrscheinlich ist mein Vorhaben eh zu umfangreich für meine Access-Kenntnisse. Aber vielen Dank schon mal für deine Unterstützung.
Hallo,
ZitatWobei ein Datensatz viele Messwerte (Spalten) hat.
Du hast Dich schon richtig ausgedrückt, Du hast meine Antwort nur nicht richtig verstanden. Es sollen eben nicht viele Spalten sein, sondern viele Datensätze mit
einer Spalte für die Messwerte.
Haben die Messwerte Namen oder sind das einfach Nummern ?
Wahrscheinlich wird hier auch noch eine Tabelle benötigt für die Messwertbezeichnungen.
Für jede Welle und jedes Gehäuse hast Du dann jeweils 100 Datensätze, für jeden Messwert also einen Datensatz.
Du solltest Dich unbedingt mit den Grundlagen zur Erstellung relationaler Datenbanken beschäftigen.
Hallo Daniel,
zunachst einmal muss ich Klaus Recht geben: die Messwerte gehören mit einer Referenz auf die Bezeichnung und das Bauteil in eine extra Tabelle, etwa so
Id TeileRef MessRef Messwert
1 12345 12 15,83
2 12345 18 0,063
Dabei ist Id ein Autowert, TeileRef ein Zeiger auf die Teile-Seriennr., MessRef ein Verweis auf eine Tab. der Messwertbezeichnungen und Messwert der Messwert selbst.
Nun könnte man so formulieren:
1. Hole aus der Messwert-Tabelle alle Werte, die die Kennung 12 oder 18 haben und zu einem Bauteil des Typs Welle gehören.
2. Gruppiere nach diesen Datensätzen.
3. Hole dann aus der Messwert-Tabelle alle Werte, die die Kennung 112 oder 118 haben und zu einem Bauteil des Typs Gehäuse gehören.
4. Bilde jeweils die Differenzen 112-12 und 118-18.
Ich denke, es wäre möglich, dies in
einer Abfrage unterzubringen.
Aber:
11. Die optimale Paarung wird so nicht gefunden, sondern es werden lediglich alle Paarungen gegenübergestellt.
12. Für jede Welle werden also alle möglichen Paarungen mit Gehäusen und die Messwert-Differenzen dargestellt, etwa so:
w1 g1 0,5
w1 g1 0,005
w1 g2 0,4
w1 g2 0,006
...
w2 g1 0,8
w2 g1 0,008
13. Es fehlt ein entscheidener Schritt: wenn ich z.B. die Paarung w1-g1 als optimal benenne, müssen w1 und g1 als gepaart gekennzeichnet werden, also "geeignet für Spindel-Bau".
14. Die Abfrage kann die Messwerte ohne weiteres nur "einen pro Zeile" ausgeben; das spricht m.E. eher für eine De-Normalisierung, also dafür, die beiden
relevanten Messwerte nebeneinander in einer Tabelle zu führen und die anderen 98 für Dokuzwecke in eine Messwert-Tabelle auszulagern.
15. Jetzt könnte man sich ein Formular vorstellen, das im Kopf (Hauptformular) Daten zu einer Welle darstellt und in einem Unterformular die relevanten Daten aller "noch freien" Gehäuse inkl. berechneter Differenzen (z.B. sortiert nach geringster Differenz). In diesem UFo müsste nun das optimale Gehäuse gefunden und markiert werden. Diese Markierung müsste dann zum Gehäuse und im Hauptformular zur Welle gespeichert werden ("zu dieser Welle passt am besten das Gehäuse mit der Kennung xyz").
16. Weiter geht's dann zur nächsten Welle (nächster Datensatz im Hauptformular).
17. Man könnte sich auch vorstellen, das HFo an die Spindel-Tabelle zu knüpfen, zum neuen Datensatz zu gehen und zuerst eine "noch freie" Welle auszuwählen, dann im UFo ein passendes Gehäuse. Dadurch würden die selektieren Bauteile gleich einer neuen Spindel zugeordnet werden können.
Um auf deine Eingangsfrage zurück zu kommen:
Zitatnun würde ich das ganze gerne automatisieren. Nutze ich dazu ein Formular, eine Abfrage, oder was ganz anderes?
Automatisieren kann man das wohl nur schwer, es sei denn, es lassen sich eindeutige Bedingungen für die Paarung definieren (möglich geringe Differenz, aber mindestens xxx).
Ich tendiere eher zu einem Formular, weil man dort die Möglichkeit hat, selbst auszuwählen. Alles mit einer Abfrage zu lösen, ist wohl schwer.
Vielleicht so:
select into tblSpindeln
wellenRef,first(gehaeuseRef),
min(messwertA-MesswertB) as Diff1,
min(messwertC-MesswertD) as Diff2
from
tblWellen, tblGehaeuse
where
tblWellen.WellenID not in (select tblSpindeln.WellenRef from tblSpindeln)
and
tblGehaeuse.GehaeuseID not in (select tblSpindeln.GehaeuseRef from tblSpindeln)
and
Diff1 >= 0,05
and
Diff2 >= 0,005
Order by
Diff1, Diff2
Achtung: nicht getestet! Hier müssten mal die Profis drüber schauen, würde bei mir zu zu lange dauern...
lg
crystal
Hallo zusammen,
wahrscheinlich bin ich einfach zu doof für das Ganze. Ich habe mich etwas in relationale Datenbanken eingelesen und dachte auch eigentlich das ich es verstanden habe. Bisher hat es ja auch funktioniert wenn ich die Paarung vorgegeben habe. Ich verstehe den Sinn dieser Tabelle noch nicht ganz
Zitat
| Id TeileRef MessRef Messwert |
1 12345 12 15,83 2 12345 18 0,063 |
Die müsste ich ja auch manuell erstellen, oder?! Oder kann ich das über eine Abfrage erledigen lassen? Hilft es wenn ich mal meine Datenbank hier hochlade? Vielen Dank schonmal für eure Hilfe und entschuldigt mein fürchterliches "auf dem Schlauch stehen".
Grüße
Hallo,
ZitatHilft es wenn ich mal meine Datenbank hier hochlade?
Ja, aber als MDB (ich habe nur Access2003) und komprimiert (Access Dienstprogramm) und dann gezippt. Mit einigen plausiblen Spieldaten und Hinweisen welche Messwert gepaart/verglichen werden muss. werden muss.
Hallo,
hier meine nachgebaute Datenbank. Ich kann meine leider nicht mehr nach Access2003 downgraden. Des weiteren enthält sie sensible Daten die ich leider nicht weitergeben kann.
Die nachgebaute ist allerdings genauso aufgebaut wie die originale auch. Miteinander vergleichen möchte ich die Messwerte1 und 2. Die restlichen Messdaten sollen dennoch in der Datenbank gespeichert werden. Zum einen damit alle Daten an einem Ort gespeichert werden, zum anderen könnte man dann noch irgendwelche Auswertungen damit machen...
[Edit PhilS: Anhang gelöscht]
Lieber Daniel,
bevor du eine DB hier hochlädst, bitte anonymisieren - persönliche Daten entfernen!!!
Rechte Maustaste -> Eigenschaften -> Details -> ...entfernen!
lg
crystal
Hallo,
die Abfrage in deiner DB stellt Daten aus der Spindel-Tabelle dar, inkl. Daten aus abhängigen Tabellen.
Die Frage ist, wie die Daten in die Spindel-Tabelle kommen.
Ich habe inzw. etwas gespielt. Meine DB besteht aus 3 Tabellen Wellen, Gehäuse und Spindeln (jeweils 1. Buchstabe). Mit der Abfrage (Name Abfrage3)
SELECT TOP 1 W.WId, First(G.GId) AS ErsterWertvonGId, Min([gmw1]-[wmw1]) AS D1, Min([gmw2]-[wmw2]) AS D2
FROM G, W
WHERE (((W.wid) Not In (select swref from s))
AND ((G.GId) Not In (select sgref from s)))
GROUP BY W.WId
ORDER BY W.WId, Min([gmw1]-[wmw1]), Min([gmw2]-[wmw2]);
erhalte ich eine Datenzeile zu einer Welle, die noch nicht "verspindelt" wurde, deren Id also noch nicht in der Spindel-Tabelle existiert und dazu genau das Gehäuse mit den geringsten Messwert-Differenzen, das ebenso noch nicht "verspindelt" wurde.
Mit einer weiteren Abfrage4:
INSERT INTO S ( SWRef, SGRef )
SELECT Abfrage3.WId, Abfrage3.ErsterWertvonGId
FROM Abfrage3;
speichere ich die IDs dieser Zeile in die Spindel-Tabelle (könnte man natürlich auch in einem Rutsch machen...).
Funktioniert prima, aber nur jeweils für genau eine Datenzeile.
Wenn ich das "TOP 1" weglasse, erhalte ich mehrere Datenzeilen, in denen ein Gehäuse mehrfach vorkommen kann. Das Problem ist, dass die Bedingungen
...not in...
in Abfrage3 für alle Paarungen noch passt, weil sie ja noch nicht in S gespeichert wurden.
Wenn ich das "TOP 1" in Abfrage3 drin lasse und Abfrage4 immer wieder starte, klappt es, d.h. ich erhalte in S alle Paarungen, ohne dass W oder G doppelt vorkommen.
Man muss vllt. beide Abfragen zusammenfassen, werde ich mit deiner DB probieren.
Noch zwei Anmerkungen:
1. Wenn du die Tabellen nicht wie von Klaus vorgeschlagen normalisierst, verstößt du zwar gegen eine Grundregel relationaler Datenbanken, aber das Leben ist so zunächst etwas einfacher. Ich persönlich halte den Normalisierungs-Zwang für zu hart, zumal es u.U. recht schwierig werden kann, Daten aus normalisierten Tabellen "schön" nebeneinander darzustellen. Deshalb auch mein Kompromiss-Vorschlag, die Messdaten zwar normalisiert auszulagern, die je zwei Messwerte für die Paarung aber jeweils zu Welle und Gehäuse zu speichern.
2. Das PD-Format (PDF) ist eine Seitenbeschreibungs-Sprache, ähnlich postscript oder HTML. Man müsste ein Messdaten-Protokoll mit einem Editor analysieren. Vielleicht sind die einzelnen Messwerte eindeutig zu identifizieren, so dass sie mittels eines Programms ausgelesen werden können. Dann würde sich die fehlerträchtige Tipparbeit erübrigen. Vielleicht kann das Messsystem aber auch Textdateien erzeugen.
lg
crystal
Hallo,
im Anhang mal eine mögliche Umsetzung gem. meinen Vorschlägen.
Ich habe angenommen dass die relevanten Paarungen im Messwert 1 und 2 stehen.
Bitte mal genau ansehen und die Abfrage qrySpalt prüfen.
Bevor wir weiter machen, muss erst klar sein, dass das so stimmt.
PS:
Ich hatte sehr schnell hochgeladen, ich habe keine persönlichen Daten gesehen, die hatte ich vermutlich übersehen und bei meinen Änderungen scheinbar gelöscht.
Hallo,
Achtung, ich habe die DB noch mal geändert, bitte noch mal runterladen.
Hallo Klaus,
die pers. Daten sind Name, Firma des Access-Benutzers.
lg
crystal
Hallo,
danke für den Hinweis, hatte ich auch übersehen.
Habe die DB ohne diese Daten oben noch mal hochgeladen.
Guten Morgen,
ich habe mir Klaus Entwurf mal angesehen. Die Abfrage "qrySpalt" enthält genau das was ich haben wollte. So langsam blicke ich auch das meine Datenbank nicht zielführend ist. Vielen Dank für eure Unterstützung. Ich muss mir jetzt mal Gedanken machen wie ich das ganze aufbaue.
Hallo,
der Entwurf von Klaus ist auf den ersten Blick ja sehr gut.
Was mir dabei allerdings fehlt, ist die Gegenüberstellung Welle-Gehäuse, um automatisch die beste Paarung zu finden, wie du es ursprünglich angefragt hast.
Wenn ich mir die von qrySpalt ausgegebene Tabelle ansehe, fehlt "irgendwie" der Bezug zu tblSpindel und ich sehe nicht, wie ich jetzt manuell beste Paarungen finden oder markieren könnte, zumal die Ausgabe nach Messwert-Nummer sortiert ist.
Hier wird ja nur eine Ansicht erstellt, die jede mögliche Paarung W-G darstellt und die Spalt-Maße. Soweit sogut.
Wenn wir aber jeden Tag dutzende neue W- und G-Daten bekommen, wird diese Ansicht einfach nur länger und länger. Was ist dann der Nutzeffekt?
Lieber DaScht, ich fürchte, mit diesem Ansatz kommst du nicht wesentlich weiter, es fehlt noch die Umsetzung deiner ursprünglich formulierte Frage, automatisch beste Paarungen zu finden und diese in tblSpindel einzutragen, so dass die gepaarten Teile aus dem Pool der Teile herausfallen.
Klaus hat gezeigt, wie du Messwerte normalisiert erfassen kannst. Das ist gut und hat dir gezeigt, wie man Daten sinnvoll und relational speichert. Wo aber bleibt die übersichtliche Darstellung optimaler Paarungen, die auch noch automatisch gefunden und in tblSpindel gespeichert werden sollen?
lg
crystal
Hallo Chrystal,
siehe Zitat von Klaus:
ZitatBevor wir weiter machen, muss erst klar sein, dass das so stimmt.
Gruss
Sorry,
das habe ich tatsächlich übersehen.
Bin gespannt, wie's weitergeht...
lg
crystal