Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Sortieren im Clientdataset nach ID(autoinc) (https://www.delphipraxis.net/177583-sortieren-im-clientdataset-nach-id-autoinc.html)

Natcree 14. Nov 2013 17:05

Sortieren im Clientdataset nach ID(autoinc)
 
Hallo ich möcht in meinem Clientdataset meine Datensätze nach der ID Nummer aufwärtz sortieren. Die Daten werden in einem DBGrid angezeigt.

Habe mal folgenden Code

Delphi-Quellcode:
var
   IndexName: String;
 begin
   IndexName:= 'ID'+'0';//ID= Spaltenname 0= index
   ClientDataSet1.AddIndex(IndexName, 'ID',[ixDescending],'','',0);
   ClientDataSet1.IndexName:= IndexName;
   clientdataset1.First;
 end;
Funktioniert aber nicht ???

Union 14. Nov 2013 17:23

AW: Sortieren im Clientdataset nach ID(autoinc)
 
Verwende IndexDefs und lies diesen Artikel.

Perlsau 14. Nov 2013 19:03

AW: Sortieren im Clientdataset nach ID(autoinc)
 
... oder trage in IndexFieldNames den Feldnamen ein, nach dem du sortieren möchtest.

Natcree 14. Nov 2013 21:03

AW: Sortieren im Clientdataset nach ID(autoinc)
 
Ich will ja nach dem id count der datensätze sortieren. clientdataset1.fieldbyname['ID'] und das ganze aufwärts.

ID Name Adresse
1 Max musterstrasse
2 Moritz Bleibträu
3 Mia ichhaumichweg
.. .. ..

Den Artikel habe ich mir schon angeschaut hat mir aber nicht weiter geholfen...... .

Union 14. Nov 2013 21:15

AW: Sortieren im Clientdataset nach ID(autoinc)
 
Zitat:

Zitat von Natcree (Beitrag 1235978)
Den Artikel habe ich mir schon angeschaut hat mir aber nicht weiter geholfen...... .

Woran liegts? Dort ist genau das beschrieben was Du suchst. Auch noch mit Beispielsource.

Natcree 14. Nov 2013 22:13

AW: Sortieren im Clientdataset nach ID(autoinc)
 
@Union

Danke hast recht XDDD

Delphi-Quellcode:
function SortClientDataSet(ClientDataSet: TClientDataSet;
  const FieldName: String): Boolean;
var
  i: Integer;
  NewIndexName: String;
  IndexOptions: TIndexOptions;
  Field: TField;
begin
Result := False;
Field := ClientDataSet.Fields.FindField(FieldName);
//If invalid field name, exit.
if Field = nil then Exit;
//if invalid field type, exit.
if (Field is TObjectField) or (Field is TBlobField) or
  (Field is TAggregateField) or (Field is TVariantField)
   or (Field is TBinaryField) then Exit;
//Get IndexDefs and IndexName using RTTI
//Ensure IndexDefs is up-to-date
ClientDataSet.IndexDefs.Update;
//If an ascending index is already in use,
//switch to a descending index
if ClientDataSet.IndexName = FieldName + '__IdxA'
then
  begin
    NewIndexName := FieldName + '__IdxD';
    IndexOptions := [ixDescending];
  end
else
  begin
    NewIndexName := FieldName + '__IdxA';
    IndexOptions := [];
  end;
//Look for existing index
for i := 0 to Pred(ClientDataSet.IndexDefs.Count) do
begin
  if ClientDataSet.IndexDefs[i].Name = NewIndexName then
    begin
      Result := True;
      Break
    end; //if
end; // for
//If existing index not found, create one
if not Result then
    begin
      ClientDataSet.AddIndex(NewIndexName,
        FieldName, IndexOptions);
      Result := True;
    end; // if not
//Set the index
ClientDataSet.IndexName := NewIndexName;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
sortclientdataset(clientdataset1,'ID');
end;

Danke das war es

Hansa 15. Nov 2013 12:05

AW: Sortieren im Clientdataset nach ID(autoinc)
 
Zitat:

Zitat von Natcree (Beitrag 1235988)
Danke das war es

Mit dem Source da? :shock: Ich liebe es, erst gar nichts von überhaupt zu wissen und dann mit 100 Zeilen abgekupfertem Quelltext zu kommen. :lol:

Nene, Perlsau hat schon gesagt, wie einfach das geht. Bei mir sieht das z. B. so aus :

Delphi-Quellcode:
CDS.IndexFieldNames := 'NR';
Das ClientDataSet hat da eben mehrere Felder und sortiert wird in dem Fall nach NR. Vorher stehen halt noch die Felddefinitionen an der Stelle :

Delphi-Quellcode:
CDS.FieldDefs.Add ('ID', ftInteger, 0, False);
CDS.FieldDefs.Add ('NR', ftInteger, 0, False);
...

Natcree 9. Dez 2013 15:37

AW: Sortieren im Clientdataset nach ID(autoinc)
 
Habe eine Fehlermeldung wenn ich das Programm auf nen anderen Rechner starte

Exception Clientdataset1.Field'ID' not Found.

Hier der Form Create Code

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
MediaPlayer1.Notify := true;
Mediaplayer1.Play;
clientdataset1.LoadFromFile('c:\programme\vereintool\daten\adressen.xml');
TWheelDBGrid(DBGrid1).OnMouseWheel := DBGridMouseWheel;
FormatDateTime('dd.mm.yyyy', now);
pagecontrol1.ActivePageIndex:=0;
pagecontrol2.ActivePageIndex:=0;
ForceDirectories('c:\Programme\Vereintool\Daten\Konten');
ForceDirectories('c:\Programme\Vereintool\Daten\Mitgliedsausweis');
ForceDirectories('c:\Programme\Vereintool\Daten\Schreiben');
ForceDirectories('c:\Programme\Vereintool\Daten\Kassenbuch');
ForceDirectories('c:\Programme\Vereintool\Daten\Kassenbuch\'+FormatDateTime('yyyy', now));
dbcomboBox1.Items.LoadFromFile('c:\Programme\Vereintool\Daten\abteilung.txt') ;
dbcomboBox5.Items.LoadFromFile('c:\Programme\Vereintool\Daten\Funktion.txt') ;
form1.eltreestringgrid1.Cells[0,0]:='01.01'+FormatDateTime('.yyyy', now);
form1.eltreestringgrid1.Cells[4,0]:='0,00 €';
form1.eltreestringgrid1.Cells[6,0]:='Kassenstand vom 31.12. des Vorjahres';
if SysUtils.FileExists('c:\Programme\Vereintool\Daten\Kassenbuch\'+FormatDateTime('yyyy', now)+'\Handkasse '+FormatDateTime('yyyy', now)+'.xls') then
if SysUtils.FileExists('c:\Programme\Vereintool\Daten\Kassenbuch\'+FormatDateTime('yyyy', now)+'\Handkasse '+FormatDateTime('yyyy', now)+' leer.xls')then
DeleteFile('c:\Programme\Vereintool\Daten\Kassenbuch\'+FormatDateTime('yyyy', now)+'\Handkasse '+FormatDateTime('yyyy', now)+' leer.xls');
SaveAsExcelFile1(form1.eltreestringGrid1, 'Tabelle1', 'c:\Programme\Vereintool\Daten\Kassenbuch\'+FormatDateTime('yyyy', now)+'\Handkasse '+FormatDateTime('yyyy', now)+' leer.xls');
Xls_To_StringGrid1(form1.ElTreeStringGrid1,'c:\Programme\Vereintool\Daten\Kassenbuch\'+FormatDateTime('yyyy', now)+'\Handkasse '+FormatDateTime('yyyy', now)+'.xls');
self.ElTreeStringGrid1HeaderColumnClick(sender,0);
end;
Und Form Show

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
self.DBGrid1TitleClick(nil);
sortclientdataset(Clientdataset1,'ID');// Hier soll das dataset sortiert werden
clientdataset1.first;
end;

Union 9. Dez 2013 15:40

AW: Sortieren im Clientdataset nach ID(autoinc)
 
In welcher Zeile tritt denn der Fehler auf?

Natcree 9. Dez 2013 15:41

AW: Sortieren im Clientdataset nach ID(autoinc)
 
auf meinem rechner nicht nur auf dem Anderem auf dem ich kein delphi habe


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:43 Uhr.
Seite 1 von 4  1 23     Letzte »    

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