Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: klaus101 am April 15, 2016, 01:16:08

Titel: Schleifen, Loops und andere
Beitrag von: klaus101 am April 15, 2016, 01:16:08
Hallo Freunde,
hab 'ne Blokade
ich möchte lange Zahlenreihen wie folgt darstellen
Ausgangssituation:        Ziel Ausgabe:
Reihe                            Bereich
3466                            3466 bis 3467
3467
3515                            3515 bis 3519
3516
3517
3518
3519
3550                            3550 bis 3550
3596                            3596 bis 3599
3597
3598
3599

heißt aus einer Reihe von Zahlen sollen jeweils Anfang und Ende eines Bereiches dargestellt werden ohne die Zahlen dazwischen. In der Datenbank sind diese Zahlenreihen sequentiell gespeichert. Um die Ausgabe nicht unnötig lang werden zu lassen sollen diese in Bereichen zusammengefaßt werden.
Hab schon mal Schleifen gebaut mit move next previous etc. aber hänge in bischen fest was die Logik angeht.
Hat jemand eine Idee wie man das realisieren kann?
LG
Klaus
ACCESS 2010
Titel: Re: Schleifen, Loops und andere
Beitrag von: DF6GL am April 15, 2016, 16:56:11
Hallo,

vielleicht hilft dies (prinzipiell) weiter:

http://dbwiki.net/wiki/VBA_Tipp:_Liste_per_SQL_aufbauen


wenn Du die "Logik" der Bereichsgrenzen genau bestimmen kannst.

Kannst Du auch noch den Sinn dieser Geschichte erläutern?
Titel: Re: Schleifen, Loops und andere
Beitrag von: klaus101 am April 15, 2016, 18:17:37
Hallo Franz,

herzlichen Dank für Deine Antwort,
eigentlich simpel aber doch tricky
es handelt sich um eine Tabelle mit 2 Feldern
Feld 1 = Adressennummer
Feld 2 = Vertragsnummer
jetzt soll eine 2te Tabelle erstellt werden in der die Vertragsnr. als Bereich angegeben wird
wie in meinem Beispiel von 3515 bis 3519. Da es Adressen mit bis zu 10.000 Vertragsnummern gibt macht solch eine nicht datenbanktypische Struktur ausnahmsweise mal Sinn, widerstrebt mir zwar auch aber eine Angabe z.B.: 8970 bis 16700 ist etwas schlanker als Datensätze in Listenform
8970
...
...
...
16700

Beispiel: |Adressnr.|Vertagsnr. von|Vertragsnr. bis|
                100             8970             16700   

dient zum Ausdruck und zur Übersicht in einem Formular
wenn Änderungen an den Daten erfolgen wird diese Tabelle upgedatet.
Es gibt verschiedene Situationen in der Bereits vorh. Liste
a. Bereiche= fortlaufende Nummern von bis
b. Sprünge und einzelne Nummern siehe in meinem Beispiel Nr. 3550

nun bin ich auf der Suche nach einer Schleifenstruktur die mir diese Zahlen von der einen Tabelle in die Übersichtstabelle schaufelt.

Besten Gruß zum Wochenende
Klaus
Titel: Re: Schleifen, Loops und andere
Beitrag von: ebs17 am April 15, 2016, 18:53:47
Zitatnun bin ich auf der Suche nach einer Schleifenstruktur

Ach so. Ich würde es mit einer Abfrage umsetzen, da braucht man auch keine zweite Tabelle.
Ansatz: Ein Von-Wert ergibt sich, wenn es dazu keinen Vorgänger gibt
(Vertragsnummer - 1). Ein Bis-Wert hat entsprechend keinen Nachfolger.

Zitatjetzt soll eine 2te Tabelle erstellt werden in der die Vertragsnr. als Bereich angegeben wird
wie in meinem Beispiel von 3515 bis 3519. Da es Adressen mit bis zu 10.000 Vertragsnummern gibt macht solch eine nicht datenbanktypische Struktur ausnahmsweise mal Sinn

Wenn die Bereichsgrenzen nicht in einem Ausdruck zusammengefasst sind ("3515 bis 3519" oder Ergebnis aus SQL-Liste), sondern in getrennten Feldern gespeichert werden, ist diese Form der Erfassung durchaus datenbanktypisch, sinnvoll und üblich. Einen Bereich in Einzelwerte auflösen ist einfacher als der umgedrehte Weg, siehe auch Grundlagen - SQL ist leicht (1) - Hilfstabellen (http://www.ms-office-forum.net/forum/showthread.php?t=298414)
Titel: Re: Schleifen, Loops und andere
Beitrag von: klaus101 am April 15, 2016, 19:21:54
Hallo Eberhard,

auch Dir herzlichen Dank für Deine Antwort

wäre toll wenn man das mit einer Abfrage realisieren könnte
erster/letzter Wert sehen erst einmal gut aus. Nur schade das es innerhalb der Gruppierung die von der Adressnummer kommt größere Sprünge zwischen den Vertragsnummern gibt. Da wird die jeweils kleinste und größte Nummer ausgegeben. Wenn man jetzt noch nach zusammenhängenden gruppieren könnte wäre das prima. Oder hast Du einen Ansatz den ich nicht kenne.
Besten Gruß
Klaus
Titel: Re: Schleifen, Loops und andere
Beitrag von: ebs17 am April 15, 2016, 20:20:26
Als ungetesteter Versuch:
SELECT
   T.Adressennummer,
   T.Vertragsnummer AS UntereG,
   (
      SELECT
         MIN(U.ObereG) AS ObereG
      FROM
         (
            SELECT
               T1.Adressennummer,
               T1.Vertragsnummer AS ObereG
            FROM
               TabX AS T1
            WHERE
               NOT EXISTS
                  (
                     SELECT
                        NULL
                     FROM
                        TabX AS X
                     WHERE
                        X.Adressennummer = T1.Adressennummer
                           AND
                        X.Vertragsnummer = T1.Vertragsnummer + 1
                  )
         ) AS U
      WHERE
         U.Adressennummer = T.Adressennummer
            AND
         U.ObereG >= T.Vertragsnummer
   ) AS ObereG
FROM
   TabX AS T
WHERE
   NOT EXISTS
      (
         SELECT
            NULL
         FROM
            TabX AS X
         WHERE
            X.Adressennummer = T.Adressennummer
               AND
            X.Vertragsnummer = T.Vertragsnummer - 1
      )

Titel: Re: Schleifen, Loops und andere
Beitrag von: klaus101 am April 15, 2016, 20:37:45
wow
das sieht ja klasse aus
der sql-mann
damit werde ich mich jetzt mal 'ne Weile beschäftigen
ich sag Bescheid was draus geworden ist.

Nochmals vielen Dank
Klaus