Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: Brallu am März 20, 2017, 18:51:07

Titel: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Brallu am März 20, 2017, 18:51:07
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



Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: MzKlMu 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.

ZitatDiese 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.
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Brallu 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
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Beaker s.a. 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
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: MzKlMu 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.
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Brallu 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
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Brallu am März 20, 2017, 21:12:11
Hallo MzKlMu(Klaus),
hier nochmal als MDB!!

Gruß und danke

Danny
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Lachtaube 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.
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Beaker s.a. 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)
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Brallu 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.
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Beaker s.a. 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
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Lachtaube 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.
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Brallu 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
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Brallu 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
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Lachtaube 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.
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Brallu am März 23, 2017, 13:26:58
Danke für die viele Mühe Lachtaube,
das habe ich gebraucht um das mal zu durchschauen!!!

Das mit dem Formular läuft bei mir, aber war ja eh nur ein vor Entwurf.

Nochmals Danke

Gruß
Danny und bis bald :-\  :)

Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Brallu am September 17, 2017, 18:18:32
 Hallo Gemeinde und im Besonderen Lachtaube,
Ich habe geglaubt das Thema wäre für mich beendet aber nein es tauchen leider Fehler auf! :'(
Hier noch einmal kurz die Aufgabe.
Es gibt eine Haupttabelle tblMat mit den Daten zu einzelnen Artikeln.
Für jeden Artikel gibt es eine eigene Buchstaben Zahlen Kombination welche sich aus
tblMatStammdaten und tblBuchstabeRZNr ergibt. Die Struktur ist so richtig und wird so gebraucht.
(Materialverwaltung für Kletterzeugs)
Nun zum Problem:
Ich habe die Codezeilen von Lachtaube übernommen und sie berechnen auch eine neue Zahl nach dem auswählen.  Allerdings nicht wenn zu einem Buchstaben noch keine Zahl vorhanden ist.
Ich habe meine Datenbank ohne Daten erstellt und es kommen Fehlermeldungen.
Bitte im Beispiel den Buchstaben K auswählen dann kann man das sehen. (Ich hoffe ich habe nicht zu viel rausgelöscht :))

Dann musste ich noch feststellen, dass ich den Datensatz nicht richtig speichern kann weil er nicht die Buchstaben ID verwendet die ausgewählt wurde sondern in der tblBuchstabeRZNr einen neuen Datensatz anlegt mit Zahl statt die buchstabeZuordnungID des Buchstabens zu verwenden.
(kann man sehen im Letzen Datensatz der tblBuchstabeRZNr)

Ich hoffe das Problem lässt sich in der Beispieldatei erkennen und ihr könnt mir helfen!
Ich bin zwar in Access schon besser geworden aber in den VBA Eingeweiden finde ich mich leider immer noch nicht so gut zurecht deswegen hoffe ich auf eure Hilfe.
Ich danke schonmal allen die sich das hier anschauen und hoffe das Problem ist verständlich!

Gruß
Brallu
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Lachtaube am September 17, 2017, 19:49:14
Danny, schau mal, ob mit dieser Änderung am Code das Problem gelöst ist.
   '...
   'neueNummeranzeigen
   With CurrentDb().CreateQueryDef(vbNullString, QRY1)
      .Parameters("@buchstabeZuordnungID") = Me.cboBuchstabe
      With .OpenRecordset()
         If Not .EOF Then
            Me.txtNum = .Fields(0)
         Else
            Me.txtNum = 1
         End If
         .Close
      End With
   End With
End Sub
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Brallu am September 17, 2017, 20:17:54
Hallo Lachtaube,
ich danke dir für die schnelle Hilfe :)
Das mit dem Auswahlfehler klappt jetzt super!!!

Aber das mit dem Speichern klappt noch nicht.
Hat das was mit der qry zu tun???
Hab wohl was übersehen oder nicht verstanden :(
Wenn du da eventuell nochmal kurz drüberschauen könntest???

Gruß und vielen Dank
Danny
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Lachtaube am September 17, 2017, 20:28:21
Ich verwende selbst nie gebundene Formulare, in den Eingaben über mehrere verknüpfte Tabellen vorgenommen werden (Ausnahme sind 1:1-Beziehungen) und kann deshalb zum Speichern wenig beitragen.

Für das Vorhaben schein aber doch auch ein ungebundenes Formular ausreichend zu sein.
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Brallu am September 17, 2017, 20:38:50
Danke,  :) das versuche ich mal und melde mich morgen nochmal!!

Danke  :) :)

Gruß
Danny
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Brallu am September 18, 2017, 17:34:08
Hallo Lachtaube und andere Retter,
ich habe ein Problem beim Speichern des neuen Datensatzes! :-[
Bei der Auswahl des Buchstaben wird mit der Buchstaben-ID gearbeitet. Soweit super weil die richtige freie Zahl gesucht und gefunden wird.
Sie wird dann aber als Zahl in der Tabelle tblBuchstabeRzNr gespeichert.
(Hier soll aber gar kein Datensatz zugefügt werden) 
So das wenn der Buchstabe C im Formular ausgewählt wird, in der Tabelle tblBuchstabeRzNr unter neuer ID in der 2 Spalte das dann als 3 gespeichert wird.  (C wird also als 3 gespeichert)
In der tblMatStammdaten wird dieser Wert dann auch falsch gespeichert.

Leider habe ich keine Ahnung wo hier der Fehler liegt.

Wenn ihr mal auf das Beispiel schauen würdet, würde ich mich riesig freuen! :)

Gruß und Danke
Danny
Titel: Re: Ermitteln einer freien Nummer mit einer Zahlenauswahl vorweg
Beitrag von: Brallu am September 18, 2017, 20:46:23
So ihr lieben, es braucht sich keiner mehr den Kopf raufen!!!
Der Fehler war nur eine Textfeldverknüpfung :-[

Jetzt klappt das super und der Code von Lachtaube funktioniert super so wie er im letzten Beispiel enthalten ist!

Gruß
und ein dickes Danke an Lachtaube :)
Danny