PDA

Vollständige Version anzeigen : Fortlaufende Nummer in einer Abfrage


GW
07.07.2006, 15:05
Hallo

Seit Wochen versuche ich eine fortlaufende Nummer in Abfrage automatisch zu vergeben. Ich möchte eine Tabellenerstellung Abfrage starten , Datensätze aussortieren und dabei eine fortlaufende Nummer erzeugen.
Leider bringe ich es nicht hin.
Bedingungen : Die der Abfrage zu Grunde liegende Tabelle hat keinen Auto Wert und keinen Primärschlüssel.
Kann mir jemand sagen was ich in dem Feld der Abfrage eingeben muß.
Ich habe das Forum von hinten nach vorn durchsucht, die Hilfe von Donakarl FAQ 3.11 hilft mir auch nicht weiter. Ganz einfach ich kriegs nicht hin.

Worf1001
07.07.2006, 15:39
Hallo,


SELECT BGA.Nr, BGA.Name, BGA.RDatum, BGA.Netto, BGA.MWSt, BGA.Lieferant, BGA.AfA, BGA.Garantie, BGA.Abgang, BGA.Bemerkungen, (SELECT Count (*) FROM BGA As Temp WHERE Temp.Nr < BGA.Nr)+1 As Zähler
FROM BGA;


Die Namen musst Du natürlich durch die Namen Deiner Tabelle ersetzen.

Primärschlüssel gehören normalerweise zu einer Tabelle, nur so als Hinweis

GW
07.07.2006, 17:11
Hallo

Habs probiert klappt nicht, so sieht mein Code aus. Beim Aufruf erschein ein Fenster
Parameter eingeben "temp.Nr"

SELECT Lieferanten.Firmenname, Lieferanten.Strasse, Lieferanten.Ort, Lieferanten.Postfach, Lieferanten.PLZ, Lieferanten.Telefon, Lieferanten.Fax, Lieferanten.Laender_id, Lieferanten.Mahnung, Lieferanten.Lösch_id, (SELECT Count (*) FROM Lieferanten As Temp WHERE Temp.Nr <Lieferanten.plz)+1 AS Zähler
FROM Lieferanten
WHERE (((Lieferanten.Mahnung)="nein"));

Worf1001
07.07.2006, 17:22
dein Code ist gar nicht fertig:


SELECT Lieferanten.Firmenname, Lieferanten.Strasse, Lieferanten.Ort, Lieferanten.Postfach, Lieferanten.PLZ, Lieferanten.Telefon, Lieferanten.Fax, Lieferanten.Laender_id, Lieferanten.Mahnung, Lieferanten.Lösch_id, (SELECT Count (*) FROM Lieferanten As Temp WHERE Temp.Nr < Lieferanten.Nr)+1 As Zähler
FROM Lieferanten
WHERE Lieferanten.Mahnung="nein";


Wo ist die Lieferanten.Nr? Fehlt im ersten SELECT..

GW
07.07.2006, 18:05
Hallo

Ich habe den Code geändert die Abfrage kreiert jetzt Nummern nur nich fortlaufend bei 1 beginnend. Die Lieferanten Nummer ist eine 7 stellige Nummer. Aus ca 8500 Datensätze sollen ca 30 herausgefiltert werden und dann von 1 bis 30 durchnummeriert werden. Ergebnis: 1. Zahl = 438 2. Zahl 1609 3. Zahl = 5380 usw

Hier der Geänderte Code:
SELECT Lieferanten.Lieferanten_nr, Lieferanten.Firmenname, Lieferanten.Strasse, Lieferanten.Ort, Lieferanten.Postfach, Lieferanten.PLZ, Lieferanten.Telefon, Lieferanten.Fax, Lieferanten.Laender_id, Lieferanten.Mahnung, Lieferanten.Lösch_id, (SELECT Count (*) FROM Lieferanten As Temp WHERE Temp.Lieferanten_nr<Lieferanten.Lieferanten_nr)+1 AS Zähler
FROM Lieferanten
WHERE (((Lieferanten.Mahnung)="nein"));

Worf1001
07.07.2006, 18:12
also entweder zeigts nicht alles an, oder Deine Abfrage ist nicht vollständige -> siehe mal!

Die Lieferanten_nr ist eindeutig oder?

Worf1001
07.07.2006, 18:17
WHERE Temp.Nr < Lieferanten.Nr)+1 As Zähler


ist übrigens die Verknüpfung von der temporären Tabelle zur effektiven Tabelle.

Das Feld Lieferanten_nr muss da natürlich eindeutig sein.

Anne Berg
07.07.2006, 18:17
Die der Abfrage zu Grunde liegende Tabelle hat keinen Auto Wert und keinen Primärschlüssel. Das Problem ist ja wohl, dass so eine "Nr" gar nicht exisiert! :rolleyes:

Was spricht dagegen, der Tabelle nachträglich einen Autowert-Key zu verpassen?!

Andernfalls: Erstelle eine leere Kopie und füge dort einen Autowert-Key hinzu. Dann kannst du diese Tabelle als (temp.) Hilfstabelle benutzen, um die Nummerierung nach Donkarl hinzubekommen.

GW
07.07.2006, 18:18
Hallo

Nein die Lieferanten Nummer kann mehrmals vorkommen gleiche Firma in mehreren Orten .

Worf1001
07.07.2006, 18:18
Der AutoKey muss schon sein. Aber wird das Ergebnis später sortiert, nach einem anderen Feld, so ist dieser AutoKey dann schliesslich wertlos. Aber trotzdem für die Eindeutigkeit ist eine ID zwingend.

Worf1001
07.07.2006, 18:20
Also, ein Feld muss eindeutig sein. Ansonsten klappts nicht.

Wenn kein Feld eindeutig ist, dann entspricht Deine Tabelle sowieso nicht der Normalform.

Dann musst Du einen Primärschlüssel einfügen und diesen als Verbindung zwischen Temp und Lieferanten verwenden.

letts
07.07.2006, 19:00
Hallo GW,


Ich möchte eine Tabellenerstellung Abfrage starten

Erstellst du in regelmässigen Abständen immer eine Tabelle, welche mit Hilfe dieser Abfrage gefüttert wird?
Wenn ja, passiert dass per VBA( also: löst du die Abfrage in einem Formular hinter einem Button aus?)?
Falls ja, sind dass die besten Voraussetzungen um es folgendermassen zu machen:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Function</span> MeineFunktion()
<span class="TOKEN">Dim</span> qryTbl <span class="TOKEN">As</span> <span class="TOKEN">String</span>
&nbsp;
qryTbl = &quot;MeineTabelle30&quot; <span class="REM">'Name der Tabelle, welche durch die Tabellenerstellungsabfrage erstellt wird/ wurde</span>
&nbsp;
<span class="REM">'Pr&uuml;fen, ob die eine Tabelle existiert</span>
&nbsp;
<span class="TOKEN">If</span> DCount(&quot;name&quot;, &quot;MSysObjects&quot;, &quot;name like '&quot; &amp; qryTbl &amp; &quot;'&quot;) &gt; 0 <span class="TOKEN">Then</span>
<span class="REM"> 'Ja, Tabelle gibts</span>
<span class="REM"> 'also L&ouml;schen</span>
CurrentDb().Execute &quot;Drop Table &quot; &amp; qryTbl, dbFailOnError
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
&nbsp;
&nbsp;
<span class="REM"> 'Nein, Tabelle gibts nicht</span>
<span class="REM"> 'erstellen wir sie mit Hilfe der Tabellenerstellungsabfrage</span>
DoCmd.SetWarnings <span class="TOKEN">False</span>
DoCmd.OpenQuery &quot;MeineTabellenerstellungsabfrage&quot;
DoCmd.SetWarnings <span class="TOKEN">True</span>
<span class="REM"> 'Jetzt verpassen wir der eben erstellten Tabelle</span>
<span class="REM"> 'eine zus&auml;tzliche Autowertspalte namens lfdNr und alle darin enthaltenen Datens&auml;tze bekommen</span>
<span class="REM"> 'somit eine fortlaufende Nummer</span>
<span class="REM"> 'die neu erstellte Spalte befindet sich am Ende( rechts) der Tabelle</span>
&nbsp;
CurrentDb.Execute &quot;ALTER TABLE &quot; &amp; qryTbl &amp; &quot; ADD COLUMN lfdNR AUTOINCREMENT NOT NULL &quot;
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Function</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)