2010-08-24 7 views

Antwort

-1

Es hängt vom Datentyp für die Spalten a1-e5 ab und was Sie mit dem einzelnen Wert tun möchten.

Wenn Sie nur versuchen, den Wert anzuzeigen, können Sie eine Formel erstellen, die die ToText() -Funktion von Crystal verwendet, um sie zuerst in Zeichenfolgen zu konvertieren und sie dann mit + zusammenzufügen.

ToText({id1.a1}) + ToText({id1.b2}) + ToText({id1.c3}) + ToText({id1.d4}) + ToText({id1.e5})

Sie könnten die gleiche Sache auf der DBMS Seite, auch erreichen.

Wenn Sie weitere Informationen bereitstellen können, können wir möglicherweise eine bessere Lösung finden.

+1

Ich habe deine Antwort fast aufgewertet, aber dann habe ich gemerkt, dass das nicht ihre Frage war. Wenn es aber war, hast du es perfekt beantwortet. – PowerUser

+0

Ja, das dachte ich mir, machte aber die Annahme, dass es ein Snafu der Semantik war und dass es wahrscheinlicher war, dass ID1 eine Zeile/ein Datensatz war. – Ryan

+0

Vielen Dank für die Beantwortung meiner Frage. Id1 ist eine Kundennummer, diese Kunden kauften Produkte a1, b2, c3 zu unterschiedlichen Zeiten usw. Ich möchte wissen, welcher Kunde, der a1 gekauft hat, auch d4 gekauft hat. vielen dank – Helen

0

Sie möchten also Daten von mehreren Zeilen in einer einzigen Zeile für die Anzeige verketten? Crystal Reports ist wirklich nicht für solche Dinge geeignet. Selbst wenn du könntest, würde ich immer noch vorschlagen, zuerst die Serverseite zu machen und sie dann in Crystal zu geben.

Es wird nicht zu schwierig, eine einfache Schleife durch die Daten in der Sprache Ihrer Wahl. Crystal ist jedoch zum Anzeigen und Formatieren von Daten mit einem anständigen (aber nicht umfangreichen) Satz von Datenmanipulations-Tools konzipiert. Ich denke nicht, dass es der beste Weg ist.

+0

Vielen Dank für Ihren Kommentar. Ich habe keinen Zugriff auf den Server, und ich habe versucht, ein Array oder eine Matrix zu erstellen, um die Daten zu speichern und sie dann anzuzeigen. Aber es war nicht erfolgreich. Danke für Ihre Hilfe. – Helen

+0

Ein Array in Crystal klingt so, als ob es den Trick für das, was Sie tun möchten, tun könnte ... Welche Schwierigkeiten hatten Sie damit? Sie könnten nach Kunde gruppieren, initialisieren Sie das Array und eine numbervar, um die Größe in der Kopfzeile zu verfolgen, und dynamisch das Array (mit REDIM PRESERVE) mit jedem neuen Produkt wächst in den Details. In der Fußzeile haben Sie eine Reihe von jedem Produkt, das der Kunde gekauft hat. – Ryan

13

Ein Ansatz ist die "3 Formel" -Methode. Sie richten in jeder Kopfzeile eine Initialisierungsformel mit der Auswertungszeitanweisung "WhilePrintingRecords" ein. Dieser Ansatz war der einzige Weg, um in den "guten alten Tagen", bevor RunningTotal-Objekte verfügbar waren, Laufsummen auszuführen.
Zum Beispiel:
im Gruppenkopf: - Haben Sie eine Formel @InitiliseRT

WhilePrintingRecords; 
StringVar ConcatenatedID; 
If Not InRepeatedGroupHeader Then 
    ConcatenatedID := ""; 

im Abschnitt Details: - Haben Sie eine Formel @UpdateRT

WhilePrintingRecords; 
StringVar ConcatenatedID := ConcatenatedID + id1; 

schließlich in Im Gruppenfuß sehen Sie das Ergebnis: - Formel @ShowRT

WhilePrintingRecords; 
StringVar ConcatenatedID; 

Dies sollte Ihnen Ihre endgültige Zeichenfolge "a1b2c3d4e5" geben.

Wenn Sie möchten, können Sie zusätzliche Formeln für zusätzliche Gruppen hinzufügen, eine Variable für jede Gruppe (z. B. ConcatenatedIDGroup1, ConcatenatedIDGroup2). Der Schlüssel besteht darin, den Namen immer zwischen den Gruppen zu speichern und die Variable im Gruppenkopf zu initialisieren.
Es gibt Einschränkungen bei der Verwendung dieser Formeln.Die integrierten Funktionen (Sum, Max, Count, ...) oder RunningTotals können sie nicht verwenden und Sie können sie nicht gruppieren.

+0

Ich habe Ihr Beispiel verfolgt, aber es funktioniert nicht, wenn Sie mehrere Seiten haben. Bitte helfen oder teilen Sie einige Eingaben, weil es ziemlich gut funktioniert, wenn der Bericht nur eine Seite ist – rickyProgrammer

+0

Ich habe das Problem mit mehreren Seiten vergessen. Ich habe den Code für @InitialiseRT aktualisiert, um die Überprüfung für InRepeatedGroupHeader einzuschließen. Wenn die Seite das erste Mal gedruckt wird, ist dies falsch und die Zeichenfolge wird geleert. Für weitere Seiten ist InRepeatedGroupHeader true und der String wird in Ruhe gelassen. Wohlgemerkt, ich habe das nicht getestet, ich gehe einfach aus meinem Gedächtnis, da ich Crystal nicht mehr installiert habe. –

+0

Ich habe tatsächlich dann Problem in mehreren Seiten beendet, indem ich die Initialisierungsformel auf den Gruppenfußteil setzte. – rickyProgrammer

Verwandte Themen