# Datensatznummer mit SQL-Befehl ermitteln



## MikaM (12. Januar 2010)

Hallo User,

folgende Anfängerfrage.

Ich erhalte mit dem SQL-Befehl  <select * from kunden  where nr  =  "630.01.01 "> ein Resultset aus einer Access-Datenbank mit 100 Nummern zum Beispiel. Das Resultset enthält nur einen Datensatz, da die Nummer auch nur einmal vorhanden ist. 

Meine Frage, wie erhalte ich die dazugehörige Datensatznummer? Also, das die Nummer "630.01.01" zum Beispiel der 30. Datensatz war/ist. Die Nummer ist auch der PrimaryKey. 

Im Clipper/dBase gab es so etwas mit dem Befehl <recno()>.

Muß ich das ganze doch in einer while-Schleife laufen lassen oder geht das etwas komfortabler. Bin für jeden Hinweis dankbar.

Gruss MikaM


----------



## SilentWarrior (12. Januar 2010)

MikaM hat gesagt.:


> Ich erhalte mit dem SQL-Befehl  <select * from kunden  where nr  =  "630.01.01 "> ein Resultset aus einer Access-Datenbank mit 100 Nummern zum Beispiel. Das Resultset enthält nur einen Datensatz, da die Nummer auch nur einmal vorhanden ist.
> 
> Meine Frage, wie erhalte ich die dazugehörige Datensatznummer? Also, das die Nummer "630.01.01" zum Beispiel der 30. Datensatz war/ist. Die Nummer ist auch der PrimaryKey.


Wenn ich das richtig sehe, musst du einfach nur den Asterisken (*) durch den Spaltennamen des Primärschlüssels ersetzen. Oder meinst du was anderes?


----------



## MikaM (12. Januar 2010)

Danke Dir erst einmal. Mit dem Spaltennamen ist es nicht getan.

Die Datebank besteht zum Beispiel aus 100 verschiedenen Nummer. Ich will mit <select> nach einer bestimmten Nummer suchen. Diese gefunde Nummer (Resultset) steht z.B. an 30. Stelle in der Datenbank und diese Nummer benötige ich.


----------



## SilentWarrior (12. Januar 2010)

Geduld, junger Padawan.



MikaM hat gesagt.:


> Diese gefunde Nummer (Resultset) steht z.B. an 30. Stelle in der Datenbank und diese Nummer benötige ich.



An 30. Stelle, wenn die Tabelle nach welcher Spalte sortiert ist? Nach dem Primärschlüssel? Ich glaube nicht, dass es so funktioniert, aber das wäre zumindest mein Ansatz:


```
SELECT COUNT(*) FROM kunden WHERE nr <= "630.01.01" SORT BY nr ASC
```

Wie gesagt, ich glaube nicht, dass man Strings auf diese Art und Weise vergleichen kann (nr ist doch ein String, oder?), aber das wäre die grundsätzliche Herangehensweise.

Ausserdem – ebenfalls wie gesagt – kann dir niemand wirklich helfen, solange du nicht verrätst, nach welcher Spalte und ob auf- oder absteigend die Tabelle sortiert ist.


----------



## MikaM (13. Januar 2010)

Danke Dir, das Du mir hilfst. 

Die Access-Datei sieht folgendermaßend aus:

Versuche es Dir an einem gleichen Beispiel zu erklären. Vergieß das mit der Nummer, da diese auch nur ein String ist. Also,

diese besteht aus 3 Spalten (name, adresse, bemerkung), alles Strings. Die Spalte <name> hat den PrimaryKey.

name, adresse, bemerkung
---------------------------------------------
Albert, Leipzig, Bemerkung1
Berta, Dresden, Bemerkung2
Dora, Halle, Bemerkung_xyz
Nora, München, bemerkung_abc
Martha, Bremen, Bemerkung_wee
Zeppelin, Rostock, Bemerkung_fgz

Ich will in der Spalte <name> nach dem String <Nora> suchen und möchte die Datensatznummer dazu zurückerhalten. Also in dem Beispiel wäre das der Datensatz Nummer 4.

Ich benötige die Datensatznummer deshalb, weil ich in einem Java-Konstrukt für eine jTable auf den Datensatz fokussieren will. 

Danke Mika


----------



## dbwizard (13. Januar 2010)

MikaM hat gesagt.:


> Danke Dir, das Du mir hilfst.
> 
> 
> Ich will in der Spalte <name> nach dem String <Nora> suchen und möchte die Datensatznummer dazu zurückerhalten. Also in dem Beispiel wäre das der Datensatz Nummer 4.
> ...



Ich glaube, da liegt ein konzeptionelles Missverständnis vor. Es gibt in einer Datenbank nicht so etwas wie "einen 4." Datensatz. Daten in einer Datenbank sind in beliebiger Reihenfolge gespeichert, in eine bestimten Reihenfolge kannst du es nur über ein ORDER BY bringen. Aber ich sehe eigentlich dein Problem nicht, du hast den PK ja schon ?

Gruss


----------



## MikaM (13. Januar 2010)

Danke erstmal. Im dbase/clipper konnte man die Datensatznummer mit dem Befehl <recno()> herausbekommen, auch wenn diese indiziert (order by) war. Ansonsten hast Du schon recht, das es konzeptionell nicht stimmt . Mit dem Pk kann ich ja auch nicht viel anfangen. Im Java benötige ich dafür eine Datensatznummer, um mir das Leben nicht schwer zu machen.

Gruss MikaM


----------



## dbwizard (13. Januar 2010)

MikaM hat gesagt.:


> Mit dem Pk kann ich ja auch nicht viel anfangen. Im Java benötige ich dafür eine Datensatznummer, um mir das Leben nicht schwer zu machen.
> Gruss MikaM




Warum ? Geht mit jetzt nicht in den Kopf. Du benötigst einen *Eindeutigen* Schlüssel, um einen Datensatz zu identifizieren, egal ob in Java oder sonstwo. Wie der Schlüssel aufgebaut ist, ist erstmal irrelevant, aber er muss ein PrimaryKey sein. Die "Datensatznummer", welche du anspricht, ist nicht geeigenet dafür 

Gruss


----------



## MikaM (13. Januar 2010)

Gebe ich Dir nicht ganz recht. In einer Java jTable kann ich mit bestimmten Befehlen auf eine beliebige Tabellenzeile springen und diese fokussieren, ohne diese vorher nach einen String zu durchsuchen. Das wollte ich aber mit SQL "erschlagen" . Sonst muß ich die Java jTable ja noch einmal durchsuchen, das wollte ich mir sparen. Vielleicht ist mein Denkansatz auch verkehrt? Gruss


----------



## dbwizard (13. Januar 2010)

MikaM hat gesagt.:


> ....auf eine beliebige Tabellenzeile springen...



Ja, das kannst du, du musst dir einfach bewusst sein, dass es *irgendeine" Row aus der Datenbank sein kann, es ist nicht *geordnet*


Gruss


----------



## c4esar (13. Januar 2010)

Naja... Wenn Du es unbedingt willst, kannst Du ja das Sortieren der jTable durch den Benutzer unterbinden, und in Access noch eine AutoWert-Spalte hinzufügen.
Wenn Du dann die jTable korrespondierend zum AutoWert befüllst, müsste es funktionieren.
Persönlich würde ich das auf keinen Fall so machen.
Wonach bestimmt sich denn, welche Zeile Du fokussieren möchtest?

FG c4esar


----------

