Hallo werte Access-Profis,
vorab erstmal ich bin kein Informatiker und absoluter Access-Neuling. Ich habe leider in der Suche nichts brauchbares gefunden.
Ich habe ein Problem mit einem Suchformular. Ich zeige in einem Suchformular mehrere Elemente an die ich aus einer Tabelle bzw. einer Abfrage (ich brauche die Abfrage um aus den IDs die in der Tabelle gespeichert werden Begriffe zu machen) habe. In der Tabelle sind verschiedene Arbeitsgänge hinterlegt mit verschiedenen Technikern die die Arbeit durchführen, Maschinen, Seriennummern usw.
Ich möchte nun eine Suchmaske erstellen die es ermöglicht nach verschiedenen Kriterien zu Filtern. z.B. Ich möchte alle Einsätze des Technikers "Müller" an der Maschine "XY". Dann gebe ich beides in je ein Text-Feld ein und das Dokument wird entsprechend nach dem kombinierten Kriterium gefiltert. Jede Spalte bekommt so quasi ein Textfeld in das Suchbegriffe eingegeben werden. Am Ende drückt man einen Such-Button und die Daten werden entsprechend gefiltert.
Das hat auch geklappt mit folgendem Code:
Private Sub cmd_Button_Click()
Dim sKrit As String
sKrit = ""
If Nz(Me![txt_SucheHN], "") <> "" Then
sKrit = sKrit & " AND Herstellnummer = '" & Me![txt_SucheHN] & "'"
End If
If Nz(Me![txt_SucheBau], "") <> "" Then
sKrit = sKrit & " AND Baureihe = '" & Me![txt_SucheBau] & "'"
End If
If Nz(Me![txt_SucheBez], "") <> "" Then
sKrit = sKrit & " AND [Bezeichnung] = '" & Me![txt_SucheBez] & "'"
End If
If Nz(Me![txt_SucheEin], "") <> "" Then
sKrit = sKrit & " AND Einsatztyp = '" & Me![txt_SucheEin] & "'"
End If
If Nz(Me![txt_SucheRV], "") <> "" Then
sKrit = sKrit & " AND [RV_Nummer] = '" & Me![txt_SucheRV] & "'"
End If
If Nz(Me![txt_SucheDat], "") <> "" Then
sKrit = sKrit & " AND [Datum] = '" & Me![txt_SucheDat] & "'"
End If
If Nz(Me![txt_SucheTech], "") <> "" Then
sKrit = sKrit & " AND [Techniker_Name] = '" & Me![txt_SucheTech] & "'"
End If
If Nz(Me![txt_SucheAus], "") <> "" Then
sKrit = sKrit & " AND tbl_Ausfall.Ausfall = '" & Me![txt_SucheAus] & "'"
End If
If Nz(Me![txt_SucheArt], "") <> "" Then
sKrit = sKrit & " AND [Artikelnummer(1)] = '" & Me![txt_SucheArt] & "'"
End If
If sKrit <> "" Then sKrit = Mid(sKrit, 5)
Me.Filter = sKrit
Me.FilterOn = True
End Sub
Nun zu meinem Problem: Ich habe ein Textfeld das seine Suchbegriffe in mehreren Spalten der Tabelle suchen soll.
Hierbei geht es um Ersatzteile und dazugehörige Artikelnummern.
Ich kann bis zu 4 Ersatzteile eintragen die dann in den Spalten:
Artikelnummer(1), Artikelnummer(2), Artikelnummer(3), Artikelnummer(4)
hinterlegt werden. Kann ich meine Code so abändern das in allen 4 Spalten über ein Textfeld gesucht wird und das der Filter mit anderen Filtern aus anderen Textfeldern kombiniert wird.
z.B. Ich suche alle Arbeitsgänge wo Herr "Müller" Artikelnummer "0815" gewechselt hat.
also gibt man in das Techniker-Suchfeld "Müller" ein und in das Artikelnummerfeld "0815" und die Suche gibt die Entsprechenden Datensätze aus?
Vorab schonmal Danke für die Hilfe
Grüße
Hi,
wenn ich das richtig verstanden habe, sollten die Artikelnummern mit einer ODER-Verknüpfung geprüft werden.
Das sähe dann so aus:
If Nz(Me![txt_SucheArt], "") <> "" Then
sKrit = sKrit & " AND ([Artikelnummer(1)] = '" & Me![txt_SucheArt] & "'"
sKrit = sKrit & " OR [Artikelnummer(2)] = '" & Me![txt_SucheArt] & "'"
sKrit = sKrit & " OR [Artikelnummer(3)] = '" & Me![txt_SucheArt] & "'"
sKrit = sKrit & " OR [Artikelnummer(4)] = '" & Me![txt_SucheArt] & "')"
End If
Davon abgesehen darf der Hinweis natürlich nicht fehlen, dass derartige "Aufzählungsfelder" in einer normalisierten Tabelle nichts verloren haben. ;-)
Vielen Dank MaggieMay,
deine Lösung funktioniert. Ich habe das mit einer OR-Verknüpfung auch schon probiert habe dabei aber irgendeinen fehler gemacht.
Zu deinem Hinweis, wie würde man das denn richtig machen?
Ist vielleicht eine doofe Frage aber ich beschäftige mich erst seid kurzem mit Datenbanken
Grüße Churian
Hallo,
Zitatwie würde man das denn richtig machen?
die Ersatzteile müssen in einer extra Tabelle erfasst werden mit einem Fremdschlüssel zur jetzigen Tabelle. Jedes Ersatzteil gibt einen Datensatz, 4 Ersatzteile = 4 DS, 20 Ersatzteile = 20 DS. In einem Feld.
Dann beschränkt sich auch die Suche auf ein Feld.
Kannst Du mal ein Bild des Beziehungsfensters hier zeigen ?
Und erkläre mal die Aufgabe der DB.
Hi,
so Bild ist im Anhang. Ich habe ein paar Bezeichnungen geändert. In der Datenbank sollen Serviceeinsätze protokolliert und ausgewertet werden.
Um das so zu machen das die Ausfälle in einer separaten Tabelle den Einsätzen zugeordnet werden brauch ich also eine ID pro Einsatz die sich nie wiederholt oder?
Die Eingabe der Ausfälle würde dann über ein Unteformular laufen das auch in der Suche sichtbar ist oder?
Grüße
Hallo,
das Datenmodell ist stark überarbeitungsbedürftig.
Die Ausfalltabellen sind in einer Tabelle zusammenzufassen mit einem Fremdschlüssel zur Kategorie. Dann wird eine weitere Tabelle benötigt mit einem Fremdschlüssel zum Serviceverzeichnis und einem Fremdschlüssel zum Ausfall. In dieser Tabelle gibt es je Ausfall einen Datensatz.
Die Felder Ausfall, Artikelnummer und Menge entfallen im Serviceverzeichnis ersatzlos.
Wahrscheinlich ist das aber noch nicht alles. Z.B. was machst Du, wenn es zu einem Ausfall mehrere Artikelnummern gibt ?
hey MzKlMu
sowas in etwa? Wie geht denn die Eingabe der Werte und die Suche dann?
Grüße
Hallo,
Zitatsowas in etwa?
nein, nicht ganz. Siehe Bild.
Die Kategorie ist in der Tabelle "tbl_Ausfälle" überflüssig, denn diese lässt sich ja bereits über den Ausfall ermitteln, da gibt es ja bereits eine Beziehung.
Das gleiche gilt sinngemäß auch für "Eigen oder Fremd". Du kannst im Regelfall davon ausgehen, wenn Beziehungslinien einen Kreis bilden ist eine Beziehung zu viel.
ZitatWie geht denn die Eingabe der Werte und die Suche dann?
Die Eingabe der Werte erfolgt mit einem Unterformular. Das dazu gehörende Hafo zeigt dann die Tabelle "tbl_Serviceverzeichnis", Hafo und Ufo werden über die Schlüsselfelder verknüpft .
Und was ist mit meiner Frage?
Zitatwas machst Du, wenn es zu einem Ausfall mehrere Artikelnummern gibt ?
Gibt es zu
einem Ausfall wirklich nur
einen Artikel?
Und noch weitere Hinweise:
Vermeide unbedingt Leer und Sonderzeichen in Feld und Objektnamen.
Und verwende keine Nachschlagefelder in den Tabellen direkt. Deine Namensgebung deutet darauf hin.
Das Beziehungsgeflecht Service-Baureihe-Maschinentyp-Bezeichnung halte ich zumindest für fragwürdig.
Besonders im Hinblick auf die Feldnamen ist das recht verwirrend und mMn falsch. In der Tabelle "tbl_Maschinentyp" gibt es zum PS nur den einen Fremdschlüssel, was soll das für einen Sinn ergeben ? Kannst Du das mal alles erläutern ?
Achtung, ich habe heute 27.05.2015 19:35 ein neues Bild hochgeladen.
Guten Morgen,
vielen Dank. Ich habe die Beziehungen jetzt so gemacht wie in dem Bild und gestern versucht neue Einsätze über ein Hauptformular in die tbl_Serviceverzeichnis eimnzutragen. Die dazugehörigen Ausfälle über ein Unterformular. Das klappte auch. Danach habe ich versucht in einem Endlosformular zu suchen sodass die Dinge aus der tbl_Serviceverzeichnis angezeigt werden und die Ausfälle in einem UFo aber das geht ja leider nicht mit access.
Zu deiner Frage: Ja es kann zu einem Ausfall mehrere Artikelnummern geben.
Wieso sollte ich keine Nachschlagefelder direkt verwenden?
Bei der tbl_Maschinen_Typ habe ich die Spalte Typ vergessen reinzuschreiben. Ich hatte ein paar der Namen geändert.
Grüße
Hallo,
ZitatJa es kann zu einem Ausfall mehrere Artikelnummern geben.
und wie willst Du das erfassen, im Moment kann es zu einem Ausfall nur einen Artikel geben, denn in ein Feld darf in einer Datenbank nur ein Wert eingetragen werden. Daher ist in diesem Fall das Datenmodell immer noch ungeeignet.
Und noch eine weitere Frage:
Gibt zu einem Serviceverzeichnis tatsächlich mehrere Ausfälle ?
Mir der Zusammenhang zwischen Service und Ausfall noch nicht klar.
ZitatWieso sollte ich keine Nachschlagefelder direkt verwenden?
weil diese den sauberen Aufbau einer Datenbank verhindern. Bitte
unbedingt wieder entfernen. Diese sind nur in Formularen als Kombifelder sinnvoll.
Die Nachteile von Nachschlagefeldern (http://dbwiki.net/wiki/Access_Anf%C3%A4nger:_Die_Nachteile_von_Nachschlagefeldern)
Dann solltest aus Gründen der leichten Erkennbarkeit und eindeutigen Zuordnung die Schlüsselfelder wie folgt benennen (am Beispiel der Kategorie):
Kategorie_ID > Kategorie_ID_F
Das noch zu überarbeitende Datenmodell ist aber aufwendig zu beschreiben. Daher wäre es sinnvoll die DB (nur die Tabellen mit den Beziehungen) mal hier hochzuladen. Aber ich benötige die DB in Access2003 (MDB) ich habe keine andere Möglichkeit. Mit einigen Beispieldatensätzen.
Und denke an die obigen weiteren Fragen.
Zeige mal das neue Beziehungsbild.
Hey,
ich habe keine Nachschlagefelder verwendet. Alles was ich über Kombifelder eingebe wird als ID gespeichert.
Zu den Artikelnummern: Ich habe mehrere Eingabefelder und die unterschiedlichen Nummern werden in unterschiedliche Spalten gespeichert.
zu der zweiten Frage: Es geht um Servicefälle z.B. Ein Kunde sagt das seine Maschine nicht läuft. Dann wird ein Techniker raus geschickt und nimmt die Ausfälle auf und wechselt evtl. die kaputten Teile. Es könnte ja Ausfälle sowohl in der Hydraulik als auch in der Elektrik vorliegen und beides muss aufgenommen werden.
Maßgeblich ist das ich am ende eine Suche habe die mir übersichtlich alle Einsätze anzeigt. Ich möchte sowohl nach einer Artikelnummer, Maschine, Techniker oder Ausfall suchen können als auch eine kombinierte Suche.
Bild und DB im Anhang.
Grüße
Hallo,
ZitatIch habe mehrere Eingabefelder und die unterschiedlichen Nummern werden in unterschiedliche Spalten gespeichert.
das ist völlig unmöglich. In dem neuen Datenmodell hast Du ja nur ein Feld für die Artikelnummer, da gibt es keine unterschiedlichen Spalten, wie willst Du da unterschiedliche Artikel erfassen ?
Die Ausfallkategorie in der Tabelle "tbl_Ausfälle" ist überflüssig.
Wie gesagt ich bin Anfänger. Ich dachte ich könnte die Artikel in die tbl_Ausfälle mit reinschreiben.
Die Ausfallkategorie steht deshalb mit in der Tabelle damit ich sie mit den anderen Ausfällen und den Artikeln zusammengehörig anzeigen kann.
Hallo,
ZitatIch dachte ich könnte die Artikel in die tbl_Ausfälle mit reinschreiben.
und wie soll das gehen, Du hast ja nur ein Feld für den Artikel.
Wie würdest du das machen?
Zusätzlich hätte ich noch eine andere Frage. Und zwar habe ich ja ein Feld mit einer Datumssuche wenn ich dort ein Datum eingebe bekomme ich Laufzeitfehler 3464 Datentypenkonflikt. Ich weiß das das wohl mit der amerikanischen Datumsangabe zu tun hat. Ich habe jetzt versucht den Code-Schnippsel von Donkarl meiner Abfrage hinzuzufügen.
Dim strDatum As String
Dim strSQL As String
strDatum = Format(DeinDatumsfeld, "\#yyyy\-mm\-dd\#")
strSQL = "SELECT * FROM Tabelle WHERE Tabelle.Feld > " & strDatum
Was aber leider nicht hilft. Was mache ich falsch?
Hallo,
wenn mehrere Artikel/Teile bei einem Servicefall "verbraucht" werden, dann ist eine weitere Tabelle "tblServiceTeile" in 1:n-Beziehung zu Service erforderlich, in der das verbrauchte Material erfasst wird. (Hat Klaus schon erwähnt...)
Der Codeschnippsel muss natürlich an die realen Feldnamen angepasst und nicht nur einfach kopiert werden..
Und was heißt:
Zitat...meiner Abfrage hinzuzufügen...
?
Ich habe natürlich die Namen angepasst. Ich habe der Einfachheit halber gerade den Code nur kopiert.
Mein Code lautete:
Dim strDatum As String
Dim strSQL As String
strDatum = Format(Datum, "\#yyyy\-mm\-dd\#")
strSQL = "SELECT * FROM tbl_Serviceverzeichnis WHERE [tbl_Serviceverzeichnis].[Datum] > " & strDatum
Ich wollte den Code in den SQL-Code meiner Abfrage eingeben aber das geht nicht. Dann habe ich noch versucht den Code in mein Suchformular oder das Eingabeformular einzugeben. Nichts.
Ich vermute aber das der Fehler ehr vorm Rechner sitzt und ich den am falschen Ort eingegeben habe.
Hallo,
in der Tat trifft der letzte Satz zu ... ;)
Was Du vor Dir hast, ist ein VBA-Codeschnippsel, der lediglich einen SQL-String zusammenbaut. Sowas kannst Du nur in einer (Code-)Prozedur verwenden und den SQL-String z. B. der Datenherkunft eines Forms, eines Listen-/Kombifeldes oder auch der SQL-Eigenschaft einer Abfrage zuweisen.
Aber wie vorher schon gesagt, wenn die Tabellenstruktur nicht zunächst auf Vordermann gebracht wird, brauchst Du Dir über Abfragen und Formulare keine Gedanken zu machen.
Hallo,
also muss ich wenn ich so einen Code nutzen will den Code in die Datensatzherkunft des Suchfeldes eingeben?
Ich habe alle Hinweise zu der Tabellenstruktur bisher umgesetzt. Was liegt da denn noch im Argen abgesehen davon das ich meine Ausfälle und Artikelnummern nicht zusammen in einer Tabelle anzeigen kann?
Hallo,
zur Artikelerfassung stellt sich noch eine Frage.
Zu einem Serviceffall werden mehrere Ausfälle erfasst, richtig ?
Willst Du jetzt die verbrauchten Artikelnummern je Ausfall, oder reicht es diese je Servicefall zu erfassen ?
Bitte mal sorgfältig darüber nachdenken, denn davon hängen die weiteren Tabellen ab.
Hey Klaus,
danke das du dich so lange mit mir und meinem Problem befasst.
Es kann vorkommen das zu einem Servicefall mehrere Artikel oder auch gar keiner erfasst werden das ist variabel.
Es wäre schön wenn die Artikelnummern den Ausfällen zu geordnet werden können muss aber nicht sein.
Grüße
HGallo,
anbei ein neues Bild.
Ich würde auch noch eine Tabelle für die Artikel vorschlagen.
Du kannst zu jedem der Ausfälle ausfallbezogen mehrere (beliebig viele) Artikel erfassen.
Vielen Dank,
ich werde meine Datenbank dahingehend umbauen.
Neue Daten gebe ich dann über ein Formular ein wobei die Ausfälle und Artikelnummer in entsprechenden UFos eingegeben werden richtig?
Verstehe ich das eigentlich richtig das ich kein Endlosformular mehr als Suchformular nutzen kann wegen der UFos?
Mit freundlichen Grüßen
Hallo,
über das Suchen solltest Du Dir mal keine Gedanken machen. Das kommt später. Und ist im Regelfall mit einem korrekten/normalisierten Datenmodell einfacher.
Hey,
das Suchen ist nur elementarer Bestandteil der Anforderungen die ich an die Datenbank habe. Deshalb kann ich das nicht so einfach wegschieben. Der Code aus der ersten Antwort klappt ja jetzt, denke ich mal, nicht mehr.
Hallo,
dass das Suchen notwendig ist, habe ich ja nicht bestritten. Aber erst muss das Datenmodell stimmen, dann kann man über die Suche nachdenken.
Beschreibe bitte noch mal, nach was Du in welchem Zusammenhang suchen willst.
Und wie die Suche ablaufen soll. Mit Ablaufen meine ich nicht das programmiertechnische.
Und für das Suchen sollte man keine eierlegende Wollmilchsau versuchen.
Natürlich kannst Du zur Suche ein Endlosformular verwenden.
Datenquelle wird eine Abfrage mit den Tabellen die die Felder enthalten in denen Du suchen willst.
Um Dein Beispiel zu verwenden:
Zitat"Müller" ein und in das Artikelnummerfeld "0815"
Beim Namen gibst Du als Kriterium "Müller" ein und bei der Artikelnummer "0815".
Die Suche wird viel einfacher, weil die Artikelnummer nur in einem Feld steht,
Eine Suche würde alle Datensätze zeigen die beide Bedingungen erfüllen. Dabei ist es egal, ob der Artikel als 1.Position oder als 10. Position verbaut wurde.
Guten Morgen,
also das Datenmodell steht jetzt so wie besprochen ich habe allerdings die Artikel jetzt doch den Servicefällen zugeordnet. Der Einfachheit halber. Die Eingabe neuer Daten über ein Formular und zwei UFos klappt auch.
Für die Suche:
Ich möchte ein Endlosformular das mir standardmäßig alle Datensätze anzeigt mit Machinen, Technikern, Datum, Ausfällen, Artikelnummern und so weiter.
Ich hätte gern das man sieht bei welchem Einsatz welche Artikelnummern getauscht wurden und welche Ausfälle vorliegen.
Ich dachte das würde man über weitere UFos machen aber dann klappt das Endlosfrom nicht mehr.
Das eigentliche Suchen soll über mehrere Text-Felder funktionieren. Eins für Techniker, Eins für die Maschinen, eines für Artikelnummer usw. Über einen Button soll das Formular entsprechend gefiltert werden.
Die Kriterien sollen Kombiniert werden wie du schon sagtest.
z.B.:
Techniker: "Müller"
Artikelnummer: "Z32078"
Datum: "02.06.2015"
nach druck des Suchbuttons will ich alle Datensätze wo der Herr Müller, Z32078 am 02.06.2015 ausgetauscht hat.
Grüße
Churian
Hallo,
Zitatich habe allerdings die Artikel jetzt doch den Servicefällen zugeordnet.
dann zeige bitte erst mal ein Bild des Beziehungsfensters.
Hey ho,
Bild im Anhang.
Hallo,
willst Du jedes mal die Artikelnummer und die Bezeichnung eines Artikel neu eintragen ?
Von daher, solltest Du unbedingt eine Tabelle für die Artikel anlegen und den Artikel per Kombi auswählen. Du solltest auch bedenken, dass es zu Tippfehlen kommen kann. Irgend wann schreibt jemand Z320078 statt Z32078 und schon hast Du einen falschen Artikel erfasst. Eine Suche nach Z32078 würde den gar nicht finden. Mit einem Kombi zur Auswahl kann das nicht passieren.
Also Tabelle für die Artikel anlegen. Es macht keinen Sinn Tabellen sparen zu wollen.
Zur Suche erstellst Du ein Endlosformular mit den Tabellen in denen die Felder sind mit denen Du suchen willst. Dann kannst Du suchen wie gehabt und in diesem Endlosform anzeigen.
Hey
die Idee hatte ich auch, die Artikel in einer Tabelle zu erfassen aber das sind im Laufe der Jahre mehrere tausend Stück geworden die sich teilweise auch gar nicht so einfach klassifizieren lassen.
Die Idee ist natürlich super aber wenn der Benutzer dann aus einer Liste mit 200-500 Artikeln wählen muss halte ich das für zu viel. Es ist auch so das es sowohl Z320078 als auch Z32078 gibt und dann trotzdem ein Fehler eingegeben wird.
Ich hatte die Suche bisher über eine Abfrage gemacht in die ich alle Spalten die ich brauchte eingegeben habe. Wenn ich mir jetzt dann alle Ergebnisse anzeigen lasse stehen ja je nach Anzahl der Ausfälle und Artikelnummern mehrfach die Einsätze nur mit je anderen Ausfällen und Artikeln.
Hallo,
Du solltest unbedingt eine Tabelle für die Artikel anlegen. Ein Kombi hat die Eigenschaft "Automatisch ergänzen" wenn die auf Ja steht, bist Du auch mit 100erten von Artikel sehr schnell bei dem gewünschten Artikel, Ein Z eingeben und schon bist Du bei Z.....
ZitatEs ist auch so das es sowohl Z320078 als auch Z32078 gibt und dann trotzdem ein Fehler eingegeben wird.
Dann ist das ja ein sachlicher Fehler und kein Tippfehler. Jeder Tippfehler erzeugt einen Artikel den es nicht gibt. Außerdem ist es ein Haufen Schreibarbeit jedes mal Artikelnummer und Bezeichnung einzugeben. Und dann auch noch Tippfehler bei Bezeichnung, das gibt ein grausliger Datenwust.
Dein Suchproblem habe ich jetzt nicht verstanden.
Hallo,
das mit den Kombis werde ich mir nochmal durch den Kopf gehen lassen. Wahrscheinlich mache ich mir die Arbeit nochmal. Das Hauptproblem ist das fast alle Artikelnummern mit Z oder F anfangen und dann mit einer Zahl weiter gehen. Das sind dann pro Buchstabe enorm viele.
Ich beschreibe mein Problem mal anschaulicher. Ich habe 3 Datensätze eingegeben. Der Erste hat einen Ausfall und einen Artikel,
der zweite hat 3 Ausfälle und 3 Artikel und
der letzte hat keinen Ausfall und Artikel.
Die Abfrage/Suche zeigt mir nun 8 Einträge an: Einmal Einsatz 1, 6 mal Einsatz 2 und 1 mal Einsatz 3.
Hallo,
zeige doch bitte mal den SQL-Code der Abfrage.
Hallo,
hier der Code meiner Abfrage:
SELECT tbl_Serviceverzeichnis.Mitarbeiter, tbl_Serviceverzeichnis.RV_Nummer, tbl_Serviceverzeichnis.Herstellnummer, tbl_Serviceverzeichnis.Datum, tbl_Maschinentyp.Maschinentyp, tbl_Bezeichnung.Bezeichnung, tbl_Einsatzart.Einsatztyp, tbl_Techniker_v_Servicepartner.Techniker_Name, tbl_GvFvK.GvFvK, tbl_Serviceverzeichnis.Stundensatz, tbl_Serviceverzeichnis.[Arbeitszeit in Stunden], tbl_Serviceverzeichnis.Fahrtkosten, tbl_Serviceverzeichnis.[Anfahrt in km], tbl_Serviceverzeichnis.Zusatzkosten, tbl_Serviceverzeichnis.Materialkosten, tbl_Serviceverzeichnis.Gesamtkosten, tbl_Serviceverzeichnis.Aufschlag, tbl_Ausfälle.Ausfall, tbl_Artikelnummer.Artikelnummer, tbl_Artikelnummer.Menge
FROM tbl_Antriensart INNER JOIN (tbl_Maschinentyp INNER JOIN ((tbl_EigenFremd INNER JOIN tbl_Techniker_v_Servicepartner ON tbl_EigenFremd.ID_EF = tbl_Techniker_v_Servicepartner.ID_EF) INNER JOIN (((tbl_Bezeichnung INNER JOIN (tbl_GvFvK INNER JOIN (tbl_Einsatzart INNER JOIN tbl_Serviceverzeichnis ON tbl_Einsatzart.ID = tbl_Serviceverzeichnis.Einsatztyp) ON tbl_GvFvK.ID = tbl_Serviceverzeichnis.GvFvK) ON tbl_Bezeichnung.ID_Bezeichnung = tbl_Serviceverzeichnis.Modell) LEFT JOIN tbl_Artikelnummer ON tbl_Serviceverzeichnis.ID = tbl_Artikelnummer.Service_ID) LEFT JOIN tbl_Ausfälle ON tbl_Serviceverzeichnis.ID = tbl_Ausfälle.Service_ID) ON tbl_Techniker_v_Servicepartner.ID_Techniker = tbl_Serviceverzeichnis.Techniker) ON tbl_Maschinentyp.ID_Typ = tbl_Bezeichnung.ID_Typ) ON tbl_Antriebsart.Antriebs_ID = tbl_Maschinentyp.Antriebs_ID
ORDER BY tbl_Serviceverzeichnis.Datum;
Na, wenn du alle Tabellen und auch deren Datenfelder mit in die Abfrage nimmst, brauchst du dich nicht zu wundern, dass die Abfrage alle Datensätze liefert.
Wundern tue ich mich eigentlich auch nicht. Geht das auch anders? Also das ich alles zu einem Einsatz sehe ohne das mir Kosten Techniker etc. mehrfach angezeigt werden? Oder anders gefragt kann ich nur die Ausfälle und Artikelnummern mehrfach anzeigen?
Hi,
wie stellst du dir das vor? Du könntest die Einsätze in einem Hauptformular und die Ausfälle und Artikelnummern in Unterformularen anzeigen. Wäre das eine Lösung für dich?
Anstelle der Unterformulare wären auch Listenfelder möglich.
Hallo,
ich hätte schon ganz gerne ein Endlosformular. Die Einzelformulare sind nicht übersichtlich wenn man mehrere Datensätze schnell vergleichen möchte.
Ich dachte an sowas:
1. Eintrag: Herstellnummer1 Techniker1 Ausfall1 Artikelnummer1
Ausfall2 Artikelnummer2
Artikelnummer3
2. Eintrag: Herstellnummer2 Techniker2 Ausfall3 Artikelnummer4
3. Eintrag: Herstellnummer3 Techniker3 Ausfall4 Artikelnummer5
Artikelnummer6
Artikelnummer7
Ist das möglich?
Denn wenn das nicht funktioniert muss ich zu meinem alten Modell zurück und die Anzahl der möglichen Artikel und Ausfälle begrenzen und alles in eine Zeile, in der gleichen Tabelle speichern.
Grüße
Hi,
wenn es dir genügt, die Daten nur zu sehen und nicht ändern zu können, kannst du die Funktion "SQLLIste" aus dem dbWiki einsetzen, um die Ausfälle und Artikel pro Eintrag zusammenzufassen, entweder kommagetrennt oder auch mit Zeilenvorschub.
Zum alten Modell solltest du auf keinen Fall zurückkehren.
Hi,
Ist das der Link den du meintest?
http://dbwiki.net/wiki/VBA_Tipp:_Liste_per_SQL_aufbauen
Ich muss die Daten auch Filtern können.
Mein Problem mit der Abfrage die 6 Datensätze für einen Einsatz anzeigt ist das ich evtl. nur nach dem Techniker filtern möchte und so plötzlich 6 Einsätze bekomme die alle gleich sind.
Ich ziehe später aus der Abfrage und dem Filter einen Bericht der Kosten aufsummiert. So bekomme ich ja 6 mal den Einsatz verrechnet anstatt einmal.
Mein vorheriges Modell. Nicht Datenmodell sondern das ich höchstens 4 Artikel und 4 Ausfälle habe, kann das was ich will. Das neue nicht
Ja, das ist der Link den ich meinte.
Was das neue Datenmodell betrifft, so musst du nur lernen, richtig damit umzugehen. Wenn du eine Beispiel-DB mit ein paar Testdaten hochlädst, ist es leichter, dir dabei zu helfen.
Hey,
kann ich diese Liste dann auch Filtern?
das Datenmodell funktioniert ja und ändern will ich das nicht nochmal. Es ist aber so das meine Suche mir mit der Abfrage jetzt die Datensätze mehrfach wiedergibt und nur die Artikel bzw. Ausfälle ändert.
Wenn ich nun die Artikel oder Ausfälle nicht rausfiltere und mir mal die arbeiten des Technikers Müller ansehen will erscheinen die Einsätze ja mehrfach.
Anschließend im Bericht wird dann für einen Einsatz der meinetwegen 40 Euro gekostet hat, aber 4 Ausfälle hat 160€ verbucht dar ich ja diese Mehrfachnennung habe.
Kann ich in der Abfrage was verändern um das zu umgehen oder ein Listenfeld erstellen in dem dann zu jedem Einsatz die entsprechenden Artikel oder Ausfälle angezeigt werden. Die Listenfeldidee finde ich recht gut nur muss auch hier am ende ein Filter funktionieren um nach Artikel zu filtern.
Nochmal was anderes ich kann in dem Endlosformular nicht nach dem Datum filtern wegen dem amerikanischen Datumsformat. Ich habe versucht folgenden Code in mein Suchformular einzugeben:
Public Function CDateSQL(vardatum As Variant) As String
If IsDate(vardatum) Then
CDateSQL = Format(CDate(vardatum), "'yyyy-mm-dd'")
End If
End Function
aber ohne Erfolg
Liebe Grüße
Churian[/code]
Es ist ganz natürlich, wenn alle Tabellen und auch deren Datenfelder in der Abfrage vorkommen, dass es so viele Datensätze ergibt wie in den n-Beziehungen vorhanden sind.
Im Formular kannst du die abhängigen Datensätze mit Hilfe von Listenfeldern darstellen, im Bericht käme evtl. Gruppierung oder Unterberichte in Frage, abhängig vom Aufbau.
Wenn du mal eine Beispiel-DB hochladen könntest, würden wir sicher schnell eine Lösung finden. Ein Musterbericht sollte dabei schon vorhanden sein.
PS:
Das Filtern sollte ebenfalls lösbar sein, an einem konkreten Beispiel lässt sich das leichter (er)klären.
Das Datum sollte für den Einsatz in SQL folgendermaßen formatiert werden:CDateSQL = Format(CDate(vardatum), "\#yyyy\/mm\/dd\#")
Hey ho,
die Probedatenbank ist aber jetzt im Anhang.
Ich musste einiges ändern wegen Datenschutz :-\
Viel Dank nochmal für die ganze Geduld die ihr mit mir habt :-[
Den Code habe ich auch schon gefunden. Ich weiß nur nicht wohin damit?
Grüße
Hallo,
eher so beim ISO-Format:
CDateSQL = Format(CDate(vardatum), "\#yyyy-mm-dd\#")
Wo muss der Code denn hin?
Wo soll er schon hin, in die von dir gezeigte Funktion vermutlich.
Fragt sich eher, wie er bzw. die Funktion zum Einsatz kommt.
Nachtrag:
Diesen Satz hast du wohl überlesen, oder?
ZitatEin Musterbericht sollte dabei schon vorhanden sein.
Das Layout des Berichts, also welche Daten in welcher Art dargestellt werden sollen und was woraus zu berechnen ist, sollte schon bekannt sein, wenn wir eine Lösung finden sollen.
Hallo,
ZitatAnschließend im Bericht wird dann für einen Einsatz der meinetwegen 40 Euro gekostet hat, aber 4 Ausfälle hat 160€ verbucht dar ich ja diese Mehrfachnennung habe.
nein, ganz sicher nicht. Einen Bericht würde man gruppieren und dann rechnet er richtig. Den Bericht über den Einsatz gruppiert zeigt dann für jeden Einsatz die korrekte Summierung. Dann kann man den Bericht auch noch für einen Einsatz filtern.
Du solltest Dich mal mit den Funktionalitäten eines Berichts beschäftigen.
Leider ist in Deinem Beispiel keinen Bericht zu finden. Erstelle mal einen sochen egal wie falsch er ist, damit man eine Vorstellung hat wie dieser aussehen könnte. Und/oder beschreibe bitte mal wie das Formular zu filtern ist und was Du auf dem Bericht sehen willst.
Hallo,
hier nochmal die Datenbank mit Bericht.
Wegen dem Code: Ich möchte in einem Textfeld ein Datum eingeben und die Ergebnise in meinem Suchfrom werden dann ausgefiltert. Ich bekomme aber nur die Fehlermeldung.
In meinem Beispiel ist die Suchmaske ja drin.
Bei dem Bericht dachte ich ich könnte über die Suchfunktion den Bericht steuern und weil die Ja alles mehrfach anzeigt tut das auch der Bericht.
Euch noch einen Schönen Feiertag
Churian
Hallo,
und was ist an dem Bericht jetzt falsch ?
Der Techniker "Gammel" hat 2 Datensätze zu je 10.-€, zusammen 20.-€. das ist doch richtig. Du kannst für die Ausfälle noch eine weitere Gruppierungsebene hinzufügen.
Hi,
wenn die "Gesamtkosten" tatsächlich bereits die Gesamtkosten sind, so sollten sie nicht im Detailbereich aufgeführt und auch nicht summiert werden, sondern lediglich im Gruppenfuß auftauchen.
Was das betrifft:
ZitatIch möchte in einem Textfeld ein Datum eingeben und die Ergebnise in meinem Suchfrom werden dann ausgefiltert.
Du musst die Datentypen beachten. Nur Texte werden in Hochkommata gesetzt, bei Zahlen werden sie weggelassen. Und ein Datum wird halt speziell formatiert, so wie es bereits erwähnt wurde. Dazu brauchst du nicht unbedingt eine separate Funktion, das kann auch direkt im Code eingesetzt werden.
Beispiel:
If Nz(Me![txt_SucheDat], "") <> "" Then
sKrit = sKrit & " AND [Datum]=" & Format(Me![txt_SucheDat], "\#yyyy\/mm\/dd\#")
End If
Hallo,
an dem Bericht ist Falsch das der Herr Gammel eigentlich nur einen Einsatz gefahren ist dort aber 2 Ausfälle hatte.
Die Summe aus Fahrtkosten und Arbeitskosten (Stundensatz mal Arbeitszeit) sind dann die Gesamtkosten für den Einsatz. In diesem Fall angenommene 10€.
Im Bericht wird das aufsummiert.
Was dann im Bericht aufsummiert wird sind die Kosten die ein Techniker durch seine Einsätze verursacht hat.
Das mit den Gruppierungen und dem Datum schaue ich mir mal an.
Edit: Kann ich nicht die Suche erstmal so hinbauen mit den Listenfeldern um dann das Problem mit dem Bericht quasi von alleine zu lösen? Immerhin würden dann ja Servicefälle nur noch einmal gelistet und der Bericht würde auch alles korrekt addieren.
Grüße
Churian
Hi,
mit meinem letzten Beitrag dachte ich eigentlich, das Problem mit den falschen Summen erklärt zu haben.
Wenn es dazu noch Fragen gibt, solltest du dich wohl noch einmal melden.
Es wäre auch hilfreich, wenn du auf alle Fragen, Vermutungen etc., die unsererseits geäußert werden, eingehen würdest.
Guten Morgen,
nochmal vielen Dank für den Datums-Code das hat es endlich zum laufen gebracht.
Zitatwenn die "Gesamtkosten" tatsächlich bereits die Gesamtkosten sind, so sollten sie nicht im Detailbereich aufgeführt und auch nicht summiert werden, sondern lediglich im Gruppenfuß auftauchen.
Ich würde die Gesamtkosten pro Einsatz gerne trotzdem aufsummieren um am Ende die Kosten für eine bestimmte Periode zusammengerechnet zu bekommen.
Die Gesamtkosten sind ja wirklich nur die Gesamtkosten für einen Einsatz.
Ich hoffe das war der Punkt den Maggie meinte wenn nicht könntest du das nochmal wiederholen? Dann habe ich das wohl überlesen.
Um den Bericht kann ich mich allerdings auch später. Wichtiger wäre erstmal das die Suche funktioniert.
Ich habe da jetzt die Abfrage so geändert das Artikelnummer und Ausfall nicht mehr in der Hauptabfrage auftauchen.
Ich habe in dem Suchformular 2 Listenfelder erstellt und ich die Datenherkunft z.B. der Artikelliste, folgende Abfrage programmiert:
SELECT tbl_Artikelnummer.Artikelnummer, tbl_Artikelnummer.Menge
FROM tbl_Artikelnummer
WHERE [Service_ID] = [txt_ID];Hierzu sei gesagt das in tbl_Artikelnummer alle Artikelnummern für die Einsätze hinterlegt sind und das txt_ID ein Textfeld im Endlosfrom ist das mir die jeweiliger ID des Serviceeinsatzes anzeigt.
Jetzt zeigt mir die Liste für alle Einträge die Artikel für den ERSTEN Servicefall an und ändert sich nicht für anderen Einsatz im Endlosformular.
Grüße
Hallo,
ZitatIch würde die Gesamtkosten pro Einsatz gerne trotzdem aufsummieren
Natürlich kannst du im Berichtsfuß oder einem weiteren Gruppenfuß die Gesamtkosten der Einsätze summieren, nicht aber im Gruppenfuß des Einsatzes, dort werden lediglich die Gesamtkosten angezeigt.
Was das Formular betrifft, so sehe ich keine Lösung. Das mit den Listenfeldern funktioniert im Endlosformular nicht, Unterformulare sind auch nicht einsetzbar und Gruppierung ist ebenfalls nicht möglich. Die Darstellung der Datenauswahl im Bericht scheint mir die beste Lösung zu sein.
Hey,
gibt's da gar keine Möglichkeit?
Denn klar ist der Bericht wichtig aber eine übersichtliche und funktionale Suche ist noch wichtiger.
Kann man eigentlich auch nach einem Gewissen Zeitraum filtern im Formular? Quasi das ich in ein Textfeld ein Startdatum ein gebe und in ein zweites das Enddatum ein und zusammen mit anderen Kriterien die Suche filtere?
Grüße
Hi,
Zitatgibt's da gar keine Möglichkeit?
ich hätte da vielleicht noch eine Idee, du könntest die Datensätze pro Service-ID in der Abfrage mit einer lfd. Nummer versehen und die Duplikate im Formular per bedingter Formatierung über die Schriftfarbe ausblenden.
Zeig doch mal an einem Beispiel, wie du dir die Optik der Formularausgabe vorstellst.
Zitataber eine übersichtliche und funktionale Suche ist noch wichtiger
Was spricht dagegen, das Suchergebnis in einem Bericht anzuzeigen?
ZitatKann man eigentlich auch nach einem Gewissen Zeitraum filtern
Natürlich kann man das, muss man nur den Abfragecode entsprechend anpassen, entweder mit BETWEEN ... AND ... oder mit >= ... AND <= ....
Hey,
die Bilder sind im Anhang. Einmal wie ich mir das optimalerweise Vorgestellt habe über die Listenfelder und einmal wie ich auch damit Leben könnte.
Was ist eine Ifd-Nummer? bzw. was wir funktioniert die bedingte Formatierung?
ZitatWas spricht dagegen, das Suchergebnis in einem Bericht anzuzeigen?
Eigentlich spricht da nichts gegen ausser meine eigene Unfähigkeit und mein Unwissen ob das dann noch gut zu bedienen ist.
Müsste ich dann alle Daten aus tbl_Serviceverzeichnis, den Ausfällen und Artikeln übergeordnet gruppieren damit ich einigermaßen die Darstellung erhalte die ich anstrebe?
ZitatNatürlich kann man das, muss man nur den Abfragecode entsprechend anpassen, entweder mit BETWEEN ... AND ... oder mit >= ... AND <= ....
Wenn ich die Abfrage so programmiere würde ich beim öffnen der Suche gefragt wie das Start- und Enddatum lautet. Die Abfrage wird gefiltert.
Das ist grundsätzlich ok!
Aber wenn ich dann den Bericht aus der Suche erzeuge werde ich wieder nach Start- und Enddatum gefragt. Ich hätte das ganz gerne über Textfelder in der Suche gelöst die dann ihr Kriterium mit den anderen kombinieren.
Grüße
Churian
Hallo,
Zitat von: Churian am Juni 09, 2015, 14:18:22die Bilder sind im Anhang. Einmal wie ich mir das optimalerweise Vorgestellt habe über die Listenfelder und einmal wie ich auch damit Leben könnte.
beides ist machbar, wobei zu bedenken ist, dass die Listenfelder im Formular nicht vergrößerbar sind (bzw. erst wenn du in die Seitenvorschau gehst) was ich als Beeinträchtigung sehen würde.
ZitatWas ist eine Ifd-Nummer?
Damit meinte ich eine laufende Nummerierung innerhalb der Mitarbeiter-ID.
Zitatwir funktioniert die bedingte Formatierung?
Die bedingte Formatierung kann über das Menü Format eingerichtet werden. Damit kannst du eine Bedingung definieren und einige Formatierungen der Steuerelemente anstoßen, bspw. Schriftfarbe, Hintergrundfarbe, Fettdruck, etc. Da das Ausblenden nicht möglich ist, kann man die Schriftfarbe auf weiß (bzw. auf die Hintergrundfarbe) einstellen, um es unsichtbar zu machen.
Was den Bericht betrifft, so kannst du ihn nach Mitarbeiter gruppieren, die Mitarbeiterdaten im Gruppenkopf anzeigen und die abhängigen Daten (Ausfall und Artikelnummern) im Detailbereich.
Aber auch hier empfiehlt sich möglicherweise (wie im Formular) der Einsatz der Funktion SQLListe und die Ausgabe der Daten in einem vergrößerbaren Textfeld, dann kann auf die Gruppierung verzichtet werden.
ZitatWenn ich die Abfrage so programmiere würde ich beim öffnen der Suche gefragt wie das Start- und Enddatum lautet.
Die Parameter solltest du ebenfalls aus dem Formular holen, dann musst du sie nicht beim Öffnen des Berichts noch einmal eingeben.
ZitatIch hätte das ganz gerne über Textfelder in der Suche gelöst die dann ihr Kriterium mit den anderen kombinieren.
So hatte auch ich mir das vorgestellt.
Ich hatte das schon mal ausprobiert und kann dir morgen eine Beispiel-DB mit allen Varianten hochladen.
Melde dich bitte nochmal, wenn du Interesse daran hast.
Guten Morgen MaggieMay,
die Beispiel-DB wäre super dann könnte ich da die entsprechenden Codes und Einstellungen raus ziehen.
Ich schaue mir die unterschiedlichen Varianten dann an und schau welche für mich die Beste ist.
Vielen vielen Dank für die Mühe!!! :D :D
Grüße
Churian
Hallo,
im Anhang kommt die Beispiel-DB. Die besten Ergebnisse liefern mAn das Formular "frm_Daten_neu_2" in der Seitenansicht und der Bericht "rpt_Daten_neu_2", weil hier Ausfälle und Artikelnummern unabhängig voneinander nebeneinander gesetzt werden.
Ein Versuch, den Bericht mit Unterberichten zu erstellen scheiterte mehrfach und resultierte jeweils in einem Access-Absturz. Da half auch kein Reparieren.
Mit welcher Access-Version hast du die DB ursprünglich erstellt?
Hey,
vielen Dank. Ich schau mir das gleich mal an. ich habe Access 2010 genutzt.
Gibt es mit unterschiedlichen Access-Versionen Probleme?
Edit: In der zip-DB sind nur Tabellen.
Grüße
ZitatIn der zip-DB sind nur Tabellen.
Sicher nicht, da musst du wohl mal die Objektauswahl in der Navigation ändern.
Ich hatte die DB wegen der Endung "mdb" mit A2003 geöffnet und bearbeitet, das war wohl nicht so gut und verursachte die zahlreichen Abstürze - warum auch immer. Nach Konvertierung in A97 (;-)) konnte ich dann auch problemlos die Lösung mit den Unterberichten umsetzen.
Hey,
an der Navigation hat es gelegen.
Optisch sagt mir die Anzeige im Bericht am meisten zu allerdings lassen sich so die Artikelnummern und Ausfälle nicht mehr suchen bzw. nur eine kann man suchen.
Trotzdem Vielen vielen Dank! :)
Ich hab noch eine Frage die vielleicht etwas sehr blöde klingt aber könnte man vielleicht einfach alle Artikel in ein Feld schreiben und die trotzdem unabhängig voneinander suchen?
Meine bisherigen Erfahrungen sagen mir das alle Inhalte einer Zelle ein Wort sind und man immer alles eingeben muss damit die Suche ein Ergebnis liefert.
Als Beispiel:
Artikelnummer zu Einsatz 1: Z1234, Z1345
Artikelnummer zu Einsatz 2: Z1478, Z1004
Artikelnummer zu Einsatz 3: Z4798, Z9876
Artikelnummer zu Einsatz 4: Z1234, Z9876
Könnte ich hier in das Artikelnummer-Suchfeld auch Z1234 eingeben und mir wird der Datensatz 1 & 4 angezeigt?
Liebe Grüße
Churian
Hallo,
ZitatMeine bisherigen Erfahrungen sagen mir das alle Inhalte einer Zelle ein Wort sind und man immer alles eingeben muss damit die Suche ein Ergebnis liefert.
nein, das ist nicht zutreffend. Du kannst auch mit dem Joker suchen.
Prinzip:
ZitatWhere Artikelnummer Like "*" & [Suchtext]
Findet Z1234 egal wo es steht.
Zitatkönnte man vielleicht einfach alle Artikel in ein Feld schreiben
nein, das solltest Du lassen. Ist für eine Datenbank ungeeignet und verstößt bereits gegen die 1.Normalform (atomare Inhalte).
Du kannst auch in der einen Spalte nach mehreren Artikelnummern suchen.
Guten Morgen,
Hintergrund meiner Frage ist das hier im Forum ein anderer Nutzer, Carlos_C, in einem Aktuellen Thread genau das mit tests gemacht hat und dann auch nach ihnen sucht. Der Thread heißt Problem mit Suchmaske.
Ich hätte mit der Lösung zwar immernoch das Problem mit den Ausfällen allerdings würden die Artikelnummern schonmal zusammengafasst.
Hi,
du bist nicht ganz auf dem Laufenden, Carlos hat von der Suche mehrerer Werte in einem Mehrwertfeld inzwischen Abstand genommen. ;-)
Aber auch wenn man das wollte, so käme doch eher die von mir vorgeschlagene Lösung mit der Hilfstabelle zur Datensatzfilterung in Frage.
Hallo,
naja dann bleibt mir wohl keine andere Wahl als die Suche so zu gestalten wie du gesagt hast. ;)
Mein Chef muss sich jetzt das Ergebnis ansehen und absegnen. Hoffen wir mal das alles Ok ist und ich keine weitere Hilfe mehr benötige.
Vielen vielen Dank an alle die mir versucht haben zu helfen. Ohne euch hätte ich das nie geschafft oder nur mit viel größerem Zeitaufwand
Liebe Grüße
Churian