Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Scrollfunktion rückwärts über EOF (https://www.delphipraxis.net/166681-scrollfunktion-rueckwaerts-ueber-eof.html)

Eddit 24. Feb 2012 13:23

Scrollfunktion rückwärts über EOF
 
hallo leute,

ich habe ein problem. und zwar habe ich mit TUpDown eine scrollfunktion eingerichtet, um mich durch die daten einer datenbank zu blättern. vorwärts geht es ohne probleme und sogar über EOF hinaus also er beginnt dann am anfang der datenbank. nur hab ich probleme mit dem rückwärtsscrollen. ich habe hier mal den quellcode wie es zurzeit in der prozedur aussieht:
Delphi-Quellcode:
procedure TFormDVD.UpDown1Click(Sender: TObject; Button: TUDBtnType);
var p : byte;
begin
  case Button of
    btNext: begin
              if EOF(VDVDFile) then seek(VDVDFile,0);
                                read(VDVDFile,HV);
                                with VDVD do begin
                                             //Ausgabe
                                             end;
            end;
btPrev: begin
                p:=filepos(VDVDFile);
               if filepos(VDVDFile)= 2 then begin
                                            seek(VDVDFile,filesize(VDVDFile));
                                            p:=filepos(VDVDFile);
                                            read(VDVDFile,HV);
                                            with VDVD do begin
                                            //Ausgabe
                                            end;
                                            end
                                       else begin                
                                            p:=filepos(VDVDFile);
                                            seek(VDVDFile,filepos(VDVDFile)-1);
                                            read(VDVDFile,HV);
                                            with VDVD do begin
                                            //Ausgabe
                                            end;
                                            end;
         end;
hat jemand eine ahnung woran das liegen könnte? danke im voraus!!

himitsu 24. Feb 2012 13:42

AW: Scrollfunktion rückwärts über EOF
 
EOF (hinteres Ende)
BOF ? (vorderes Ende)

Achso, also eigentlich Datei und nicht eine richtige datenbank. :oops:

Zitat:

Delphi-Quellcode:
filepos(VDVDFile)= 2

Der erste Datensatz müßte 0 sein.
Und der Letzte ist Anzahl-1.

Und FilePos steht auf dem Datensatz nach dem zuletzt Gelesenen ... also muß man immer 2 Schritte zurück. (den zuletzt gelesenen und den jetzt zu lesenden Datensatz)

Gibt FileSize und FilePos eigentlich die Dateigröße, oder die Anzahl der Records (Datensätze) an?

[add]
Unter der Annahme FilePos/FileSize liefern die Anzahl/Position der Datensätze und nicht die Größe/Position in Byte.
Ansonsten mußt'e das erst umrechnen.
Delphi-Quellcode:
procedure TFormDVD.UpDown1Click(Sender: TObject; Button: TUDBtnType);
var p : Integer;
begin
  case Button of
    btNext: begin
      if EOF(VDVDFile) then
        seek(VDVDFile, 0);
    end;
    btPrev: begin
      p := FilePos(VDVDFile);
      if p <= 1 then
        seek(VDVDFile, FileSize(VDVDFile) - 1)
      else
        seek(VDVDFile, p - 2);
  end;
  read(VDVDFile, HV); // Thema doppelter Code ... ist ja überall gleich
  with VDVD do begin
    //Ausgabe
  end;
end;

shmia 24. Feb 2012 14:14

AW: Scrollfunktion rückwärts über EOF
 
Da fehlt ganz eindeutig eine Softwareschicht in dem Code.
Man greift nicht einfach so aus einem Formular auf Dateifunktionen wie Seek, read, write,usw. zu.
Ohne diese Zwischenschicht bekommt man redundanten, fehlerträchtigen und schlecht wartbaren Code.
Ich könnte dazu mehr schreiben; mach ich aber nur, wenn meine Argumente von oben auf Zustimmung stossen.

Eddit 26. Feb 2012 22:12

AW: Scrollfunktion rückwärts über EOF
 
danke himitsu!! funktioniert perfekt^^

himitsu 26. Feb 2012 23:30

AW: Scrollfunktion rückwärts über EOF
 
Zitat:

Zitat von Eddit (Beitrag 1153013)
danke himitsu!! funktioniert perfekt^^

Aber shmia hat schon Recht.
In einer kleinen Klasse, mit mindestens den 4 Funktionen Open, Close, Next und Prev, sowie einem Property mit den/dem aktuellen Werten/Datensatz, macht es sich bestimmt noch besser.
(vorallem wiederverwendbarer)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:30 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