![]() |
Datenbank: Interbase • Version: 3 • Zugriff über: Server
Unterschiedliche Datensätze selektieren
Guten Tag Delphianer,
ich möchte aus einer Tabelle einzelne Datensätze selektieren. Z. B. befinden sich in einer Tabelle die Datensätze: Key Artikelnummer Artikelanme 1 Artikel1 Irgendetwas 2 Artikel56 Nochwas 3 Artikel89 Anderer Artikel 4 Artikel100 Zuerst 5 Artikel899 Immer 6 Artikel34456 Verschieden 7 Artikel111 Nicht den 8 Artikel000 Dies und das usw. Ich möchte nun z. B. die Datensätze 1, 3, 4, 6, 7, 118 zusammen auswählen um sie mit Fastreport auszudrucken. Aber wie selektiere ich nun diese Datensätze? Mit
Delphi-Quellcode:
kann ich die Datensätze ja nicht filtern.
select * from artikel where ???
Ich könnte der Tabelle eine neue Spalte "drucken J/N" hinzufügen und dann auf dieses Feld abfragen
Delphi-Quellcode:
.
where drucken = J
Aber vielleicht kennt noch jemand eine andere Lösung? Mit Gruß HPB |
AW: Unterschiedliche Datensätze selektieren
|
AW: Unterschiedliche Datensätze selektieren
SQL-Code:
oder denke ich da jetzt zu falsch? :gruebel:
WHERE Key IN (1, 3, 4, 6, 7, 118)
Wie entscheidest du eigentlich was gedruckt werden soll, also wo kommen die Keys her? |
AW: Unterschiedliche Datensätze selektieren
Zitat:
Den Vorschlag von Sir Rufo werde ich noch testen. Zu himutsu: Ich stelle die Daten in einem VirtualStringTree mit einer CheckBox dar. Nun kann ich jeden zu druckenden DS aktivieren (CheckBox = Checked) Im Node des VirtualStringTree ist der PrimaryKey der Tabelle mit hinterlegt. Dein Vorschlag mit
SQL-Code:
sieht doch sehr viel versprechend aus. Muss ich aber noch prüfen.
WHERE Key IN (1, 3, 4, 6, 7, 118)
Vielen Dank nochmals HPB |
AW: Unterschiedliche Datensätze selektieren
Selektierte Items durchgehen und die IDs mit Komma in einem String zusammenhängen.
Alternativ die IDs in eine Liste/Array und dann eine Funktions, welche die Einträge (Integer/String) mit Kommas zu einem Strig verbindet. z.B. eine TStringList -> Add(IntToStr(Key)) > CommaText
Delphi-Quellcode:
Query.SQL := '... WHERE Key IN (' + KommaListe + ')'
oder
Delphi-Quellcode:
Query.SQL := '... WHERE Key IN (&KommaListe)';
Query.MacroByName('KommaListe').Value := KommaListe; |
AW: Unterschiedliche Datensätze selektieren
Zitat:
ich habe es gerade mal ausprobiert. Mit dem SQL-Befehl:
Delphi-Quellcode:
bekomme ich das korrekte Ergebnis.
select * from ksopreise
where ksoid IN (323933, 94970, 504926) Es ist gelöst! Gruß HPB |
AW: Unterschiedliche Datensätze selektieren
Diese Lösung hat natürlich so sein Geschmäcke, da man hier ein Statement zusammenbaut. Änderungen an der Datenbank ziehen plötzlich an zig verschiedenen Stellen (einmal eingeführt wird das an zig Stellen so benutzt) Änderungen mit sich.
Man tut sich keinen Gefallen damit, auch wenn es jetzt so schön schnell und einfach aussieht. Gerade beim FastReport kann man mit dem UserDataset doch so schöne Dinge bauen:
|
AW: Unterschiedliche Datensätze selektieren
Zitat:
denn Variablen/Parameter innerhalb der DB bekommen sowas ja auch hin.
Delphi-Quellcode:
var meineIDs: TArray<Integer>; // TIntegerDynArray / array of Integer
Query.SQL := '... WHERE Key IN :meineIDs'; Query.ParamByName('meineIDs').Value := meineIDs; // eventuell über DynArrayToVariant |
AW: Unterschiedliche Datensätze selektieren
Auch Datenbanken mögen es da gerne typsicher. Da wäre eben der Weg über eine temporäre Tabelle möglich.
Auch wenn ich mich wiederhole, gerade für Reports bietet es sich an, das Beschaffen und Ausgeben der Datensätze zu trennen. Selektierte Datensätze in ein ClientDataset, die Daten (XML oder Binär) mit der Information was das denn bitteschön ist an den Reporter mit dem/den gewünschten Report/s. |
AW: Unterschiedliche Datensätze selektieren
Zitat:
Ich trenne prinzipiell auch die Beschaffung und die Bereitstellung der Daten zur Änderung. Die Daten für den Report hole ich über eine IBQuery und sie ist auch nur zur Anzeige der selben gültig. Daten werden damit nicht geändert. Ich habe einfach nicht gewusst, dass und wie ich den IN-Operator auch in einer SQL-Anweisung anwenden kann. Vielen Dank für Deine Ausführungen HPB |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 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