Franz Mayer
2004-12-20 08:46:10 UTC
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-----
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-----