AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Prior

Ein Thema von sveta · begonnen am 31. Aug 2006 · letzter Beitrag vom 31. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
sveta

Registriert seit: 11. Apr 2006
34 Beiträge
 
#1

Prior

  Alt 31. Aug 2006, 10:08
Datenbank: sql • Zugriff über: ADO
Hallo Profis,
am besten schick ich euch erstmal mein Code

Delphi-Quellcode:
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;
Ich möchte wissen warum Prior hier nichts tut..!
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?!
  Mit Zitat antworten Zitat
katjah

Registriert seit: 6. Aug 2006
Ort: Herborn
28 Beiträge
 
#2

Re: Prior

  Alt 31. Aug 2006, 10:15
Zitat:
myaquery.Prior;
?

Meinst Du nicht myquery.Prior; ?

oder ist das nur ein Tippfehler hier im Forum ?
Gruß Katja
  Mit Zitat antworten Zitat
rider

Registriert seit: 11. Aug 2006
90 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Prior

  Alt 31. Aug 2006, 10:23
Die Schleife würde ich so schreiben;

Delphi-Quellcode:
while not myquery.Eof do
begin
  if t <= myquery.FieldByName('TIME').AsDateTime then
     break;
  myquery.Next;
end;
Sieht irgendwie kürzer aus. U.U ist das Prior auch gar nicht mehr nötig.

Ansonsten: Prior geht um ein Zeile zurück. First springt hingegen an die erste Zeile.

  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Prior

  Alt 31. Aug 2006, 10:38
Ändere mal den Threadtitel so, dass der etwas aussagekräftiger wird. Unter "Prior" kann sich eigentlich keiner was vorstellen

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
sveta

Registriert seit: 11. Apr 2006
34 Beiträge
 
#5

Re: Prior

  Alt 31. Aug 2006, 10:48
@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?!!
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Prior

  Alt 31. Aug 2006, 11:14
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:
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;
geht das Programm nur dann auf den nächsten Datensatz, wenn die Suche noch nicht abgeschlossen ist.

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?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
sveta

Registriert seit: 11. Apr 2006
34 Beiträge
 
#7

Re: Prior

  Alt 31. Aug 2006, 11:30
ja du hast recht..

aber ich meine dass es nicht funktioniert weil ich es so aus probiert hab
Delphi-Quellcode:
      weiter:=true;
      myquery.Next;
    end;

    tmptime1 :=myquery.FieldByName('TIME').AsDateTime;
    myaquery.Prior;
   
    tmptime2 :=myquery.FieldByName('TIME').AsDateTime;
tmptime1 und tmptime2 sind gleich!
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Prior

  Alt 31. Aug 2006, 11:58
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.
select min(TIME) from TABELLE where ID_OBJECT=:id and TIME>=:time Außerdem gibst du keine Sortierreihenfolge an - es ist also mehr oder minder Zufall, wenn es so klappt wie du es machst.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Prior

  Alt 31. Aug 2006, 12:01
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.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
sveta

Registriert seit: 11. Apr 2006
34 Beiträge
 
#10

Re: Prior

  Alt 31. Aug 2006, 12:16
@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
select * from nach eine bestimmte spalte zu fragen geht nicht !

[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]
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:18 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