AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datensatznummer in einer SQL Anweisung ausgeben?
Thema durchsuchen
Ansicht
Themen-Optionen

Datensatznummer in einer SQL Anweisung ausgeben?

Ein Thema von hitzi · begonnen am 2. Nov 2005 · letzter Beitrag vom 3. Nov 2005
Antwort Antwort
Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#1

Datensatznummer in einer SQL Anweisung ausgeben?

  Alt 2. Nov 2005, 18:35
Datenbank: Access • Zugriff über: ODBC
Hallo,

wie kann ich die Datensatznummer schon in einen SQL ausgeben?
In diesem Fall handelt es sich um eine Access Datenbank.

Ich dachte an sowas wie select name1, betrag, indexof(*) from user order by name1

nur gibt es kein indexof.

Vielen Dank schonmal
Thomas
Thomas
Besucht doch mal http://www.hitziger.net
  Mit Zitat antworten Zitat
Ulf346C

Registriert seit: 15. Okt 2003
Ort: Magdeburg
85 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

Re: Datensatznummer in einer SQL Anweisung ausgeben?

  Alt 2. Nov 2005, 19:17
Eine SQl-DB muß nicht zwingend ein Schlüsselfeld haben.
Daher haben die Datensätze auch keine "Index"-Nummer.

Du müßtest feststellen ob es in der Tabelle einen "primary key" gibt.
  Mit Zitat antworten Zitat
Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Datensatznummer in einer SQL Anweisung ausgeben?

  Alt 2. Nov 2005, 19:29
Ich meine das eher so:

Name1 betrag
Thomas 12
Andreas 9
Lothar 11

Wenn das nun das nun unsortiert ausgegebe (select name1 from users)
ist Thomas an der Position 1, Andreas an der Position 2 und Lothar an der Position 3.
Gebe ich nun die Tabelle sortiert nach Betrag aus (select name1 from users order by betrag)
dann ist Andreas an Position 1, Lothar an Position 2 und Thomas an Position 3.

Eben diese Position hätte ich gern schon im SQL ermittelt.
Thomas
Besucht doch mal http://www.hitziger.net
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#4

Re: Datensatznummer in einer SQL Anweisung ausgeben?

  Alt 2. Nov 2005, 21:13
SELECT name1 FROM users ORDER BY betrag
  Mit Zitat antworten Zitat
Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Datensatznummer in einer SQL Anweisung ausgeben?

  Alt 3. Nov 2005, 06:57
Hä? Das ist doch genau das SQL was ich schon selber geschrieben habe.
Die Sortierung ist nicht das Problem, sondern die Ermittlung der Datensatznummer des jeweiligen Datensatzes in der Ergebnisdatenmenge.

Gruss
Thomas
Besucht doch mal http://www.hitziger.net
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Datensatznummer in einer SQL Anweisung ausgeben?

  Alt 3. Nov 2005, 07:06
Es gibt bei SQL per se keine Datensatznummern, da SQL eine mengenbasierte Datenbankabfragesprache darstellt. Im Gegensatz zu einer ISAM (DBase, Access etc.), die die Daten als Tabellen mit Datensatznummer auffässt, sieht SQL eine 'Tabelle' als Menge von Datensätzen ohne innere Ordnung an. Die SQL-Konstrukte JOIN (Schnittmenge) und UNION (Vereinigung) spiegeln dieses Konzept wieder.

Die DB-Server verhalten sich ähnlich. In einzelnen Implementierungen (IB, Firebird z.B.) kann man zwar auf eine Datensatznummer zugreifen, aber das ist eine Krücke und, ich wiederhole mich, eigentlich nicht SQL-konform.

Du musst Dir deine Datensatznummer selbst basteln, indem Du eine zusätzliche Spalte einführst, die mit einem eindeutigen Wert (z.B. mit Hilfe eines Zählers) gefüllt ist. Bei MS-SQL ist das eine 'IDENTIY'-Spalte, FB und IB verwenden hierfür i.A. einen Generator.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Datensatznummer in einer SQL Anweisung ausgeben?

  Alt 3. Nov 2005, 08:01
Hallo Thomas,

ich habe dich so verstanden, dass du keine feste Datensatznummer speichern möchtest, sondern eine fortlaufende Ordinalzahl in Abhängigkeit von einer Sortierung über die ORDER-BY-Klausel mit ausgeben möchtest. Für die reine SQL-Lösung fehlt dazu in Access leider ein Generator. Es gibt zwar die Krücke mit der temporären Tabelle (SELECT ... INTO zum Anlegen einer leeren Tabelle, ALTER TABLE zum einfügen eines IDENTITY Feldes, INSERT INTO ... SELECT ... zum Füllen und Durchnummerieren), aber eigentlich brauchst du das doch gar nicht. In deinem Programm kannst du doch auf die Eigenschaft RecNo eines DataSet zugreifen. In einem computed field kannst du diese Ordinalzahl sogar noch ausgeben, wenn es sein muss.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#8

Re: Datensatznummer in einer SQL Anweisung ausgeben?

  Alt 3. Nov 2005, 09:03
Zitat von hitzi:
Hä? Das ist doch genau das SQL was ich schon selber geschrieben habe.
Ooops, da habe ich wohl nur die Hälfte gelesen.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#9

Re: Datensatznummer in einer SQL Anweisung ausgeben?

  Alt 3. Nov 2005, 09:18
Moin, moin,

ja das ist wahrscheinlich in SQL bei Access nicht drin. Es gibt einige SQL-Dialecte, die den Befehl ROWNUM haben, also man kann dan ein Statement bauen SELECT ROWNUM FROM TABLE, Access hat da aber nichts vergleichbares. Bei interbase würde man eine StoredProcedure bauen (im Fyracle Project gibt es ROWNUM ). Ein Statement wie SELECT Count(ID) FROM Table verweigern DBMS.

Du könntest im Dataset ein berechnetes Feld anlegen, das ist dann zwar nicht im SQL, spart aber dafür Netzbandbreite, denn Deine Application macht das ja intern ehedem. Vielleicht könntest Du ein DBGrid ableiten, was die erste Spalte als Zählspalte anzeigt.

Grüße // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz