Dbf Datenbank im DBGrid sortierten

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
almanciyabanci
Beiträge: 4
Registriert: Sa 24. Mai 2014, 17:51

Dbf Datenbank im DBGrid sortierten

Beitrag von almanciyabanci »

Hallo leute,

ich bin langsam am verzweifeln, ich suche schon seid 3 tagen nach einer lösung wie ich die daten aus meiner Dbf Datenbank, die im Dbgrid1 angezeigt werden
mit hilfe eines button3 sortiere.

Das anzeigen und Bearbeiten der Daten ist kein problem, jedoch lässt sich das ganze nicht sortieren.

Meine datenbank BETRIEB.DBF die ich mit hilfe von TDBF erstellt habe, hat folgende Spalten PERSNR, DATUM, NAME usw....

Beim Klicken des Button3 soll der inhalt der DBGrid1 nach der spalte PERSNR sortiert werden.


Ich habe folgenden code auf den Button3 gesetzt, aber es passiert überhaupt nix...

Code: Alles auswählen

 
procedure TForm1.Button3Click(Sender: TObject);
begin
  Dbf1.IndexFieldNames:='PERSNR';
end; 
 

Michael19692
Beiträge: 18
Registriert: Mi 14. Mai 2014, 21:08
OS, Lazarus, FPC: Win8 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit

Re: Dbf Datenbank im DBGrid sortierten

Beitrag von Michael19692 »

Morgen,

Weiß nicht ob Du Dein Problem schon gelöst hast? Auch bin ich absoluter Laie. Aber in meinem Adressbuch habe ich ein Suche die das Ergebnis nach Namen sortieren soll. Dazu benutze ich eine SQL Abfrage.
Schau mal unter http://www.lazarusforum.de/viewtopic.php?f=55&t=7829 denke das muss man nur etwas umbauen.
Leider hab ich heute keine Zeit für an den PC zu gehen. Sonst würde ich mal schauen was man machen könnte.
Aber vielleicht hilft es Dir weiter.

Gruß
Michael

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Dbf Datenbank im DBGrid sortierten

Beitrag von creed steiger »

probier mal ein anderes DBGrid

z.b. das hier
http://www.tkweb.eu/en/delphicomp/
(sollte auch irgendwo im CCR sein)

bei den RX Sachen könnte auch eins dabei sein

almanciyabanci
Beiträge: 4
Registriert: Sa 24. Mai 2014, 17:51

Dbf Datenbank im DBGrid sortierten

Beitrag von almanciyabanci »

Danke für die Info, aber es hat nicht geholfen es stürzt immer ab wen ich eine Eingabe mache

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Dbf Datenbank im DBGrid sortierten

Beitrag von Michl »

Bin kein Datenbank-Guru und benutze keine Dbf Datenbanken, habe aber mal ein bischen probiert. Das, was Du wahrscheinlich nicht gemacht hast, ist einen Index für das zu sortierende Column/Field zu erstellen, dann funktionier auch das Sortieren mit "Dbf1.IndexFieldNames:='PERSNR';".

In den Examples unter Lazarus ist ein Beispiel "addrbook", das habe ich mal modifiziert und ein Sortieren, je nachdem auf welchen Title der DBGrid man klickt, ermöglicht (nur "ASC", "DSC" müsstest Du dann selber noch ausfeilen):
In der Ereignisbehandlungroutine "OnKlick" des DBGrids "GDBA" folgenden Code geschrieben (geht evtl. noch einfacher):

Code: Alles auswählen

procedure TMainForm.GDBATitleClick(Column: TColumn);
var
  i: Integer;
 
  procedure IndexUpdate;   //Indexes gemäß Fieldnamen initialisieren
  var
    i: Integer;
  begin
    DBA.Close;
    DBA.Exclusive:=True;
    DBA.Open;
    DBA.Indexes.Clear;
    for i:=0 to DBA.FieldCount - 1 do
      DBA.AddIndex(DBA.Fields[i].FieldName, DBA.Fields[i].FieldName, []);
    DBA.Close;
    DBA.Exclusive:=False;
    DBA.Open;
  end;
 
begin
  if DBA.Active then begin
 
    i:=0;
    while (i < DBA.Indexes.Count) and (DBA.Indexes[i].Name <> Column.FieldName) do inc(i);  //Fieldname suchen
 
    if i >= DBA.Indexes.Count then begin   //Fieldname wurde nicht gefunden
      IndexUpdate;  //Indexes gemäß Fieldnamen initialisieren
      i:=0;
      while (i < DBA.Indexes.Count) and (DBA.Indexes[i].Name <> Column.FieldName) do inc(i);  //Fieldname suchen
    end;
 
    if i < DBA.Indexes.Count then
      DBA.IndexName:=Column.FieldName
    else
      ShowMessage('Initialisierung der Indexes fehlgeschlagen!');
 
  end;
end;
Kannst Du ja entsprechend abändern...

Weitere Infos: http://wiki.freepascal.org/Lazarus_Tdbf ... uf.C3.BCgt

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Dbf Datenbank im DBGrid sortierten

Beitrag von Christian »

TDbf hab ich vor 5 Jahren aufgegeben nachdem mir das Ding eine 2Gb Datenbank unwiederbringlich zerschreddert hat. Das sollte man als instabil betrachten, und wird soweit ich weiss auch nicht mehr aktiv entwickelt.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten