Autor Beitrag
z1dirk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Di 02.09.03 23:51 
Ich muss meine datenbank mit index dateien ausstatten, doch nichts hat bisher funktioniert. Kann mir irgendwer dazu was sagen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type
   Tartikel = record
           alter:string[35];
           name:string[35];
           genre:string[35];
           Ersch:string[35];
           reg:string[35];
           dar:string[35];
           FSK:string[35];
           wer:string[35];
           wann:string[35];
           end;


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
procedure Tform1.sortierenname;
var datei: file of Tartikel;
    artikel2,artikel1:tartikel;
    pos,n,durchl,erg:integer;
begin
     assignfile(datei,'daten.dat');
     if fileexists('daten.dat'then
     begin
     reset (datei);
     pos:= filesize(datei)-2;
     durchl:=4*filesize(datei);
     repeat
           for n:=0 to pos do begin
                seek(datei,n);
                read(datei,artikel1);
                seek(datei,n+1);
                read(datei,artikel2);
                erg:=AnsiCompareStr(artikel1.name,artikel2.name);
                if erg < 0 then
                   begin
                        seek(datei,n);
                        write(datei,artikel1);
                        seek(datei,n+1);
                        write(datei,artikel2);
                   end;
                 if erg  >= 0 then
                   begin
                        seek(datei,n);
                        write(datei,artikel2);
                        seek(datei,n+1);
                        write(datei,artikel1);
                   end;
           end;
           Dec(durchl);
     until durchl=0;
     closefile(datei);
     end;
end;


das ist mein quelltext für eine sortierprocedure, doch die speichert bisher immer in meine daten.dat. soll sie aber nicht ich will nur die richtig sortierte reinfolge und die in eine index datei speichern und mit dieser dann die richtig geordneten daten anzeigen. die daten in daten.dat sollen unsortiert bleiben nur die ausgabe.

bitte helft mir. :cry:

Gruß Dirk.
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Mi 03.09.03 12:41 
hallo z1dirk!

an deinem fall würde ich einen weiteren recordtypen definieren, zb
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Type
  TArtikelIdx = record
     satzNr: integer;
     IdxFeld (zb name)
  end;


beim anlegen der artikeltabelle legst auch gleich ein indexfile an
zb: ArtikelIdx.dat

vorm öffnen der artikeltabelle immer überprüfen, ob auch die indextabelle existiert und sie gleichzeitig öffnen. nach dem schliessen auch aufs index-schliessen nicht vergessen.

beim erfassen, ändern, löschen von datensätzen dies in der indextabelle mitberücksichtigen

der zugriff auf den index ist am schnellsten, wenn er im speicher liegt --> daher in ein array einlesen und dort auch sortieren. da nur einzelne werte in eine bereits sortierte liste eingetragen werden sollen, lässt sich das mit dem insertion-sort ganz flott bewerkstelligen.

somit kannst du auf die eintragnr der einträge zugreifen und anhand dieser eintragnr mit SEEK den betreffenden datensatz wählen.

naja, auf alle fälle eine menge arbeit, aber nicht uninteressant ;)

mfg, stefan
z1dirk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Mi 03.09.03 17:48 
hi, was meinst du mit "insertion-sort" , kannst du das mir mal erklären.(befehl oder so) :D

Dirk
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Mi 03.09.03 21:34 
der insertion-sort ist eine sortierroutine, die sich ganz leicht zum einfügen von datensätzen in bereits sortierte listen eignet, da sie den eintrag nur an der richtigen stelle einfügt (daher der name) und nicht die ganze liste von neuen zu sortieren beginnt.

zum nachlesen

mfg, stefan
z1dirk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Do 04.09.03 16:20 
danke :( , die sortierprocedure ist nicht schlecht, doch kannst du mir vieleicht sagen wie ich im stringgrid sortieren kann, in dem ich auf meine
Celle[0,1] (die grauen Kästchen oben) oder so drücke. Da steht dann Name und datum und etc. und danach soll sortiert werden. ich möchte keine Button über die zeilen packen, dass sieht nicht so gut aus. 8)

Gruß dirk :beer:

nimm das smilie nach dem danke nicht persönlich, hab mich nur verklickt.
so soll es sein :evil: war nur ein scherz :shock: ich meine natürlich so: :D

Moderiert von user profile iconUGrohne: Beiträge zusammengefügt
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Do 04.09.03 21:57 
hallo z1dirk!

es gibt auch eine edit-funktion der eigenen beiträge! :wink:
wie du feststellen kannst, dass auf die überschrift der spalte 1 geklickt wurde? so zb

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.DruckGridMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  aCol,aRow: LongInt;
begin
  DruckGrid.MouseToCell(X,Y,aCol,aRow);
  if (aCol=1and (aRow=0then
    ShowMessage('sortieren wird gestartet ... ');
end;


mfg, stefan
ps: tu dir nix an wegen des smileys :lol:
z1dirk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Fr 05.09.03 19:44 
Hey danke. starke sache. du hast echt was drauf. :wink:

dirk :beer: