AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Wie kann ich die SQL Sortierung in eine Tabelle speichern?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann ich die SQL Sortierung in eine Tabelle speichern?

Ein Thema von Rapthor · begonnen am 12. Dez 2002 · letzter Beitrag vom 19. Dez 2002
Antwort Antwort
Seite 2 von 3     12 3      
Rapthor

Registriert seit: 30. Nov 2002
139 Beiträge
 
#11
  Alt 12. Dez 2002, 19:31
Also:
Was ist wenn du 10000 Datensätze hast (also 10000 Zeilen in deiner Tabelle) und die Tabelle selbst nochmal 10 Spalten hat?
Nehmen wir an du sortierst nach dem Namen der Personen in der Tabelle.
Jetzt haste schön alle die mit "A" anfangen hintereinander und würdest dich total darüber freuen, wenn du genau in DIESEM Zustand nacheinander die 120 Namen editieren könntest...Zeile für Zeile. Es kann doch z.b. sein dass du genau bei allen Personen mit Anfangsbuchstaben "A" einen Wert ändern willst. Aber eben genau nur bei allen die mit A anfangen.
Das war nur ein Beispiel.
Wenn diese Sortierung wieder aufgehoben würde müsste ich ja alle 120 Namen selbst raussuchen und ewig scrollen. Arg! Geht das noch anders als mit SQL?
Danke nochmal für eure Anteilnahme an meinem harten Schicksal
  Mit Zitat antworten Zitat
sol_e_sombre

Registriert seit: 9. Dez 2002
8 Beiträge
 
Delphi 5 Enterprise
 
#12
  Alt 12. Dez 2002, 20:14
Dann benutzt Du nicht TTable sondern TQuery, setzt die Eigenschaft SQL.Text auf das entsprechende Statement:

SELECT irgendwas, irgendwie, irgendwann
FROM DeineTabelle
ORDER BY irgendwas

Dann hast Du die Möglichkeit in einem DBGrid diese Daten anzuzeigen und auch zu bearbeiten.
Dazu muß das Select Statement aber auf eine aktualisierbare Datenmeng zeigen, d.h. es sind nur begrenzt Joins erlaubt!

Wenn Du dann eine andere sortierung brauchst, kannst Du, auch zur Laufzeit, die Eigenschaft SQL.Text von TQuery ändern:

...
ORDER BY irgendwie

Das DBGrid zeigt die Daten in der neuen Sortierung an, Du kannst sie wieder bearbeiten.
Und dabei ist Dir die Sortierung in der Datenbank intern völlig egal!

Ist es das ungefähr, was Du willst?
  Mit Zitat antworten Zitat
Rapthor

Registriert seit: 30. Nov 2002
139 Beiträge
 
#13
  Alt 12. Dez 2002, 20:22
GENAU so mach ich das ja die ganze Zeit ... mit nem TQuery eben! Nur dass der Sortierbefehl fest auf einen Button gelegt ist.D.H. wenn ich den Button drücke dann führt er diesen Sortierbefehl aus und zeigt das Ergebnis in meinem DBGrid an.Dadurch geht aber die Verbindung zwischen meinem Navigator under der Datasource verloren, so dass ich nach der Sortierung nicht mehr bearbeiten kann.
Wenn ich die Datasource mittels Befehlszeile wieder mit dem DBGrid verknüpfe stellt er allerdings wie gesagt wieder die alte unsortierte Reihenfolge her.
  Mit Zitat antworten Zitat
sol_e_sombre

Registriert seit: 9. Dez 2002
8 Beiträge
 
Delphi 5 Enterprise
 
#14
  Alt 12. Dez 2002, 20:48
Schreib mal bitte, was hinter dem ButtonClick steht.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#15
  Alt 13. Dez 2002, 07:52
Hallo Rapthor,

so wie du es beschrieben hast, arbeitest du mit Paradox Tabellen, dann funktioniert auch INSERT mit SELECT. Dein Fehler ist also nicht das SQL Statement, sondern liegt woanders. Deshalb interessiert mich auch, was sol_e_sombre bereits gefragt hat.

Beachte, dass ein INSERT Statement mit ExecSQL und nicht mit Open ausgeführt wird! Und dass dieses Statment keine Datenmenge zurückliefert, sondern das Ergebnis ja wie gewünsht in eine neue Tabell schreibt. Diese kannst du anschließend öffnen und mit dem Nav-Objekt verbinden.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Bart Simpson

Registriert seit: 3. Dez 2002
9 Beiträge
 
#16
  Alt 13. Dez 2002, 12:13
Ich geb zu, ich weiss jetzt nicht wie's bei einem Desktop System wie Paradox, dass Du offensichtlich benutzt (BDE + *.db -> Paradox), aussieht, aber ich denke da müsste das was ich vorschlage auch ganz gut funktionieren:

Leg einfach einen Index bzw. Sekundärindex (ich hoff es heisst noch so in Paradox Version >=7) auf die Spalte, nach der sortiert werden soll. Dann dürfte der Sortiervorgang auch bei 10000 Einträgen (Ok, ok - ich weiss nicht wie's bei Paradox ist, aber bei z.B. MySQL ist's kein Problem) sehr schnell mit dem sortieren fertig sein. Genau für sowas gibt's die Indizes nämlich

Bart Simpson
Naeser's Gesetz: Man kann etwas narrensicher machen - aber nicht VERDAMMT narrensicher!
  Mit Zitat antworten Zitat
Rapthor

Registriert seit: 30. Nov 2002
139 Beiträge
 
#17
  Alt 13. Dez 2002, 17:01
Das steht hinter dem ButtonClick zum Sortieren:

Code:
procedure TForm1.Button2Click(Sender: TObject);

begin
DataSource1.DataSet:=Query1;
Query1.Active:=false;
Query1.Sql.Clear;
Query1.Sql.Add('SELECT * FROM schueler ORDER BY klasse');
Query1.open;
Query1.Active:=true;
end;
  Mit Zitat antworten Zitat
Rapthor

Registriert seit: 30. Nov 2002
139 Beiträge
 
#18
  Alt 14. Dez 2002, 12:33
Ach und diese Index-Erstellung dient nur der schnelleren Sortierung? Oder ermöglicht mir die auch die Speicherung der sortierten Tabelle?
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#19
  Alt 14. Dez 2002, 21:16
Hallo Rapthor,

Indices dienen tatsächlich nur dazu, die Daten sortiert anzuzeigen, die physikalische Reihenfolge bleibt davon unberührt. Wählst du aber einen Index aus und läufst z.B. mit:

Delphi-Quellcode:
  myTable.First;

  while NOT myTable.EOF do
  begin
    ...
    myTable.Next
  end;
durch die Tabelle, erhälst du die Daten auch sortiert nach dem Index!

Aber nochmal: Insert in Verbindung mit SELECT speichert die Daten sortiert.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#20
  Alt 14. Dez 2002, 21:31
Hi,

Zitat:
, erhälst du die Daten auch sortiert nach dem Index!
Moment : Nach welchem ? Woher soll der Rechner wissen, wie er sortieren soll Du mußt doch den Index irgendwo angeben, oder nicht ? Es wäre schön, Du würdest mir ein Beispiel geben. Wo wir schon dabei sind : Was ich noch nicht so durchschaut habe ist folgendes : WHERE-Klausel und Indices. ALSO : wie wirkt sich das aus, wenn ein in der WHERE Klausel benutzter Begriff einen Index hat oder nicht und umgekehrt ?

Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:43 Uhr.
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