2016-07-26 13 views
1

Ich habe 3 Spalten in meiner Datenbank: COL1, COL2 und COL3. Ich möchte sie in meinem Bericht aber dynamisch, wie:Dynamische Spaltenstruktur

IF i = 3 THEN COL3 
ELSE IF i = 2 THEN COL2 
ELSE IF i = 1 THEN COL1 

Also die Struktur hängt von den Bedingungen. So ist es möglich, etwas wie das Folgende zu haben?

stringvar test:= COL; 
numbervar i = 3; 
{test + toText(i)} 

Ich möchte die Ausnahme abfangen, wenn die Spaltenstruktur in der Zukunft geändert wird.

+0

es in einer Formel verwenden .. –

Antwort

0

That's not exactly something Crystal Reports is well equipped for. Es gibt keine gute Möglichkeit, eine Zeichenfolge zu verwenden, um zu bestimmen, welches Feld zu erfassen ist, ohne eine if-else-Struktur zu verwenden.

Wenn jedoch in Zukunft COL4 hinzugefügt wird, müssen Sie noch den Bericht ändern, sodass numbervar auf 4 festgelegt werden kann. Es gibt keine gute Möglichkeit für Crystal, eine Spalte vorwegzunehmen, die möglicherweise vorhanden ist .

Wenn Sie das im Hinterkopf behalten, ist die if-else-Anweisung der beste Weg, um festzustellen, welche Spalte zu erfassen ist. Obwohl eine wenig Zeit auf Kopie-Einfügen zu speichern, können Sie zukünftige Codezeilen als Kommentare vorzubereiten und sie aktivieren, wenn die Zeit der entsprechende:

IF i = 1 THEN {table.COL1} 
ELSE IF i = 2 {table.COL2} 
ELSE IF i = 3 {table.COL3} 
\\ ELSE IF i = 4 {table.COL4} 
\\ ELSE IF i = 5 {table.COL5} 
\\ ... 
+1

, dass meine zweite Idee war, es zu haben so, wenn Kristall nicht andersrum unterstützt – Simon

+0

Ja, du würdest denken, dass das eine unterstützte Funktion wäre. Crystal gibt es schon sehr lange und muss eine Menge Legacy-Code unterstützen. Gute Objektorientierung war damals nicht so wichtig. – 4444

0

wie folgt aus:

numbervar s:=0; 
if {Command_1.emp_number} = 1 then 

    s = 3 
else 

    s = 4; 

Hoffe, dass es als Leitfaden hilft ..