| Autor |
Beitrag |
D. Annies
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: So 05.04.09 19:31
Hi, Delpher,
kann man aus den folgenden zwei Abfragen eine einzige machen, so dass dann alle Infos in einer Tabelle zu sehen sind?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| with QBuecher2 do begin fname := concat(label30.caption, 'OUTXLS\' + 'Ausleihsumme' +inttostr(t)+inttostr(m)+inttostr(j)+ '.xls'); Close; SQL.Clear; SQL.Text := format('select distinct B.Klasse, count(*) as anzahl from "%s" B ', [TbArtikel.tablename])+ 'where (B.Klasse like ''10%'' or B.Klasse like ''9%'' or B.Klasse like ''8%'' ' + 'or B.Klasse like ''7%'' or B.Klasse like ''6%'' or B.Klasse like ''5%'') ' + 'group by B.Klasse'; Open; TeilmengenausgabeSG(QBuecher2); Close; SQL.Clear; SQL.Text := format('select distinct B.Titel, B.Klasse from "%s" B ', [TbArtikel.tablename])+ 'where (B.Klasse like ''10%'' or B.Klasse like ''9%'' or B.Klasse like ''8%'' or ' + 'B.Klasse like ''7%'' or B.Klasse like ''6%'' or B.Klasse like ''5%'') ' + 'order by B.Klasse'; Open; TeilmengenausgabeSG(QBuecher2); end; |
Vielen Dank für Hilfe,
Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: So 05.04.09 21:54
Ich habe jetzt den (funktionierenden) folgenden Befehl:
Delphi-Quelltext 1: 2: 3: 4:
| SQL.Text := format('select B.Titel, count(*) as anzahl, B.Klasse from "%s" B ', [TbArtikel.tablename])+ 'where (B.Klasse like ''10%'' or B.Klasse like ''9%'' or B.Klasse like ''8%'' or ' + 'B.Klasse like ''7%'' or B.Klasse like ''6%'' or B.Klasse like ''5%'') ' + 'group by B.Klasse, B.Titel'; |
Geht's eleganter?
Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 05.04.09 21:56
Welches DBMS?
Vielleicht wäre die Verwendung von (SQL-)Parametern eine Option
_________________ Markus Kinzler.
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Mo 06.04.09 07:15
Hi, Markus,
ich verwende D6 Enterprise und die normalen Delphi-DB-Kompos.
Die Aufzählung 10 5 6 7... kommt mir auch ein bisschen doof vor, deshalb wohl deine Anregung mit einem Parameter, aber wie muss ich den denn wählen?
Gruß, Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 06.04.09 07:48
Ein schönes Beispiel, das die Struktur einer Datenbanktabelle wohlüberlegt sein sollte. Hier wären zwei Spalten ('Klassenstufe' als Zahl ,'Klassenzusatz' als String) hinsichtlich der vorzunehmenden Abfragen sicherlich die bessere Wahl.
Dann würde die Abfrage auf ein simples select * from <Tabelle> where Klassenstufe between 5 and 10
hinauslaufen (Normalisierungsfetischisten würden hier den Klassen sogar eine eigene Tabelle spendieren).
So bleibt Dir im Prinzip nichts Anderes übrig, als deine Abfrage so zu gestalten, wie Du es bisher getan hast. Man könnte die Abfrage durch ein 'BETWEEN' etwas übersichtlicher machen, aber das Grundproblem bleibt.
So könnte eine Verkürzung der Abfrage aussehen, wenn die 'Klasse' in der Form '5A', '6C' etc. formatiert ist.
SQL-Anweisung 1:
| select * from <Tabelle> where (Klasse between '5A' and '9Z') or (Klasse like '10%') |
Eleganter ist das nicht, dazu musst Du die Tabelle umformen (siehe 1.Absatz)
_________________ Na denn, dann. Bis dann, denn.
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Mo 06.04.09 08:14
Danke, Alzaimer. Schade, dass ich das nicht früher gewusst habe.
Gruß, Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mo 06.04.09 08:43
D. Annies hat folgendes geschrieben : | | Schade, dass ich das nicht früher gewusst habe. |
Meiner Erfahrung nach ist es am besten, solche "Fehler" jetzt zu beheben, auch wenn es etwas Arbeit macht, als es dabei zu belassen. Sonst wird man sich jedes Mal darüber ärgern, wenn man an diese Stelle gelangt und hat vermutlich in der Summe mehr Arbeit, als wenn man es jetzt einmal richtig macht.
Mit jeder Programmerweiterung wird es schwieriger und damit auswändiger, es umzustellen.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Mo 06.04.09 09:25
Danke, Nersgatt,
ich gucke mir den Aufwand mal an,
Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
|