Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Autowert' der Luecken fuellt
zurück: Ausrichtung in Berichten und Formularen weiter: Selbstschliessende MsgBox Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
KlausMz
Moderator Access


Verfasst am:
10. Apr 2008, 20:40
Rufname:
Wohnort: Irgendwo in der Pfalz

Autowert' der Luecken fuellt - Autowert' der Luecken fuellt

Nach oben
       Version: Office 2003

Hallo zusammen,
es kommt relativ häufig die Frage nach einem Autowert der auch Lücken wieder füllt. Da das mit einem normalen Autowert nicht so ohne weiteres funktioniert, habe ich mich mal an einer einfachen Lösung versucht. Das funktioniert wie folgt:

Zunächst muss eine (leere) Hilfstabelle erstellt werden mit einem Feld
Duplikate=Nein. Weiterhin ist eine Abfrage notwendig, die Das Feld mit der Nr der Datentabelle und dem einzigen Feld der Hilfstabelle mit left Join in Beziehung setzt. Diese Abfrage zeigt dann alle LfdNr die in der Datentabelle nicht vorhanden sind. Nun wird bei jedem neuen Datensatz mit Dmin die niederste freie Nr ermittelt und eingetragen. Wenn Dmin Null liefert wird mit Dmax die nächste Nr ermittelt. Das ganze hört sich jetzt komplizierter an als es ist. Es sind nur wenige Zeilen Code notwendig. Jede neu erzeugte Nr wird in die Hilfstabelle geschrieben, sodass jeder gelöschte Hautdatensatz diese Nr in der Hilfstabelle wieder erscheinen lässt. Mit Dmin bei einem neuen Datensatz steht diese dann wieder zur Verfügung. Ich hoffe, dass ich keinen groben Gedankenfehler gemacht habe.

BeispielDB anbei, mit der Bitte um Tests

_________________
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.



AutowertOhneLücken.zip
 Beschreibung:

Download
 Dateiname:  AutowertOhneLücken.zip
 Dateigröße:  23.09 KB
 Heruntergeladen:  466 mal



Zuletzt bearbeitet von KlausMz am 17. Jan 2009, 00:40, insgesamt einmal bearbeitet
Willi Wipp
Moderator


Verfasst am:
10. Apr 2008, 22:18
Rufname:
Wohnort: Raum Wiesbaden


FnlngGet_NextFreeNr - Re: 'Autowert' der Luecken fuellt - FnlngGet_NextFreeNr - Re: 'Autowert' der Luecken fuellt

Nach oben
       Version: Office 2003

Hi KlausMz,

habe es mir jetzt noch nicht wirklich angeschaut, aber im Prinzip sollte das doch auch mit
Problem bei der Autowert-Vergabe (FnlGet_NextFreeNr) loesbare sein ;)
Hier nochmal leicht modifiziert Smile
Code:
' Menue: Extras -> Verweise Microsoft DAO 3.xx Object Library muss aktiv sein!
Option Compare Database
Option Explicit

Public Function FnlngGet_NextFreeNr(strField As String, strTable As String, _
                                    Optional strWHERE As String = "", _
                                    Optional blnMaximum As Boolean = False, _
                                    Optional lngStartwert As Long = 1) As Long
    Dim lngActNr    As Long
    Dim lngMaxNr    As Long
    Dim strSQL      As String
    Dim rs          As DAO.Recordset
   
    strSQL = "SELECT " & strField & " " & _
               "FROM " & strTable & " "
    If strWHERE <> "" Then strSQL = strSQL & "WHERE " & strWHERE & " "
    strSQL = strSQL & "ORDER BY " & strField
    Set rs = CurrentDb.OpenRecordset(strSQL)
    If rs.BOF And rs.EOF Then
        FnlngGet_NextFreeNr = lngStartwert
      Else
        If blnMaximum Then
            rs.MoveLast
            FnlngGet_NextFreeNr = rs(0) + 1
          Else
            lngMaxNr = 0
            rs.MoveFirst
            lngActNr = 1
            Do Until rs.EOF
                If lngActNr < rs(0) Then
                    lngMaxNr = lngActNr - 1
                    Exit Do
                End If
                If rs(0) > lngMaxNr Then lngMaxNr = rs(0)
                rs.MoveNext
                lngActNr = lngActNr + 1
            Loop
            FnlngGet_NextFreeNr = lngMaxNr + 1
        End If
    End If
    rs.Close
    Set rs = Nothing
End Function
' Zum Testen im Direktbereich (Strg+G; Testfenster)
' Naechste freie Nummer (Luecken werden gefuellt)
'?FnlngGet_NextFreeNr("DeineID", "tblDeineTabelle")
' Naechste hoehere Nummer immer 1 groesser als Maximum
'?FnlngGet_NextFreeNr("DeineID", "tblDeineTabelle", , True)
strField = Feldname
strTable = Name der Tabelle (oder Abfrage)
strWHERE = Filterbedingung
blnMaximum = Maximum+1 (True) oder kleinste 'freie' Zahl
lngStartwert = Startwert wenn kein DS vorhanden ist (ergaenzt)

_________________
Eine kurze Rueckmeldung waere nett
SL Willi Wipp

(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)


Zuletzt bearbeitet von Willi Wipp am 30. Okt 2008, 14:29, insgesamt 2-mal bearbeitet
KlausMz
Moderator Access


Verfasst am:
10. Apr 2008, 23:04
Rufname:
Wohnort: Irgendwo in der Pfalz

AW: "Autowert" der Lücken füllt - AW: "Autowert" der Lücken füllt

Nach oben
       Version: Office 2003

Hallo Willi Wipp,

ich hatte den Ehrgeiz, mit möglichst wenig Code auszukommen. Da muss auch keine Funktion eingebaut werden. Außerdem lassen sich durch geringfügige Modifikationen auch Nummernkreise verwalten. Wenn man für die Hilfstabelle gleich eine ganze Zahlenreihe anlegt, kann man den Quasiautowert für unterschiedliche Felder mit unterschiedlichen Schrittweiten, Start und Endwerten belegen.

_________________
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
toxicman
kann schon etwas mehr....


Verfasst am:
11. Apr 2008, 21:29
Rufname:
Wohnort: Bei Nürnberg

AW: "Autowert" der Lücken füllt - AW: "Autowert" der Lücken füllt

Nach oben
       Version: Office 2003

Hallo Klaus!

Habe gestern mal deine Version probiert. Hatte keine Auffälligkeiten festgestellt. Geht prima Very Happy .

Sowas in der Richtung werde ich vielleicht auch mal evtl. in meine DB integrieren.

PS: Bin nun kein Fliegenfänger mehr...... Rolling Eyes

Mfg Toxic

_________________
Rechtschreibfehler jeder Art dienen zur allgemeinen Belustigung Rolling Eyes
MAPWARE
Access Profi(l)neurotiker


Verfasst am:
22. Apr 2008, 16:10
Rufname:
Wohnort: Hannover

AW: "Autowert" der Lücken füllt - AW: "Autowert" der Lücken füllt

Nach oben
       Version: Office 2003

Hallo,

ich hab noch eine Variante dazu. Diese erzeugt erheblich weniger Server-Roundtrips nämlich nur 3. Vom MS-SQL Server werden die Selects direkt ausgeführt. Die Antwortzeiten liegen auch bei großen Tabellen (100000 Datensätze) im Millisekundenbereich. Zurückgegeben wird natürlich immer der kleinste noch freie Schlüssel ab dem optionalen Startwert.
Code:
Public Function GetFreeKey(Field As String, Table As String, _
                           Optional Start As Variant) As Long
    Dim strSQL As String
   
    If Not IsMissing(Start) Then
        strSQL = "SELECT [" & Field & "] " & _
                   "FROM [" & Table & "] " & _
                  "WHERE [" & Field & "] = " & Start
        If DBEngine(0)(0).OpenRecordset(strSQL, dbOpenForwardOnly, _
                                        dbSeeChanges).EOF Then
            GetFreeKey = Start
            Exit Function
        End If
    End If
    strSQL = "SELECT Min([Field]) FROM [Table] WHERE "
    If Not IsMissing(Start) Then
        strSQL = strSQL & "[Field] > " & Start & " AND "
    End If
    strSQL = strSQL & "NOT Exists (SELECT [Field] FROM [Table] AS T " & _
                                   "WHERE [T].[Field]=[Table].[Field]+ 1)"
    strSQL = Replace(strSQL, "Table", Table)
    strSQL = Replace(strSQL, "Field", Field)
    GetFreeKey = DBEngine(0)(0).OpenRecordset(strSQL, dbOpenForwardOnly, _
                                              dbSeeChanges).Fields(0) + 1
End Function

_________________
Grüße
Marcus

Wer Controls nicht sinnvoll benennt, wird es später bereuen.
Willi Wipp
Moderator


Verfasst am:
24. Apr 2008, 09:08
Rufname:
Wohnort: Raum Wiesbaden


Re: FnlngGet_NextFreeNr - Re: 'Autowert' der Lücken füllt - Re: FnlngGet_NextFreeNr - Re: 'Autowert' der Lücken füllt

Nach oben
       Version: Office 2003

Hi Alle,

bitte Nachfragen zu diesem Thema im Forum Access Programmierung / VBA
beim Thema "Autowert" der Lücken füllt {Nachgefragt} stellen.

_________________
Eine kurze Rueckmeldung waere nett
SL Willi Wipp

(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Autowert kann nicht zurückgesetzt werden 2 Smmmile 497 08. Aug 2007, 22:11
Smmmile Autowert kann nicht zurückgesetzt werden
Keine neuen Beiträge Access Tabellen & Abfragen: AutoWert - Startwert festlegen 1 dakloese 4679 22. Jun 2007, 11:58
steffen0815 AutoWert - Startwert festlegen
Keine neuen Beiträge Access Tabellen & Abfragen: Autowert aktualisieren nach löschen über SQL 14 Gast 4058 30. Apr 2007, 06:41
jens05 Autowert aktualisieren nach löschen über SQL
Keine neuen Beiträge Access Tabellen & Abfragen: AutoWert zurücksetzen 3 user0815 3730 28. März 2007, 07:52
user0815 AutoWert zurücksetzen
Keine neuen Beiträge Access Tabellen & Abfragen: Autowert aktuelles Jahr in Tabelle einfügen 2 AndreM 1712 19. Dez 2006, 20:27
AndreM Autowert aktuelles Jahr in Tabelle einfügen
Keine neuen Beiträge Access Tabellen & Abfragen: Autowert ändern 0 derhoeppi 815 21. Nov 2006, 13:30
derhoeppi Autowert ändern
Keine neuen Beiträge Access Tabellen & Abfragen: Autowert wieder von 1 beginnen? 1 Svenman_1 892 31. Mai 2006, 16:57
Willi Wipp Autowert wieder von 1 beginnen?
Keine neuen Beiträge Access Tabellen & Abfragen: ID - Autowert in Tabelle 4 fuzzy 1530 16. Mai 2006, 08:19
fuzzy ID - Autowert in Tabelle
Keine neuen Beiträge Access Tabellen & Abfragen: Feld mit AutoWert sinnvoll? 1 Schneehasal18 706 21. März 2006, 10:09
stpimi Feld mit AutoWert sinnvoll?
Keine neuen Beiträge Access Tabellen & Abfragen: Autowert in eine Tabelle übertragen... 4 Mr.E 1602 27. Okt 2005, 08:53
Mr.E Autowert in eine Tabelle übertragen...
Keine neuen Beiträge Access Tabellen & Abfragen: autowert auf 0 setzen 2 heirnele 4353 21. Jul 2005, 12:39
heirnele autowert auf 0 setzen
Keine neuen Beiträge Access Tabellen & Abfragen: ind.CreateField: Zuweisung Felddatentyp "AutoWert" 3 RoWi 4450 30. Jun 2005, 15:16
RoWi ind.CreateField: Zuweisung Felddatentyp "AutoWert"
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Word VBA