Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Felder eines Datensatzes in Query zu einzelnen Datensätzen (https://www.delphipraxis.net/95536-felder-eines-datensatzes-query-zu-einzelnen-datensaetzen.html)

haentschman 8. Jul 2007 22:26

Datenbank: Paradox • Zugriff über: SQL

Felder eines Datensatzes in Query zu einzelnen Datensätzen
 
Hallo alle... :-D

ich habe eine Tabelle z.B. mit Feld1, Feld2, Feld3.

ist es mit Query möglich jedes Feld als einzelnen Datensatz in einem Feldx als Ergebnis zu erhalten ? :gruebel:

Ich hoffe auf eine Lösung...
Für Eure Hilfe Danke im Voraus...

Hintergrund: ich muß die einzelnen Felder nacheinander im Report darstellen in einem Band, da aber die
Feldwerte unterschiedlich sind kann ich es nicht statisch lösen. Desweiteren wird in Abhängigkeit des Feldwertes das Band gedruckt oder nicht.

marabu 9. Jul 2007 07:17

Re: Felder eines Datensatzes in Query zu einzelnen Datensätz
 
Guten Morgen,

LocalSQL bietet leider keine komfortablen Sprachmittel zur Spalten-Zeilen-Transposition. Für eine überschaubare Menge an Feldern kannst du aber mit UNION nachhelfen:

SQL-Code:
SELECT id, feld1 FROM tabelle WHERE id = :id
UNION
SELECT id, feld2 FROM tabelle WHERE id = :id
Grüße vom marabu

haentschman 9. Jul 2007 09:36

Re: Felder eines Datensatzes in Query zu einzelnen Datensätz
 
Guten Morgen... :roll:

Danke für die Richtung... :-D werde mich mit Union eingehend beschäftigen.
Ich melde mich dann wieder :hi:

haentschman 9. Jul 2007 12:06

Re: Felder eines Datensatzes in Query zu einzelnen Datensätz
 
Hallo...

mit UNION wäre es der Weg, wenn ich mich nicht verkehrt ausgedrückt hätte :wall:

ich benötige nicht den Feldinhalt als Ergebnis sondern den Feldnamen.

Beispiel:

Tabelle vorhanden:

SpalteA SpalteB SpalteC

TextA True True
TextB False True
TextC True False


Datensatzzeiger steht z.B. auf Datensatz 1, Abfage welche Spalte True enthält.
das Ergebnis sollte so aussehen:

SpalteX

SpalteB
SpalteC


bei Datensatz 2 so:

SpalteX

SpalteC


das ist natürlich etwas völlig anderes...sorry :oops:

Vieleicht gibt es eine simple Lösung.
Ich werde aber das Gefühl nicht los Umwege zu gehen... :(

noidic 9. Jul 2007 12:12

Re: Felder eines Datensatzes in Query zu einzelnen Datensätz
 
Ich wüsste da keine Möglichkeit, das in SQL abzubilden. Vielleicht kannst du die Anforderung, die dahinter steht, etwas weiter ausleuchten, dann kann man sich eventuell die ein oder andere Alternative überlegen.

haentschman 9. Jul 2007 13:29

Re: Felder eines Datensatzes in Query zu einzelnen Datensätz
 
Danke für die schnelle Reaktion... :-D

Der Hintergrund:

in der Tabelle werden Grundeinstellungen gespeichert.

SpalteA enthält die Typenbezeichnung der Anlage. Die weiteren Spalten entsprechen den Komponenten. der Spalteninhalt ist True oder False. Je nach Typbezeichnung sind Komponenten vorhanden oder nicht.

Diese Tabelle benutze ich u.a. für das ein- bzw. ausblenden von Registerkarten.

zu jeder Komponente existiert eine weitere Tabelle mit je nach Komponente unterschiedlichen Feldern.

Jetzt möchte ich mit FreeReport die einzelnen Spalten / Daten darstellen. (Wechsel von QuickReport)

Der Report sollte etwa so aussehen:

1. Anlagentyp auswählen --> Datensatzeiger setzen in Tabelle Grundeinstellungen
2. Abfrage... Komponente vorhanden -- > Ergebnis Tabelle mit den vorhandenen Komponenten (Feldnamen)
3. Abfrage... Tabellen der Komponenten ( Felder, Daten )

Überschrift - Typbezeichnung (Tabelle Grundeinstellungen)
Feldname1 in TabelleKomponente---Feldname2 in TabelleKomponente---Feldname3 in TabelleKomponente ...
Daten Feld1----------------------Daten Feld2----------------------Daten Feld3

in der Query müssen dann alle Daten der Tabellen vorhanden sein. Über Master/Detail (Gruppierung ) läßt sich das dann leicht darstellen.
Oder...vor jedem Print des Bandes neue Query mit der nächsten Tabelle für die Daten. Grundlage für den Report wäre aber eine Tabelle mit der Menge der vorhandenen Komponenten...

Fazit:
mit Quickreport war es ungleich einfacher Eigenschaften zuzuordnen oder den Bericht von extern zu steuern. ( Lernphase FreeReport :roll: ) Deshalb habe ich nach einer Möglichkeit über Query gesucht um die Daten zusammenzufassen. Der Ausschlaggebende Punkt zu wechseln war die Möglichkeit mehrere Seiten zu definieren und jeder Seite eigene Eigenschaften zuzuordnen ( z.B. Ausrichtung ).

Kein einfacher Weg... :( aber kriege ich irgendwie !

Ich hoffe, mich verständlich ausgedrückt zu haben. Viel Spaß beim Nachdenken... :-D Viele Wege führen nach Rom...mir raucht schon der Kopf. :hi:

haentschman 10. Jul 2007 10:53

Re: Felder eines Datensatzes in Query zu einzelnen Datensätz
 
Hallo alle miteinander...

ich habe das jetzt über Umwege gelöst...

1. dynamisch eine Tabelle erzeugt
2. Datensatz mit den Komponenten mit Schleife durchlaufen und in der neuen Tabelle die Feldnamen
als einzelne Datensätze abgelegt.
Jetzt habe ich eine Datenmenge als Grundlage für den Report.
3. im BeforePrint des Bandes hole ich mir dann über eine Query die passenden Daten.

Delphi-Quellcode:
procedure TempTable1;
var
  Tabelle: TTable;
begin
  Form1.TabTemp.Active:= False;
  if FileExists(Form6.Verzeichnis.Text + '\Temp.DB') then DeleteFile(Form6.Verzeichnis.Text + '\Temp.DB');
  Tabelle:= TTable.Create(nil);
  with Tabelle do
    begin
      SessionName:= Form1.TabKunden.SessionName;
      TableType := ttParadox;
      TableName := Form6.Verzeichnis.Text+ '\Temp.DB';
      with FieldDefs do
        begin
          Clear;
          Add('Bezeichnung', ftString, 30);
        end;
      CreateTable;
    end;
  Form1.TabTemp.Active:= True;
end;
Delphi-Quellcode:
procedure Anlagenschema;
var
  A: Integer;

begin
  for A:=0 to 8 do
    begin
      if Form1.TabAnlagenschema.Fields.Fields[A].AsBoolean then
        begin
          Form1.TabTemp.Append;
          Form1.TabTemp.Edit;
          Form1.TabTemp.FieldValues['Bezeichnung']:= Form1.TabAnlagenschema.Fields.Fields[A].FieldName;
          Form1.TabTemp.Post;
        end;
    end;

end;
Vieleicht hilft es ja jemandem mit ähnlichen Sorgen.... :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:32 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 by Thomas Breitkreuz