Discussion:
Bericht mit einer dynamischen Kreuztabelle lässt sich nicht öffnen
(zu alt für eine Antwort)
Franz Mayer
2004-12-20 08:46:10 UTC
Permalink
Hallo NewsGroup,

ich will einen Bericht in öffnen, der als RecordSource (Datenherkunft)
eine dynamische Kreuztabelle hat (d.h. die Spaltenanzahl und
-überschriften sind nicht immer gleich).

Die Kreuztabelle funktioniert auch wunderbar, sogar mit Parameter
(dank FAQ 6.4). Wenn ich jedoch den Bericht aufrufe, gibt er mir
folgenden Fehler zurück: "Die Kreuztabelle einer nicht feststehenden
Spalte kann nicht als Unterabfrage verwendet werden. (Fehler 3637)"

Was durchaus ein Problem der Kreuztabelle sein könnte ist:
- Ich habe ein Feld, das je nach Wert eines anderen Feldes einen Wert
zurückgibt (also eine verschachtelte Wenn-Funktion)
- Ich sortiere nach dem obigen Feld.
- Ich habe ein Kriterium mit einem Parameter:
Eval("Forms!fMain!sCboProjectID"); habe die donkarl-FAQ-Punkte 6.4 und
3.18 ausprobiert

Ich weiß leider nicht mehr weiter. Anbei der Visual Basic-Code beim
Öffnen des Berichts.

Vielen Dank bereits im Voraus.

Gruß Franz


-----Beginn VB-Code (für MS Access 2002) -----
Private Sub Report_Open(Cancel As Integer)
Dim oDatabase As DAO.Database
Dim oRecordset As DAO.Recordset
Dim sSQL As String
Dim iNoFields As Integer
Dim iStartLoop As Integer
Dim iShowYear As Integer
Dim i As Integer
Dim bShowYears As Boolean

Set oDatabase = CurrentDb
Set oRecordset = oDatabase.OpenRecordset("qCT_FiguresForShareholderValue")

' Anzahl der Felder
iNoFields = oRecordset.Fields.Count
bShowYears = True

' max. 6 Jahre können angezeigt werden
If iNoFields > 9 Then
If MsgBox("Es können maximal 6 Jahre angezeigt werden. Sollen die
letzten 6 Jahre angezeigt werden?", vbYesNo) = vbYes Then
iStartLoop = iNoFields - 6
Else
bShowYears = False
End If ' MsgBox
Else
iStartLoop = 3
End If ' Maximum der anzeigbaren Jahre

If bShowYears Then
iShowYear = 1
For i = iStartLoop To iNoFields - 1
' Überschriften generieren
Me.Controls("LblYear" & iShowYear).Caption =
oRecordset.Fields(i).Name
Me.Controls("LblYear" & iShowYear).Visible = True

' Textfelder befüllen
Me.Controls("dTxtYear" & iShowYear).ControlSource =
oRecordset.Fields(i).Name
Me.Controls("dTxtYear" & iShowYear).Visible = True
iShowYear = iShowYear + 1
Next i
End If ' bShowYears

Set oRecordset = Nothing
Set oDatabase = Nothing

End Sub ' Report_Open

-----Ende VB-Code-----
Doerthe Weber
2004-12-20 10:35:09 UTC
Permalink
Hallo Franz,
Post by Franz Mayer
Hallo NewsGroup,
ich will einen Bericht in öffnen, der als RecordSource (Datenherkunft)
eine dynamische Kreuztabelle hat (d.h. die Spaltenanzahl und
-überschriften sind nicht immer gleich).
Die Kreuztabelle funktioniert auch wunderbar, sogar mit Parameter
(dank FAQ 6.4). Wenn ich jedoch den Bericht aufrufe, gibt er mir
folgenden Fehler zurück: "Die Kreuztabelle einer nicht feststehenden
Spalte kann nicht als Unterabfrage verwendet werden. (Fehler 3637)"
Access kann Berichte nur über Kreuztabellen mit fixierten
Spaltenüberschriften erstellen. "it's not a bug, it's a feature".

Als Workaround kann ich folgendes vorschlagen: Versuch das Problem schon in
der Abfrage zu lösen, also erzeuge als Spaltenüberschriften nicht
1999, 2000, 2001, 2002, 2003, 2004
sondern
Jahr1, Jahr2, Jahr3, Jahr4, Jahr5, Jahr6
und gib diese auch als fixierte Spaltenüberschriften an.
Dann brauchst Du auch die Felder nicht nachher per Code befüllen....

Gruß
Doerthe

Loading...