Views eleganter ? Dann erkläre mal bitte, wie ich die Daten einer Tabelle abrufe, sagen wir mal Artikel von Nr. 1 bis 1000 bestückt. Ich will aber jetzt aus meinem Delphi-Prograam nur die von 100 bis 199 sehen.
Gerne, obwohl du das sicher auch selbst weißt, weil es so simpel ist:
Code:
select * from MyView where ArtikelNummer < 1001;
select * from MyView where ArtikelNummer > 99 and ArtikelNummer < 200;
In deiner Delphi-Anwendung arbeitest du dann mit Filtern, nachdem du im
SQL-Property deiner
Query-Komponente
select * from MyView angegeben hast:
Delphi-Quellcode:
Datenmodul.Query_MyView.Filter := 'ArtikelNummer > 99 and ArtikelNummer < 200';
Datenmodul.Query_MyView.Filtered := True;
Einer meiner zahlreichen Views sieht z.B. so aus:
Code:
CREATE OR ALTER VIEW V_HOERBUCH(
ID,
TITEL,
HOERART,
AUTOR,
KATEGORIE,
SPRACHE,
VORLESER,
SPIELDAUER,
ANZAHL,
QUELLE,
URL,
GESEHEN,
MARKIERT,
NOTIZEN)
AS
select
HOERBUCH.ID_HOERBUCH,
HOERBUCH.TITEL,
BUCHSPIEL.HOERART,
AUTOREN.NAMEFULL,
KATEGORIEN.KATEGORIE,
SPRACHEN.SPRACHE,
VORLESER.NAMEFULL,
HOERBUCH.SPIELDAUER,
HOERBUCH.ANZAHL,
QUELLEN.QUELLE,
HOERBUCH.URL,
HOERBUCH.GESEHEN,
HOERBUCH.MARKIERT,
HOERBUCH.NOTIZEN
from HOERBUCH
inner join BUCHSPIEL on BUCHSPIEL.ID_BUCHSPIEL = HOERBUCH.HOERART
inner join AUTOREN on AUTOREN.ID_AUTOREN = HOERBUCH.AUTOR
inner join KATEGORIEN on KATEGORIEN.ID_KATEGORIEN = HOERBUCH.KATEGORIE
inner join SPRACHEN on SPRACHEN.ID_SPRACHEN = HOERBUCH.SPRACHE
inner join VORLESER on VORLESER.ID_VORLESER = HOERBUCH.VORLESER
inner join QUELLEN on QUELLEN.ID_QUELLEN = HOERBUCH.QUELLE
;
Man sieht, das ist letztendlich einfacher zusammenzubauen als ein komplizierter
SQL-Befehl in deiner Anwendung. Ein weiterer Vorteil von Views besteht darin, daß ich in einer
Query, die eine View-Datenmenge selektiert, direkt auch nach den Inhalten der verlinkten Sub-Tabellen sortieren kann, z.B.:
Delphi-Quellcode:
Procedure TDatMod.SortierenHoerbuch(Spalte: Integer);
Const
K = ';';
SortText = ' Hörbücher sortiert nach "';
Var
SortAus,
SortOrd,
SqlSort : String;
begin
If GLD.URec.HB_SortOrd Then
Begin
SortOrd := '" aufwärts';
SqlSort := ':A';
End Else
Begin
SortOrd := '" abwärts';
SqlSort := ':D';
End;
Case Spalte Of
0 : Begin
Tab_V_Hoerbuch.IndexFieldNames := 'TITEL' + SqlSort + K + 'AUTOR' + SqlSort + K + 'VORLESER' + SqlSort + K +
'SPRACHE' + SqlSort + K + 'KATEGORIE' + SqlSort + K + 'HOERART' + SqlSort + K;
SortAus := 'Titel';
...