![]() |
Datenbank: sql • Zugriff über: ADO
Prior
Hallo Profis,
am besten schick ich euch erstmal mein Code
Delphi-Quellcode:
Ich möchte wissen warum Prior hier nichts tut..!
function TForm1.nextEntry(t:TDatetime;id:integer):String;
var dbtext:String; weiter:Boolean; tmptime:TDateTime; begin DBtext := 'select * from TABELLE where ID_OBJECT=' + '''' + inttostr(id) + ''''; with dbconnection do begin myquery.Close; myquery.sql.Clear; myquery.sql.add(dbtext); myquery.Open; end; weiter:=true; while (weiter) and (not myquery.Eof)do begin tmptime:= myquery.FieldByName('TIME').AsDateTime; if t<=tmptime then begin weiter:=false; end else weiter:=true; myquery.Next; end; myaquery.Prior; tmptime :=myquery.FieldByName('TIME').AsDateTime; result:=vartostr(tmptime) end; myquery.next wird einmal mehr als das was ich will ausgeführt(in der while-schleife) also möchte ich danach einen Eintrag zurückspringen es geht aber nicht und intressanterweise wenn ich anstatt prior , First schreibe dann wird genau das gemacht was ich will. kann mir jemand das erklären?! :roll: |
Re: Prior
Zitat:
Meinst Du nicht myquery.Prior; ? oder ist das nur ein Tippfehler hier im Forum ? |
Re: Prior
Die Schleife würde ich so schreiben;
Delphi-Quellcode:
Sieht irgendwie kürzer aus. U.U ist das Prior auch gar nicht mehr nötig.
while not myquery.Eof do
begin if t <= myquery.FieldByName('TIME').AsDateTime then break; myquery.Next; end; Ansonsten: Prior geht um ein Zeile zurück. First springt hingegen an die erste Zeile. :wink: |
Re: Prior
Ändere mal den Threadtitel so, dass der etwas aussagekräftiger wird. Unter "Prior" kann sich eigentlich keiner was vorstellen :roll:
...:cat:... |
Re: Prior
@rider danke! toller tipp aber ich möchte es troztdem wissen warum es so ist?!!
@katjah stimmt du hast recht ist ein tippfehler aber ändert nichts... weiß jemand weiter?!! :gruebel: |
Re: Prior
Hallo sveta,
grundsätzlich gilt, wenn Next funktioniert, dann funktioniert auch Prior. Dein Code hat aber einige Schwächen: 1. Wenn die geliferte Datenmenge leer ist, läuft Prior auf einen Fehler. 2. Wenn kein Datensatz die Bedingung erfüllt, landest du beim vorletzten Datensatz, weil du Prior auch in dem Fall aufrufst, dass das Ende der Datenmenge zu dem Verlassen der Schleife geführt hat. Mit:
Delphi-Quellcode:
geht das Programm nur dann auf den nächsten Datensatz, wenn die Suche noch nicht abgeschlossen ist.
while (weiter) and (not myquery.Eof)do
begin tmptime:= myquery.FieldByName('TIME').AsDateTime; if t<=tmptime then begin weiter:=false; end else begin weiter:=true; myquery.Next; end; end; Ist die Query eigentlich mit einem Masterfeld verknüpft? Dann könntest du gar nicht durch die Datenmenge laufen. Wie kommst du denn darauf, dass Prior nicht funktioniert? |
Re: Prior
ja du hast recht..
aber ich meine dass es nicht funktioniert weil ich es so aus probiert hab
Delphi-Quellcode:
tmptime1 und tmptime2 sind gleich!
weiter:=true;
myquery.Next; end; tmptime1 :=myquery.FieldByName('TIME').AsDateTime; myaquery.Prior; tmptime2 :=myquery.FieldByName('TIME').AsDateTime; |
Re: Prior
Ganz abgesehen davon ob Prior funktioniert oder nicht: du könntest den Wert mit einer einzigen SQL-Abfrage ermitteln, OHNE die Datensätze einzeln durchzugehen.
SQL-Code:
Außerdem gibst du keine Sortierreihenfolge an - es ist also mehr oder minder Zufall, wenn es so klappt wie du es machst.
select min(TIME) from TABELLE where ID_OBJECT=:id and TIME>=:time
|
Re: Prior
Halle sveta,
es könnte natürlich sein, dass zwei datensätze denselben Zeiteintrag haben, wodurch du den Eindruck gewinnen könntest, Prior hätte nicht funktioniert. Verbinde doch deine Query über eine DataSource einmal mit einem DataGrid und schau dir die Datenmenge einmal an. |
Re: Prior
@MrSpock nein es ist nicht so
@Flocke danke das sieht ganz gut aus .. query ist richtig aber wenn ich es in Delphi Code rein schreibe wird ein exception ausgeworfen und es wird nach weiteren spalten gefragt. das problem hatte ich schon und deswegen schreibe ich immer
Delphi-Quellcode:
nach eine bestimmte spalte zu fragen geht nicht !
select * from
[PUSH BEITRAG] *nach Oben* [/PUSH BEITRAG] [edit=Christian Seehase]Pushen von Threads ist nach frühestens 24 Stunden erlaubt :!: Nach 11 Minuten pushen... dazu fällt mir nichts mehr ein. Push-Beitrag gelöscht. Mfg, Christian Seehase[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz