![]() |
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 |
Re: Via SQL Access DB Tabelle sortieren
Die Sortierung kannst du in deinem Select-Statement mit dem Befehl "ORDER BY" vornehmen.
Grüße Mikhal |
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 |
Re: Via SQL Access DB Tabelle sortieren
Zitat:
SQL-Code:
SELECT * FROM tabelle ORDER BY spalte
|
Re: Via SQL Access DB Tabelle sortieren
Gegeben ist eine Adress-Tabelle adr_adressen mit folgender Definition:
SQL-Code:
Dann kannst du diese Tabelle mit folgendem Select-Statement abgreifen, wobei die Sortierung nach adr_name erfolgt.
CREATE TABLE adr_adressen(
adr_id counter, adr_name varchar(50), adr_strasse varchar(50), adr_plz varchar(7), adr_ort varchar(50));
SQL-Code:
Willst du die Sortierung umkehren, verwendest ud das Schlüsselwort DESC:
SELECT adr_id, adr_name, adr_strasse, adr_plz, adr_ort
FROM adr_adressen ORDER BY adr_name
SQL-Code:
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.
ORDER BY adr_name desc
Grüße Mikhal |
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:
MFG Christian18
TADOQuery.Active:=False;
TADOQuery.SQL.Clear; TADOQuery.SQL.Add('Select * From Kunden Order By Name'); TADOQuery.ExecSQL; |
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:
MfG
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; Thorsten |
Re: Via SQL Access DB Tabelle sortieren
Zitat:
|
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; |
Re: Via SQL Access DB Tabelle sortieren
Was machst du den nach dem Open?
|
Re: Via SQL Access DB Tabelle sortieren
Zitat:
mfg christian18 |
Re: Via SQL Access DB Tabelle sortieren
Zitat:
|
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. |
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! |
Re: Via SQL Access DB Tabelle sortieren
Zitat:
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. |
Re: Via SQL Access DB Tabelle sortieren
Zitat:
|
Re: Via SQL Access DB Tabelle sortieren
Zitat:
MFG Christian18 |
Re: Via SQL Access DB Tabelle sortieren
Zitat:
|
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:
Fertig.
Procedure TForm1.ButtonSortierenClick (Sender : TObject);
Begin MyDataModule.MyADOTable.IndexFieldName := 'Name'; End; |
Re: Via SQL Access DB Tabelle sortieren
Zitat:
|
Re: Via SQL Access DB Tabelle sortieren
Zitat:
|
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??? |
Re: Via SQL Access DB Tabelle sortieren und suchen
SQL-Code:
würde dir alle Kunden, die mit Christian anfangen zurückgeben.
SELECT * FROM Kunden WHERE Name like 'Christian%'
|
Re: Via SQL Access DB Tabelle sortieren und suchen
Dann ersetze die Table doch einfach durch eine Query! Also: TADOConnection --> TADOQuery --> TDataSource --> TDBGrid
|
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 |
Re: Via SQL Access DB Tabelle sortieren und suchen
Zitat:
Um nur alle Datensätze aufzulisten, deren Feld "Vorname" gleich "Christian" ist, machst Du das hier:
Delphi-Quellcode:
Achtung!
Procedure TForm1.ButtonFilternClick (Sender : TObject);
Begin MyDatamodule.MyADOTable.Filter := 'Vorname="Christian"'; MyDatamodule.MyADOTable.Filtered := True; End; 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. |
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:
Anschließend
SELECT * FROM Kunden WHERE Name LIKE :ParamName ORDER BY Name
Delphi-Quellcode:
und es wird neu gefiltert. So muss man sich auch nicht mit Hochkommata, Datumsformaten, etc. herumquälen.
ADODataSet.Parameters.ParamByName('ParamName').Value := 'Christian%';
ADODataSet.Requery; |
Re: Via SQL Access DB Tabelle sortieren und suchen
Zitat:
ist der Filter bei ADO schneller als bei der BDE??? |
Re: Via SQL Access DB Tabelle sortieren und suchen
Zitat:
Delphi-Quellcode:
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.
MyTable.Filter = 'Foo = 3';
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