Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Via SQL Access DB Tabelle sortieren und suchen (https://www.delphipraxis.net/61000-via-sql-access-db-tabelle-sortieren-und-suchen.html)

r_kerber 15. Jan 2006 18:51

Re: Via SQL Access DB Tabelle sortieren
 
Zitat:

Zitat von Christian18
Zitat:

Zitat von alzaimar
TADOTable hat eine IndexFieldName-Eigenschaft. Wenn du die Daten nur im Grid sortieren willst, dann schreib halt einfach
Delphi-Quellcode:
Procedure TForm1.ButtonSortierenClick (Sender : TObject);
Begin
  MyDataModule.MyADOTable.IndexFieldName := 'Name';
End;
Fertig.

Hey vielen dank jetzt funktioniert es.

Und was wolltest Du jetzt mit der ADOQuery? :gruebel:

Christian18 15. Jan 2006 18:54

Re: Via SQL Access DB Tabelle sortieren
 
eigentlich über einen sql befehl sortieren, aber wenn es auch anders funktioniert dann ist doch alle ok. und es funktioniert auch anders.

eine frage aber ich jetzt bloß noch wie kann ich in einer Tabelle suchen. ich will den Filter nicht verwenden der soll so langsam sein.

zum beispiel in den Feld Name nach "Christian" und dann sollen alle Christian s aufgelistet werden. wie kann ich das machen???

sir-archimedes 15. Jan 2006 18:57

Re: Via SQL Access DB Tabelle sortieren und suchen
 
SQL-Code:
SELECT * FROM Kunden WHERE Name like 'Christian%'
würde dir alle Kunden, die mit Christian anfangen zurückgeben.

r_kerber 15. Jan 2006 18:57

Re: Via SQL Access DB Tabelle sortieren und suchen
 
Dann ersetze die Table doch einfach durch eine Query! Also: TADOConnection --> TADOQuery --> TDataSource --> TDBGrid

kiar 15. Jan 2006 18:58

Re: Via SQL Access DB Tabelle sortieren und suchen
 
moin Christian,

1. neue Frage neuer thread
2. wie wäre es sich mal mit einem tut zu belesen, dir scheint es ja an den Grundlagen zu fehlen

raik

alzaimar 15. Jan 2006 19:02

Re: Via SQL Access DB Tabelle sortieren und suchen
 
Zitat:

Zitat von r_kerber
Dann ersetze die Table doch einfach durch eine Query! Also: TADOConnection --> TADOQuery --> TDataSource --> TDBGrid

Dann klappt das nicht mehr mit dem IndexFieldName.
Um nur alle Datensätze aufzulisten, deren Feld "Vorname" gleich "Christian" ist, machst Du das hier:
Delphi-Quellcode:
Procedure TForm1.ButtonFilternClick (Sender : TObject);
Begin
  MyDatamodule.MyADOTable.Filter := 'Vorname="Christian"';
  MyDatamodule.MyADOTable.Filtered := True;
End;
Achtung!
1.Anführungszeichen beachten. Ob die ' oder " sind, weiss ich nicht.
2.Du musst eventuell der ADOTable irgendwie sagen, das sich der Filter verändert hat.

sir-archimedes 15. Jan 2006 19:08

Re: Via SQL Access DB Tabelle sortieren und suchen
 
Man kann alternativ zur ADOTable auch mit dem ADODataSet arbeiten. Jenes unterstützt auch die IndexFieldNames - und damit das Sortieren ohne SQL bemühen zu müssen. Dann kann man auch gezielt die Felder aussuchen, die man abgefragt haben möchte, kann verschiedene Tabellen zu einer "zusammenfassen", etc.

Wenn man den Filter verändert, muss man nichts weiter mitteilen - die Komponenten erkennen (dank setFilter-Methode, von der man nichts mitbekommt) selbst, dass sie neu filtern müssen.

Möchte man über SQL filtern, würden sich Parameter anbieten:

SQL-Code:
SELECT * FROM Kunden WHERE Name LIKE :ParamName ORDER BY Name
Anschließend
Delphi-Quellcode:
ADODataSet.Parameters.ParamByName('ParamName').Value := 'Christian%';
ADODataSet.Requery;
und es wird neu gefiltert. So muss man sich auch nicht mit Hochkommata, Datumsformaten, etc. herumquälen.

Christian18 15. Jan 2006 19:13

Re: Via SQL Access DB Tabelle sortieren und suchen
 
Zitat:

Zitat von alzaimar
Zitat:

Zitat von r_kerber
Dann ersetze die Table doch einfach durch eine Query! Also: TADOConnection --> TADOQuery --> TDataSource --> TDBGrid

Dann klappt das nicht mehr mit dem IndexFieldName.
Um nur alle Datensätze aufzulisten, deren Feld "Vorname" gleich "Christian" ist, machst Du das hier:
Delphi-Quellcode:
Procedure TForm1.ButtonFilternClick (Sender : TObject);
Begin
  MyDatamodule.MyADOTable.Filter := 'Vorname="Christian"';
  MyDatamodule.MyADOTable.Filtered := True;
End;
Achtung!
1.Anführungszeichen beachten. Ob die ' oder " sind, weiss ich nicht.
2.Du musst eventuell der ADOTable irgendwie sagen, das sich der Filter verändert hat.

Hallo,

ist der Filter bei ADO schneller als bei der BDE???

alzaimar 16. Jan 2006 17:12

Re: Via SQL Access DB Tabelle sortieren und suchen
 
Zitat:

Zitat von Christian18
ist der Filter bei ADO schneller als bei der BDE???

Die Frage ist nicht ganz korrekt gestellt, denn die Filter-Eigenschaft ist in TDataset schon angelegt. Im allgemeinen filtert man damit in-memory, also unabhängig von der DB. Deshalb wird das Filtern mit
Delphi-Quellcode:
MyTable.Filter = 'Foo = 3';
i.a. viel schneller gehen. Aber eben nicht immer. Wenn Du millionen von Datensätzen im Speicher hättest (o.k. dann würde ich Dich prügeln :mrgreen:) und Du dann einen Filter draufsetzt, dauert das länger, als diese Arbeit einen ordendlichen DB-Server übernehmen zu lassen, speziell, wenn auf dem zu filternden Feld ein Index angelegt ist.

Der Vorteil beim 'lokalen Filtern' ist natürlich der, das der DB-Server mit diesen 'unwichtigen' Aufgaben nicht belastet wird. Der Nachteil ist der, das die Daten u.U. nicht aktuell sind.

Du musst immer abwägen, was Du willst. Normalerweise sollte man sich von einem DB-Server nur genau die Daten holen, die man braucht. Krankes Beispiel: Um alle Daten vom Kunden 'Kassupke' zu holen, kann man natürlich erst alle Kundendatensätze laden und dann mit dem lokalen Filter 'Name="Kassupke"' den einen Datensatz ausfiltern. Aber das ist ja suboptimal, sozusagen.

Hier ist es natürlich angebracht, per geeignetem Select 'SELECT * FROM Kunden WHERE Name='Kassupke'' den DB-Server zu schonen.

Gegenbeispiel: Um den Anwender durch alle Kunden navigieren und ihn selbst filtern zu lassen, ist es natürlich besser, einmalig alle Kunden zu ziehen (vorausgesetzt, es sind nicht zu viele) und dann über ein nettes Tool zu filtern.

Wie gesagt, immer abhängig vom Anwendungsfall.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz