Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Abfrage (https://www.delphipraxis.net/26859-sql-abfrage.html)

motu 30. Jul 2004 11:56


SQL Abfrage
 
Hallo,

ich möchte gern in einer Datenbank nach einem Wert suchen lassen, ist
er vorhanden, soll der Datensatz als auch der dem Wert entsprechende
vorhergehende als der Nachfolger angezeigt werden. Wenn der Wert
nicht gefunden wird, sollen aber auch Vorgänger und Nachfolger
angezeigt werden.
Zur Verfügung hab ich MSSQL und DelphiADO

Zur Erklärung: Meine DB sieht etwas so aus:

ID Wert
1 10
2 20
3 30
4 50
5 40
6 60

Ich kann also nicht einfach sagen: "Suche Wert, nimm DS mit ID+/-1"
Ich muß quasi erstmal meine Daten sortieren, dann suchen und dann das
Umfeld ausgeben lassen. Nur wie?

Hansa 30. Jul 2004 12:11

Re: SQL Abfrage
 
Zitat:

Zitat von motu
...Ich kann also nicht einfach sagen: "Suche Wert, nimm DS mit ID+/-1"

Wieso nicht ?

SQL-Code:
SELECT * FROM BLA WHERE ID BETWEEN (:ID-1 AND ID+1);
Syntax ohne Gewähr. "Between" auch. :mrgreen:

motu 2. Aug 2004 07:04

Re: SQL Abfrage
 
Zitat:

Zitat von "Hansa
Wieso nicht ?

Na weil, die Steigung der Werte nicht mit der Steigung der ID zusammenhängt. Wenn neue Werte in die DB eingetragen werden, bekommen die 'ne neue ID egal ob die Ende ans Ende, an den Anfang oder ind die Mitte gehören. Hinzu kommt, das ich dann immer einen Wert finden muß, der aber nicht immer vorhanden ist.

Macht aber nichts, soweit war ich vor ein paar Wochen schon. Da find ich schon eine andere Lösung, so wie damals.

SirThornberry 2. Aug 2004 07:12

Re: SQL Abfrage
 
naja, deine sql abfrage müsste dann einfach alles abfragen und sortiert zurück geben
SQL-Code:
select * from YOURTABLE order by ID ASC
mit TQuery.First, TQuery.Next etc. kannst du dann die ergebnisse durchgehen und nach deinem wert suchen. Wenn du diesen gefunden hast kannst du mit TQuery.Next den nachfolgenden Wert ermitteln und mit TQuery.Prior den davor liegenden Wert. Ob TQuery in Zusammenhang mit Ado geht weiß i leider nicht aber da wirds mindestens ähnliche Wege geben.

motu 2. Aug 2004 07:20

Re: SQL Abfrage
 
Zitat:

Zitat von SirThornberry
mit TQuery.First, TQuery.Next etc. kannst du dann die ergebnisse durchgehen und nach deinem wert suchen.

das hört sich gut an. Leider ist es in meinem Fall auch möglich, das der Wert nich in der Datenbank ist. dann soll der Wert davor, als auch der Wert danach angezeigt werden. Kriegen wir das auch hin?

SirThornberry 2. Aug 2004 07:31

Re: SQL Abfrage
 
Das sollte man auch hinn bekommen. Wenn du die Abfrage durchgeführt hast (muss nichtmal sortiert sein) dann kannst du die ergebnisse ja einfach durchgehen und danach suchen.
Delphi-Quellcode:
var LDavor, LDahinter, LTreffer, LCount: Integer;
begin
  LDavor := -1;
  LDahinter := -1;
  LTreffer := -1;
  for LCount := 0 to GefundeneDatensaetze.count - 1 do
  begin
    if (LDavor = -1) or ((GefundeneDatensaetze[LCount].ID > LDavor) and (GefundeneDatensaetze[LCount].ID < GesuchteID)) then
       LDavor := GefundeneDatensaetze[LCount].ID;
    if (LDahinter = -1) or ((GefundeneDatensaetze[LCount].ID < LDahinter) and (GefundeneDatensaetze[LCount].ID > GesuchteID)) then
       LDahinter := GefundeneDatensaetze[LCount].ID;
    if GefundeneDatensaetze[LCount].ID = gesuchteID then LTreffer := gesuchteID;
  end;
end;
Das ganze ist nur PseudoCode der veranschaulichen soll wie das ganze funktioniert, kann also nicht eins zu eins abgetippt werden und soll somit auch nur als denkanstoß dienen (hoffe ich hab kein Denkfehler dabei)

motu 2. Aug 2004 07:33

Re: SQL Abfrage
 
Hmm. Ich glaube Du bist zu sehr auf die ID fixiert. Die ID hilft mir nichts, da sie in keinem Zusammenhang mit den Werten steht, es mir aber um die Werte geht.

SirThornberry 2. Aug 2004 07:35

Re: SQL Abfrage
 
Dann musst du eben ID durch den anderen Spaltenwert ersetzen, es geht ja nur um das funktionsprinzip, das letztendliche proggen musst du eh selbst.

motu 2. Aug 2004 07:37

Re: SQL Abfrage
 
Zitat:

Zitat von SirThornberry
Dann musst du eben ID durch den anderen Spaltenwert ersetzen, es geht ja nur um das funktionsprinzip, das letztendliche proggen musst du eh selbst.

Hmm. Hmm. Hmm.
Dann kann ich aber wiederrum nicht mit +1 und -1 arbeiten. Ich schau mir grad eh eine SQL basierte Lösung an, damit ich das ganze auch gleich für ASP verwenden kann.

Hansa 2. Aug 2004 07:55

Re: SQL Abfrage
 
Du mußt zuerst mal sagen, von welchem Kriterium es abhängt, was "davor" oder "dahinter" bedeutet. Wenn es sich nicht um die ID handelt, was dann ?
Zitat:

Leider ist es in meinem Fall auch möglich, das der Wert nich in der Datenbank ist.
Das hört sich so an, als würdest du nach was suchen, was es nicht gibt und wenn es was nicht gibt, dann nach etwas ähnlichem von nichts. Das ist aber nun mal alles. :mrgreen:

Ich will damit sagen, daß die Fragestellung so unpräzise ist, daß wohl niemand etwas damit anfangen kann. Wie es aussieht gilt das mittlerweile auch für die DB. 8)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:01 Uhr.
Seite 1 von 3  1 23      

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