collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 45
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13702
  • stats Beiträge insgesamt: 62196
  • stats Themen insgesamt: 8474
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg  (Gelesen 952 mal)

Offline Brallu

  • Access-Profi
  • **
  • Beiträge: 117
Hallo Helfer,
Ich habe mal wieder ein Problem.
Ich möchte in einem Formular einen neuen Datensatz anlegen.
In diesem Datensatz soll eine nicht vergebene Zahl in der zweiten Spalte gesucht werden die mit der ersten Spalte verknüpft ist. zb.    1/48   (Siehe Bild1).
Die erste Spalte hat Zahlen von 1 bis 18 und die zweite zu der ersten Spalte von 1 bis viele und das mehrfach. Also es gibt  1/23,   2/23,   15/134  usw.
Es kann aber auch freie Zahlen zwischendurch geben durch gelöschte Datensätze. (4/23,___, 4/25)
In Bild 2 ist das Formular da könnt ihr sehen wie das aussehen soll.
Erst soll die Erste Zahl ausgewählt werden und mit Dieser Auswahl soll eine dazu passende Zahl gesucht werden.
Diese soll dann im unteren Feld angezeigt werden zum gemeinsamen speichern.

Ich hoffe das ich das halbwegs brauchbar erklärt habe!

Gruß und danke schonmal fürs lesen!!!

Danny



 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 6754
Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
« Antwort #1 am: März 20, 2017, 18:57:51 »
Hallo,
ich kann Dir nicht folgen.
Und die gezeigten Zahlenbeispiele (1/23,   2/23,   15/134) kann ich nicht finden.

Zitat
Diese soll dann im unteren Feld angezeigt werden zum gemeinsamen speichern.
Im Regelfall sollten solche zusammengesetzten Werte nicht gespeichert werden, sondern nur die Einzelwerte.

Kannst Du da alles mal genauer erklären.
Und ein Bild des Beziehungsfensters könnte auch hilfreich sein.
Gruß
Klaus
 

Offline Brallu

  • Access-Profi
  • **
  • Beiträge: 117
Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
« Antwort #2 am: März 20, 2017, 20:38:47 »
Ich hatte es befürchtet  :-\,
also noch mal anders. Hier eine Beispieldatei mit dem Problem!

Ich hoffe daraus wirst du jetzt schlauer.

Es soll eine freie Zahl gesucht werden und diese soll dann mit den restlichen Angaben gespeichert werden.

Gruß
Danny
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1493
Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
« Antwort #3 am: März 20, 2017, 20:59:49 »
Hallo Danny,
Lege eine Tabelle (i.B. tblZahlen) mit einer Spalte (Zahl) an, die den benötigten Wertebereich (1 - n) enthält.
Dann erhältst du die kleinste, nicht verwendete Zahl mit
SELECT Min(Z.Zahl)
FROM tblZahlen AS Z
WHERE Z.Zahl NOT IN
                    (SELECT T.ZahlZwei
                     FROM DeineTabelle AS T)

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 6754
Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
« Antwort #4 am: März 20, 2017, 21:00:04 »
Hallo,
ich habe nur Access2003 und benötige zwingend eine MDB. Entweder konvertieren, oder auf jemand anders warten.
Gruß
Klaus
 

Offline Brallu

  • Access-Profi
  • **
  • Beiträge: 117
Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
« Antwort #5 am: März 20, 2017, 21:09:09 »
Hallo Ekkehard,
wie baue ich dann noch in die Abfrage die Auswahl 1 bis 16 aus dem ersten Kombifeld mit ein??
Den benötigten Wertebereich (1 - n) schreibe ich dann wohin und bezieht sich das dann auch auf meine Spalte.

Sorry das ich so blöd frage aber ich stehe gerade auf dem Schlauch.
Gruß
Danny
« Letzte Änderung: März 20, 2017, 21:19:06 von Brallu »
 

Offline Brallu

  • Access-Profi
  • **
  • Beiträge: 117
Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
« Antwort #6 am: März 20, 2017, 21:12:11 »
Hallo MzKlMu(Klaus),
hier nochmal als MDB!!

Gruß und danke

Danny
« Letzte Änderung: März 20, 2017, 21:28:08 von Brallu »
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 728
Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
« Antwort #7 am: März 20, 2017, 21:15:23 »
Im Nach Aktualisierung Ereignis des Kombifelds ermittelst Du die Anzahl der Datensätze (z. Bsp. mit DCount oder in einer Abfrage mit Count), die es zu dieser Nummer schon gibt und die höchste vergebene Nummer des Zielfelds (analog mit DMax oder Max in einer Abfrage). Sind beide gleich (Idealfall), dann ist die höchste Nummer + 1 Dein Zielwert. Wenn nicht, klapperst Du in einer Recordset-Schleife die Zahlen von 1..maximal der höchsten Nummer ab (es muss mindestens eine Lücke geben). Wenn eine Nummer nicht gefunden wurde, ist das Dein Zielwert und die Schleife ist abzubrechen.
Grüße von der (⌒▽⌒)
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1493
Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
« Antwort #8 am: März 20, 2017, 21:17:11 »
SELECT Min(Z.Zahl)
FROM tblZahlen AS Z
WHERE Z.Zahl NOT IN
                    (SELECT T.ZahlZwei
                     FROM DeineTabelle AS T
                     WHERE T.ZahlEins = Forms.DeinForm.DeinKombi)
« Letzte Änderung: März 21, 2017, 13:22:32 von Beaker s.a. »
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline Brallu

  • Access-Profi
  • **
  • Beiträge: 117
Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
« Antwort #9 am: März 20, 2017, 21:27:04 »
hallo Lachtaube,
leider habe ich noch nicht so viel Plan.
Ich habe vor 2 Monaten mit Access angefangen aber bei  speziellen Abfragen oder VBA stehe ich noch zimlich im Dunkeln :-[

Ich versuche mal aus euren Tipps was zu erstellen.

Gruß und Danke euch allen das ihr mich nicht allein lasst.
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1493
Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
« Antwort #10 am: März 20, 2017, 22:01:05 »
Hallo Danny,
Noch einfacher  :)
Private Sub DeinKombi_AfterUpdate()
    Me!txtZahl2 = DMin( _
                  "Zahl", _
                  "tblZahlen", _
                  "Zahl NOT IN " _
                      & "(SELECT T.ZahlZwei " _
                      & "FROM DeineTabelle AS T " _
                      & "WHERE T.ZahlEins = " & Me!DeinKombi.Value & ")")
End Sub

gruss ekkehard
« Letzte Änderung: März 21, 2017, 13:24:05 von Beaker s.a. »
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 728
Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
« Antwort #11 am: März 21, 2017, 04:27:28 »
Danny, ich habe die drei möglichen Resultate, die sich aus der Auswahl eines Buchstabens ergeben, in 3 Textfelder in einen kleinen Dalog eingebaut.
Grüße von der (⌒▽⌒)
 

Offline Brallu

  • Access-Profi
  • **
  • Beiträge: 117
Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
« Antwort #12 am: März 21, 2017, 05:34:16 »
Ich danke euch allen für die Hilfe!!!
Werde alle Varianten heute abend mal einbauen und schauen was für mich und den Anwender das beste ist :).

Super Forum und  super Hilfe!!!!!

Gruß
Danny
 

Offline Brallu

  • Access-Profi
  • **
  • Beiträge: 117
Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
« Antwort #13 am: März 22, 2017, 17:47:19 »
Hallo  Lachtaube,
ich habe zu deinem Programm nochmal ein paar Fragen.
Wenn ich deinen VBA Code in meine Listen übernehmen will und die Bezeichnungen ändere, also Mat gegen tblMat das klappt. Aber wenn ich die alpha_ID gegen BuchID ändere geht das debuggen los.
Brauche ich wirklich in beiden Tabellen die Bezeichnung BuchID und nicht BuchID zu BuchID_F oder so??? Wenn beide gleich sind dann klappt es. Oder ist das jetzt irgendwie Zufall???

Gruß
Brallu
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 728
Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
« Antwort #14 am: März 22, 2017, 20:14:48 »
Danny, ich erstelle im Code 3 temporäre Abfragen, welche man auch speichern könnte. Hier ist die erste (und einzig wichtige), die die erste freie Nummer ermittelt.SELECT TOP 1 num + 1
FROM   MAT m
WHERE  alpha_id = [@alpha_id] AND
       NOT EXISTS
           ( SELECT NULL
             FROM MAT
             WHERE  alpha_id = [@alpha_id] AND
                    num = m.num + 1 )
ORDER  BY 1;
Das Prädikat TOP 1 bewirkt, dass bei eindeutigen Feldinhalten, was ja gegeben ist, nur ein Datensatz ermittelt wird. Wir nehmen also eine Nummer (num) aus der Tabelle MAT und addieren 1 hinzu und sortieren gleichzeitig nach der ersten Spalte (num) aufwärts. Nun stellen wir in einem Parameter eine notwendige Randbedingung auf, die sich auf die Id (alpha_id in meinem Beispiel) der Buchstabentabelle (Alpha) bezieht. Gleichzeitig wird ein notwendiger Parameter @alpha_id festgelegt, der später im Code aus dem Kombifeld bestückt wird, um eine Eindeutigkeit zu erzielen. In der zweiten Bedingung wird geprüft, ob es unter der gleichen alpha_id eine num plus 1 gibt. Ist diese Bedingung nicht erfüllt, haben wir das Ziel erreicht.

Die zweite Abfrage zählt die Anzahl der Datensätze für eine mittels Parameter übergebene apha_id.SELECT Count( * )
FROM MAT
WHERE  alpha_id = [@alpha_id];

Und die dritte Abfrage ermittelt den höchsten bisher vergebenen Wert für num entsprechend des Parameters für alpha_id.SELECT Max( num )
FROM MAT
WHERE  alpha_id = [@alpha_id];

Im Code werden dann die Abfragen der Reihe nach erstellt, der Parameter übergeben und in einem Recordset, welches nur einen Datensatz liefert und auch nur ein Feld besitzt, an die Steuerelemente durchgereicht.

Wo und wie Du Deine buchID oder auch matNummerBuchstabe_F_ID hernimmst ist letztendlich wurscht - wichtig ist, dass sie gültig ist.

PS: das Formular in Deinem Beispiel hat leider einen Schuß weg, weshalb ich es nicht verwenden kann.
Grüße von der (⌒▽⌒)