Delphi-PRAXiS

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)

Christian18 15. Jan 2006 16:44

Datenbank: Access • Version: 2000 • Zugriff über: ADO

Via SQL Access DB Tabelle sortieren und suchen
 
Hallo,

ist es möglich eine Tabelle (nach Zahlen oder Alphabetisch) die in einer Access DB vorhanden ist, über einen SQL Befehl zu sortieren ???

MFG Christian18

mikhal 15. Jan 2006 17:00

Re: Via SQL Access DB Tabelle sortieren
 
Die Sortierung kannst du in deinem Select-Statement mit dem Befehl "ORDER BY" vornehmen.

Grüße
Mikhal

Christian18 15. Jan 2006 17:07

Re: Via SQL Access DB Tabelle sortieren
 
Hallo,

erst mal vielen dank für die schnelle hilfe. hast du vieleicht auch ein kleines bsp für mich???

MFG Christian18

r_kerber 15. Jan 2006 17:18

Re: Via SQL Access DB Tabelle sortieren
 
Zitat:

Zitat von Christian18
hast du vieleicht auch ein kleines bsp für mich???

SQL-Code:
SELECT * FROM tabelle ORDER BY spalte

mikhal 15. Jan 2006 17:19

Re: Via SQL Access DB Tabelle sortieren
 
Gegeben ist eine Adress-Tabelle adr_adressen mit folgender Definition:

SQL-Code:
CREATE TABLE adr_adressen(
  adr_id counter,
  adr_name varchar(50),
  adr_strasse varchar(50),
  adr_plz varchar(7),
  adr_ort varchar(50));
Dann kannst du diese Tabelle mit folgendem Select-Statement abgreifen, wobei die Sortierung nach adr_name erfolgt.
SQL-Code:
SELECT adr_id, adr_name, adr_strasse, adr_plz, adr_ort
FROM adr_adressen
ORDER BY adr_name
Willst du die Sortierung umkehren, verwendest ud das Schlüsselwort DESC:
SQL-Code:
ORDER BY adr_name desc
Mit dem Schlüsselwort ASC sortierst du wieder in der gewohnten Reihenfolge (ASC ist die Default-Anweisung und kann daher weggelassen werden. Um nach mehreren Feldern zu sortieren trennst du die einzelnen Feldnamen in der ORDER-BY Klausel durch ein Komma.

Grüße
Mikhal

Christian18 15. Jan 2006 18:21

Re: Via SQL Access DB Tabelle sortieren
 
Hallo,

ich habe folgendes Problem. Wenn ich so sortieren will, wie ihr mir das beschrieben habt, dann passiert nicht. Ich habe es so.
Delphi-Quellcode:
      TADOQuery.Active:=False;
      TADOQuery.SQL.Clear;
      TADOQuery.SQL.Add('Select * From Kunden Order By Name');
      TADOQuery.ExecSQL;
MFG Christian18

omata 15. Jan 2006 18:25

Re: Via SQL Access DB Tabelle sortieren
 
Hallo,

du must deine Query mit Open öffnen.
ExecSQL wird nur für INSERT, UPDATE oder DELETE Anweisungen benutzt (die keine Ergebnismenge zurückliefern)

Beispiel...
Delphi-Quellcode:
var Name:string;
begin
  TADOQuery.SQL.Text:=
    'SELECT *'#13 +
    'FROM Kunden'#13 +
    'ORDER BY Name';

  TADOQuery.Open;
  while not TADOQuery.Eof do begin
   
    Name:=TADOQuery.FieldByName('name').AsString;
    ...
    TADOQuery.Next;
  end;
  TADOQuery.Close;
end;
MfG
Thorsten

tomsel 15. Jan 2006 18:25

Re: Via SQL Access DB Tabelle sortieren
 
Zitat:

Zitat von Christian18
Hallo,

ich habe folgendes Problem. Wenn ich so sortieren will, wie ihr mir das beschrieben habt, dann passiert nicht. Ich habe es so.
Delphi-Quellcode:
      TADOQuery.Active:=False;
      TADOQuery.SQL.Clear;
      TADOQuery.SQL.Add('Select * From Kunden Order By Name');
      TADOQuery.ExecSQL;
MFG Christian18

also, ich kenn mich mit der ADO-Query nicht aus, aber müsste es nicht "Open" heißen stat "ExecSQL" bei select -statements? Execsql wird m.E. nur für Statements ohne Ergebnismengen benutzt (insert etc.). Zumindest ist es bei TIBQuery so.

Christian18 15. Jan 2006 18:30

Re: Via SQL Access DB Tabelle sortieren
 
so funktioniert es aber auch nicht.

hier mein code den ich jetzt geändert habe:

Delphi-Quellcode:
      TADOQuery.SQL.Clear;
      TADOQuery.SQL.Add('Select * From Kunden Order By Name');
      TADOQuery.Open;

omata 15. Jan 2006 18:31

Re: Via SQL Access DB Tabelle sortieren
 
Was machst du den nach dem Open?

Christian18 15. Jan 2006 18:33

Re: Via SQL Access DB Tabelle sortieren
 
Zitat:

Zitat von omata
Was machst du den nach dem Open?

nichts mehr ich habe einen button sortieren und dann soll die Tabelle nach Name sortiert werden. ich will danach nichts mehr machen.

mfg christian18

r_kerber 15. Jan 2006 18:34

Re: Via SQL Access DB Tabelle sortieren
 
Zitat:

Zitat von Christian18
so funktioniert es aber auch nicht.

Dann beschreibe doch bitte mal genau, was nicht funktioniert!

omata 15. Jan 2006 18:36

Re: Via SQL Access DB Tabelle sortieren
 
Wie jetzt?
Du willst dann den Inhalt der Tabelle auf deiner Form in einem DBGrid sortiert ausgegeben haben?
Oder willst du etwa die Zeilen in der Datenbank sortieren?

Ich verstehe nicht was genau du eigentlich machen möchtest.

sir-archimedes 15. Jan 2006 18:39

Re: Via SQL Access DB Tabelle sortieren
 
Ich glaube Christian möchte die Tabelle sortiert abspeichern. Das ist allerdings ohne weiteres nicht möglich und vor allem auch nicht nötig, da man ja die Sortierung via SQL bequem einstellen kann.

Hängt keine andere Tabelle mehr von der Kunden-Tabelle ab, könnte man die Datensätze sortiert auslesen, via SQL alle Datensätze löschen und dann neu reinschreiben. Das ist allerdings alles andere als schön oder empfehlenswert!

Also lieber mit SQL sortieren!

Christian18 15. Jan 2006 18:39

Re: Via SQL Access DB Tabelle sortieren
 
Zitat:

Zitat von omata
Wie jetzt?
Du willst dann den Inhalt der Tabelle auf deiner Form in einem DBGrid sortiert ausgegeben haben?
Oder willst du etwa die Zeilen in der Datenbank sortieren?

Ich verstehe nicht was genau du eigentlich machen möchtest.

Hallo,

ob das jetzt in der DB sortiert wird, oder ob ich es sortiert ausgebe, ist mir eigentlich egal. Was ist denn beser??? Ich will einfach nur das der nutzer den programm eine bessere übersicht über das programm und deren daten hat.

r_kerber 15. Jan 2006 18:41

Re: Via SQL Access DB Tabelle sortieren
 
Zitat:

Zitat von Christian18
ob das jetzt in der DB sortiert wird, oder ob ich es sortiert ausgebe, ist mir eigentlich egal.

Der DB aber nicht, Ersteres kann sie nämlich nicht.

Christian18 15. Jan 2006 18:44

Re: Via SQL Access DB Tabelle sortieren
 
Zitat:

Zitat von r_kerber
Zitat:

Zitat von Christian18
ob das jetzt in der DB sortiert wird, oder ob ich es sortiert ausgebe, ist mir eigentlich egal.

Der DB aber nicht, Ersteres kann sie nämlich nicht.

ja ich glaube es wird auch immer nur das view sortiert. bin mir da aber jetzt nicht genau sicher. wie kann ich denn jetzt ein "View" nach alphabet sortieren.

MFG Christian18

r_kerber 15. Jan 2006 18:46

Re: Via SQL Access DB Tabelle sortieren
 
Zitat:

Zitat von Christian18
wie kann ich denn jetzt ein "View" nach alphabet sortieren.

Mit ORDER BY!

alzaimar 15. Jan 2006 18:47

Re: Via SQL Access DB Tabelle sortieren
 
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.

Christian18 15. Jan 2006 18:49

Re: Via SQL Access DB Tabelle sortieren
 
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.

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:42 Uhr.

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