Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Icemann1970 am Juli 23, 2017, 10:00:21

Titel: Abf Datum
Beitrag von: Icemann1970 am Juli 23, 2017, 10:00:21
Hallo zusammen.
Ich brauche wieder mal Eure Hilfe.
Ich habe in meiner DB zu jedem Datensatz ein Datum wann die Arbeit angefangen wurde (jjjj.mm.tt) nun möchte ich durch eine Abfrage als Kombinationsfeld die Auswahl angezeigt bekommen (jjjj), aber das nur einmal je Jahr. Mein Problem ist nicht das Format (jjjj) sondern es zeigt mir zur Auswahl im Kombifeld alle vorhandenen Jahreszahlen ( beispiel: 10 mal 2016 und 15 mal 2017 ) an. Ergebnis der Abfrage ist richtig, möchte aber im Kombifeld nur 1 mal 2016 und 1 mal 2017 usw. angezeigt bekommen.
Habe viel ausprobiert und im Netz gesucht.  :-X
Freue mich schon auf die bestimmt sowas von einfache Lösung  ;D
Titel: Re: Abf Datum
Beitrag von: MzKlMu am Juli 23, 2017, 10:46:36
Hallo,
ergänze die Abfrage wie folgt:
Select Distinct....
Oder gruppiere über das Feld.

Ich würde mir es aber einfacher machen, ich würde mir eine Tabelle anlegen mit einem Feld für die Jahreszahl, dann braucht es diese Klimmzüge nicht.
Titel: Re: Abf Datum
Beitrag von: Icemann1970 am Juli 23, 2017, 12:02:56
Hallo Klaus.
Mir wäre es auch lieber mit der Tabelle. Hatte ich auch schon angelegt und div. Jahreszahlen eingegeben, die auch in dem Kombifeld angezeigt werden, aber keine Selektierung erhalten.
Im Abfragegenerator habe ich für die zu suchenden Mitarbeiter Wie [Formulare]![FormStatistikTechniker]![cbxTechnikerauswahl] eingegeben. Das funktioniert ja auch. Wenn ich nun noch dann die gesuchte Jahreszahl suche kommt nichts.
Ich habe wie gesagt eine Tabelle die sich "StatistikJahreszahl" nennt angelegt mit den Feldern "Jahr"
in  der gleichen Abfrage habe ich im zu suchenden Feld als Kriterium Wie [Formulare]![FormStatistikTechniker]![cbxJahresauswahl]eingegeben. Im Auswahlkombifeld erscheinen auch die Jahre aus der "neuen" Tabelle StatistikJahreszahl.
in den jeweiligen Kombifelderen habe ich vba nach Aktualisierung Option Compare Database
Option Explicit

Private Sub cbxTechnikerauswahl_AfterUpdate()
Me.Requery
End Sub

Private Sub cbxJahresauswahl_AfterUpdate()
Me.Requery
End Sub

eingegeben.
Titel: Re: Abf Datum
Beitrag von: Icemann1970 am Juli 23, 2017, 12:03:47
Gruppieren hatte auch keinen Erfolg.
Titel: Re: Abf Datum
Beitrag von: MzKlMu am Juli 23, 2017, 12:32:45
Hallo,
erstelle ein Minmalbeispiel mit Spieldaten, das das Verhalten zeigt und lade es komprimiert (Access Dienstprogramm) und gezippt hier hoch.
Titel: Re: Abf Datum
Beitrag von: Icemann1970 am Juli 23, 2017, 13:13:40
Habe was zum spielen hochgeladen  ;D
Titel: Re: Abf Datum
Beitrag von: Lachtaube am Juli 23, 2017, 13:59:21
Dein Versuch ist natürlich nicht im Beispiel hinterlegt. :(
Titel: Re: Abf Datum
Beitrag von: Icemann1970 am Juli 23, 2017, 14:18:36
Hallo Lachtaube,
bewusst. So kann man mein Wunsch sehen, wenn ich das Kriterium Wie [Forms]![FormStatistikTechniker]![cbxJahr] in dem Feld "AuftragErledigt"  eingebe funktioniert die Abfrage nicht.
Sorry für die verwirrung  ;D
Titel: Re: Abf Datum
Beitrag von: Icemann1970 am Juli 23, 2017, 17:22:58
Hmmmm, habe ich da was sooo dumm falsch gemacht dass mir keiner hilft  ;D ;D ;D
Titel: Re: Abf Datum
Beitrag von: MzKlMu am Juli 23, 2017, 17:41:57
Hallo,
wieso hilft Dir keiner ?
In der Antwort von Lachtaube in #6 ist doch die Lösung.
Titel: Re: Abf Datum
Beitrag von: Icemann1970 am Juli 23, 2017, 18:12:43
Ohhhhh wie peinlich ist dass denn  :D
Jetzt wünsche ich mir eine Zeitmaschine um meine Frage zu löschen  ;D. Vielen Dank für die Lösung und den Hinweis  ;D
Titel: Re: Abf Datum
Beitrag von: Icemann1970 am August 11, 2017, 20:21:50
Hallöchen, bin wieder da  ;D
Habe da ein kleines Problem. Ich habe die Lösung von Lachtaube übernommen. Mein problem ist folgendes.
Die Namen der Techniker laufen über die Personal Nummer (ID). Wenn ich jetzt die Abfrage laufen lasse funktioniert alles nur wie bekomme ich den Namen in dem cbxTechniker und nicht die Personal Nummer angezeigt? Da ich mich überhaupt nicht mit SQL auskenne würde ich mich freuen, wenn ihr mir dabei behilflich sein könntet.

SELECT Objekt.[GeräteNummer],Objekt.[Aufbereitetvon],Objekt.[Aufbereitetam],Objekt.Hersteller, Objekt.Fabrikat, Objekt.SN, Objekt.Bj FROM Objekt WHERE (((Objekt.[Aufbereitetvon])=Forms!FormStatistikTechniker!cbxTechniker) And ((Year(Objekt.[Aufbereitetam]))=Forms!FormStatistikTechniker!cbxJahr)) Or (((Year(Objekt.[Aufbereitetam]))=Forms!FormStatistikTechniker!cbxJahr) And ((Forms!FormStatistikTechniker!cbxTechniker)='(Alle)')) Or (((Objekt.[Aufbereitetvon])=Forms!FormStatistikTechniker!cbxTechniker) And ((Forms!FormStatistikTechniker!cbxJahr)='(Alle)')) Or (((Objekt.[Aufbereitetam])=True) And ((Forms!FormStatistikTechniker!cbxTechniker)='(Alle)') And ((Forms!FormStatistikTechniker!cbxJahr)='(Alle)'));


Die Angezeigten Techniker (als Ergebnis) sind richtig, diese hole ich mir aus der Datensatzherkunft, wo die Techniker ID,Vorname,Nachname,(Berechneter Vor+Nachname) haben (aus der Abfrage der Mitarbeiter)
Und in dem Kombifeld erscheint nur die ID Nummer. Sieh Bild im Anhang.
Danke.
Titel: Re: Abf Datum
Beitrag von: MzKlMu am August 11, 2017, 20:40:36
Hallo,
die Datenherkunft des Kombis sollte 2 Spalten haben, die Personalnummer und den Namen (in dieser Reihenfolge).
Die Spaltenzahl des Kombis stellst Du auf 2 und die Spaltenbreiten auf 0cm;5cm.
Durch die 0cm für Spalte 1 wird die Nummer ausgeblendet und der Name ist zu sehen.
Die 5cm kannst Du anpassen.
Titel: Re: Abf Datum
Beitrag von: Icemann1970 am August 11, 2017, 20:51:02
Hallo Klaus.
Ja, das ist ja mein Problem. Das habe ich bei den anderen Kombifeldern gemacht aber in dieser ist in der Datensatzherkunft ein SQL Code geschrieben. Das kann ich nur machen wenn es eine "normale" Abfrage ist, die sich auf Tabellen beziehen. <-- ich hoffe Ihr könnt mich verstehen.
Siehe weites Bild.
Titel: Re: Abf Datum
Beitrag von: MzKlMu am August 11, 2017, 22:54:35
Hallo,
ZitatDas kann ich nur machen wenn es eine "normale" Abfrage ist,
diese Annahme ist falsch. Du kannst in diese Abfrage auch den Namen mit dazunehmen (mit dem Join) und den Namen dann anzeigen.
Durch die Union etwas schwieriger, aber auch ohne Probleme.
Du kannst auch das Kombi schmal machen, dass man nur den Pfeil sieht und über die Auswahlabfrage den Namen mit dazu nehmen und in einem extra Feld direkt links neben dem Kombi anzeigen.
Titel: Re: Abf Datum
Beitrag von: Icemann1970 am August 12, 2017, 00:54:35
Hallo Klaus. Habe es auch so hinbekommen. Danke! Kannst du mir noch sagen, wie ich die Funktion (zeige alle) beim starten zeigen kann.
In diesem (falschen (Ansicht ID Nummer)) Code funktioniert es.
SELECT Mitarbeiter.[Vor und Nachname] FROM Mitarbeiter UNION SELECT '(Alle)' FROM Mitarbeiter;
in diesem richtigen Code kann ich es nicht unterbringen
SELECT Objekt.[Aufbereitet von], Mitarbeiter.[Vor und Nachname] FROM Mitarbeiter INNER JOIN Objekt ON Mitarbeiter.[Personal Nummer] = Objekt.[Aufbereitet von] GROUP BY Objekt.[Aufbereitet von], Mitarbeiter.[Vor und Nachname];

quasi die Funktion UNION SELECT '(Alle)' FROM Mitarbeiter
bzw.
UNION SELECT '(Alle)' FROM Objekt.[Aufbereitet von]
..... beim Laden oder beim Aktualisieren ist mir klar aber es zeigt keine an wenn ich die Funktion UNION SELECT einbringe.
Titel: Re: Abf Datum
Beitrag von: MzKlMu am August 12, 2017, 09:41:58
Hallo,
da Du jetzt 2 Spalten hast, barucht auch die Union 2 Spalten.
Versuche das mal so:
SELECT Objekt.[Aufbereitet von], Mitarbeiter.
[Vor und Nachname]
        FROM Mitarbeiter
        INNER JOIN Objekt ON Mitarbeiter.[Personal Nummer] = Objekt.[Aufbereitet von]
GROUP BY Objekt.[Aufbereitet von], Mitarbeiter.[Vor und Nachname]
UNION SELECT 0, '(Alle)' FROM Objekt


Ich bin aber nicht sicher ob das richtig ist. Ich habe keine Erfahrung mit UNION Abfragen. Probiere es aus.
Ansonsten musst Du mal warten, es gibt hier User die es besser können/wissen als ich.
Titel: Re: Abf Datum
Beitrag von: Lachtaube am August 12, 2017, 11:01:49
Die Gruppierung im ersten Teil der der Abfrage ist überflüssig, weil UNION (ohne das Schlüsselwort ALL) schon für eindeutige Datensätze im Resultat sorgt. Die Auswahl der ersten Zeile eines Kombifelds ist im Beim Laden Ereignis des Formulars meines Beipiels realisiert.
Titel: Re: Abf Datum
Beitrag von: Icemann1970 am August 12, 2017, 15:08:54
Morgen Klaus und Lachtaube,
In der DB von Lachtaube funktioniert das auch wunderbar, leider nur mit der ID (Personal Nummer). wenn ich dann aber die INNER JOIN Funktion einbaue,
SELECT Objekt.[Aufbereitet von], Mitarbeiter.[Vor und Nachname] FROM Mitarbeiter INNER JOIN Objekt ON Mitarbeiter.[Personal Nummer] = Objekt.[Aufbereitet von]
erscheint auch in dem Auswahlfeld nicht die " (Alle) " Auswahl, aber die Namen zu den Personal Nummern (und die dazugehörigen Daten) erscheinen richtig (inkl dem ausgewähltem Jahr).
@ Klaus: dein Code funktioniert leider nicht (keine Auswahl)
@ Lachtaube: Kannst du mir da weiterhelfen?
hier nochmal der Code vom cbxTechniker
SELECT Objekt.[Aufbereitet von], Mitarbeiter.[Vor und Nachname] FROM Mitarbeiter INNER JOIN Objekt ON Mitarbeiter.[Personal Nummer] = Objekt.[Aufbereitet von] GROUP BY Objekt.[Aufbereitet von], Mitarbeiter.[Vor und Nachname];
und die Datensatzquelle des Formulars.
SELECT Objekt.[Geräte Nummer], Objekt.[Aufbereitet von], Objekt.[Aufbereitet am], Objekt.Hersteller, Objekt.Fabrikat, Objekt.SN, Objekt.Bj FROM Objekt WHERE (((Objekt.[Aufbereitet von])=Forms!FormStatistikTechniker!cbxTechniker) And ((Year(Objekt.[Aufbereitet am]))=Forms!FormStatistikTechniker!cbxJahr)) Or (((Year(Objekt.[Aufbereitet am]))=Forms!FormStatistikTechniker!cbxJahr) And ((Forms!FormStatistikTechniker!cbxTechniker)='(Alle)')) Or (((Objekt.[Aufbereitet von])=Forms!FormStatistikTechniker!cbxTechniker) And ((Forms!FormStatistikTechniker!cbxJahr)='(Alle)')) Or (((Objekt.[Aufbereitet am])=True) And ((Forms!FormStatistikTechniker!cbxTechniker)='(Alle)') And ((Forms!FormStatistikTechniker!cbxJahr)='(Alle)'));

p.s.: leider bekomme ich das nicht schöner zur Ansicht hin, daher in einer langen Zeile.... sorry.
Titel: Re: Abf Datum
Beitrag von: Lachtaube am August 12, 2017, 15:24:30
Ich gehe davon aus, dass die 1. Spalte des Kombifelds gebunden ist, die Personalnummer vom Datentyp Zahl ist, es keine Personalnummer 0 gibt, die erste Spalte des Kombifelds die gebundene versteckte Spalte ist.
SELECT m.[personal nummer], m.[vor und nachname]
FROM   MITARBEITER m
       INNER JOIN OBJEKT o
               ON m.[personal nummer] = o.[aufbereitet von]
UNION
SELECT 0, '(Alle)'
FROM   MITARBEITER;


PS: wer Leerzeichen in Feldnamen verwendet, sollte auch in der Lage sein, logische Zeilenumbrüche in SQL-Code einzufügen. ::)
Titel: Re: Abf Datum
Beitrag von: Icemann1970 am August 12, 2017, 15:47:44
ZitatPS: wer Leerzeichen in Feldnamen verwendet, sollte auch in der Lage sein, logische Zeilenumbrüche in SQL-Code einzufügen. ::)
Der war gut und den habe ich auch verdient  ;D
Zeilenumbruch kann ich jetzt auch schon  :D :D :D

Ihr seid einfach spitze .... sorry wenn ich das immer wieder sage aber es ist so.
Es funktioniert. Dankeschön. ;D