Hi
If you are using 8.5 (migrating to 9 and working on the problem )I have a sollotion for yyou. Try to stear clear from subreports inorder to display lables. The report will start to use up a large amount of resources. I have had the same problem as my reports have to be in Multiple languages and therefore the lables have to change depending on the default language the user has chosen.
To solve this I stored the labels on a simple table and passed them using asp to the report.
1.retrieve the labels and store in an array
<%'on error resume next
'session.timeout = 1
'***************************************************************************************************************
stradminlevel = session("adminlevel"
strconn = "Provider=sqloledb; Data Source=IPPFSQLDEV\MAINTENANCE; Initial Catalog=IPPF_IMS; User Id=sa; Password=xxxxxx"
conn.Open strconn
function getLabel(string,string) which uses the IMS_Label to return the language specific labels from the IMS_DATADIC Table filtered by table which is an attributre of the table used to group labels. It is used to build the Report by
'***********passing in the language specific labels. Public Function getLabel(TabName,FieldName)
'response.write TabName
strTabName = trim(TabName)
strfldName = trim(FieldName)
'strLancode = trim(LangCode)
set cmd = Server.CreateObject("ADODB.Command"

set cmd.ActiveConnection = conn
cmd.CommandType = adcmdstoredproc
strSQL = "IMS_Label" & " '" & strTabName & "','" & strfldName & "','" & strlan & "'"
'Response.Write strsql
'Response.End
Set RsLabel = CreateObject("ADODB.Recordset"

RsLabel.Open strSQL, Conn, adOpenKeySet, adLockPessimistic, adCmdText
If Not RsLabel.EOF Then
ssLabel = trim(RsLabel.Fields(0))
if trim(RsLabel.Fields("Mandatory"

) <> "" then
getLabel = ssLabel & "" & "<a name='asterisk' style='color: #990000'>" & trim(RsLabel.Fields("Mandatory"

) & "</a>"
else
getLabel = ssLabel
end if
Else
getLabel = ""
End If
RsLabel.close
End Function
%>
2. Pass variables to the report
<%@ LANGUAGE="VBSCRIPT" %>
<!-- #include FILE = "adovbs.inc" -->
<!-- #include FILE = "Crystal.asp" -->
<%
' -------------
' -- New ASP --
' -------------
reportname = "IMSReport2MCurr.rpt"
strVB = trim(Request.QueryString("VB"

)
strid = trim(Request.QueryString("strid"

)
Set session("oApp"

= Server.CreateObject("CrystalRuntime.Application"

Path = Request.ServerVariables("PATH_TRANSLATED"
While (Right(Path, 1) <> "\" And Len(Path) <> 0)
iLen = Len(Path) - 1
Path = Left(Path, iLen)
Wend
path=path&"\"&"RPTFILES"&"\"
If IsObject(session("oRpt"

) then
Set session("oRpt"

= nothing
End if
'On error resume next
Set session("oRpt"

= session("oApp"

.OpenReport(path & reportname, 1)
If Err.Number <> 0 Then
Response.Write "Always Req *****Error Occurred creating Report Object: " & Err.Description
Set Session("oRpt"

= nothing
Set Session("oApp"

= nothing
Session.Abandon
'Response.End
End If
session("oRpt"

.MorePrintEngineErrorMessages = False
session("oRpt"

.EnableParameterPrompting = False
session("oRpt"

.DiscardSavedData
Set oMainReportTable = Session("oRpt"

.Database.Tables.Item(1)
oMainReportTable.SetLogonInfo "IPPFIMS", "IPPF_IMS", CStr(Userid), CStr(Password)
strXRate = trim(Request.QueryString("XRate"

)
strCurrID = trim(Request.QueryString("Curr"

)
strlan=trim(Request.QueryString("Lan"

)
strTransYear = trim(Request.QueryString("TYear"

)
strTransType = trim(Request.QueryString("TType"

)
strEntity = trim(Request.QueryString("Entity"

)
strFundType = trim(Request.QueryString("FundType"

)
strLocalXRate = trim(Request.QueryString("strLocalXRate"

)
strReportName = trim(Request.QueryString("Title"

)
strGroupBy = trim(Request.QueryString("GroupBy"

)
'''' *****************************
'''' Assign name to label from the array
'''' *****************************
lblExpenses = trim(getLabel("IMS_RPTLBL","Expenses"

)
lblIncome = trim(getLabel("IMS_RPTLBL","Income"

)
lblHmnRec = trim(getLabel("IMS_RPTLBL","HmnRec"

)
lblOpCst = trim(getLabel("IMS_RPTLBL","OpCst"

)
lblGrants = trim(getLabel("IMS_RPTLBL","Grants"

)
lblSTotDExpen = trim(getLabel("IMS_RPTLBL","STotDExpen"

)
lblOverhdRec = trim(getLabel("IMS_RPTLBL","OverhdRec"

)
lblExpOHRec = trim(getLabel("IMS_RPTLBL","ExpOHRec"

)
lblIndCstAll = trim(getLabel("IMS_RPTLBL","IndCstAll"

)
lblTotCst = trim(getLabel("IMS_RPTLBL","TotCst"

)
lblIppf = trim(getLabel("IMS_RPTLBL","Ippf"

)
lblInt = trim(getLabel("IMS_RPTLBL","Int"

)
lblNatIncSales = trim(getLabel("IMS_RPTLBL","NatIncSales"

)
lblLocDon = trim(getLabel("IMS_RPTLBL","LocDon"

)
lblFndTrans = trim(getLabel("IMS_RPTLBL","FndTrans"

)
lblTotInc = trim(getLabel("IMS_RPTLBL","TotInc"

)
lblSurDef = trim(getLabel("IMS_RPTLBL","SurDef"

)
lblAssets = trim(getLabel("IMS_RPTLBL","Assets"

)
lblPjctNo = trim(getLabel("IMS_RPTLBL","PjctNo"

)
'Print
lblPrintDate = trim(getLabel("IMS_RPTLBL","PrintDate"

)
lblPrintTime = trim(getLabel("IMS_RPTLBL","PrintTime"

)
lblPage = trim(getLabel("IMS_RPTLBL","Page"

)
lblSubTot = trim(getLabel("IMS_RPTLBL","SubTot"

)
lblGrandTot = trim(getLabel("IMS_RPTLBL","GrandTot"

)
lblTotal = trim(getLabel("IMS_RPTLBL","Total"

)
'Header
lblFndType = trim(getLabel("IMS_RPTLBL","FndType"

)
lblCurrencyText = trim(getLabel("IMS_RPTLBL","Currency"

)
lblEntity = trim(getLabel("IMS_RPTLBL","Entity"

)
lblLedger = trim(getLabel("IMS_RPTLBL","Ledger"

)
lblTransTypePZ = trim(getLabel("IMS_RPTLBL","TransTypePZ"

)
lblCurrKExp = trim(getLabel("IMS_RPTLBL","CurrKExp"

)
'''' *****************************
'''' pass labels to Crystal
'''' *****************************
Session("oRpt"

.ParameterFields.GetItemByName("ColorPattern"

.AddCurrentValue(Cstr(strColorPattern))
Session("oRpt"

.ParameterFields.GetItemByName("PrintDate"

.AddCurrentValue(Cstr(lblPrintDate))
Session("oRpt"

.ParameterFields.GetItemByName("PrintTime"

.AddCurrentValue(Cstr(lblPrintTime))
Session("oRpt"

.ParameterFields.GetItemByName("Page"

.AddCurrentValue(Cstr(lblPage))
Session("oRpt"

.ParameterFields.GetItemByName("SubTot"

.AddCurrentValue(Cstr(lblSubTot))
Session("oRpt"

.ParameterFields.GetItemByName("GrandTot"

.AddCurrentValue(Cstr(lblGrandTot))
Session("oRpt"

.ParameterFields.GetItemByName("Total"

.AddCurrentValue(Cstr(lblTotal))
'Headers
Session("oRpt"

.ParameterFields.GetItemByName("FndType"

.AddCurrentValue(Cstr(lblFndType))
Session("oRpt"

.ParameterFields.GetItemByName("CurrencyText"

.AddCurrentValue(Cstr(lblCurrencyText))
Session("oRpt"

.ParameterFields.GetItemByName("Entity"

.AddCurrentValue(Cstr(lblEntity))
Session("oRpt"

.ParameterFields.GetItemByName("Ledger"

.AddCurrentValue(Cstr(lblLedger))
Session("oRpt"

.ParameterFields.GetItemByName("TransTypePZ"

.AddCurrentValue(Cstr(lblTransTypePZ))
Session("oRpt"

.ParameterFields.GetItemByName("Expenses"

.AddCurrentValue(Cstr(lblExpenses))
Session("oRpt"

.ParameterFields.GetItemByName("Income"

.AddCurrentValue(Cstr(lblIncome))
Session("oRpt"

.ParameterFields.GetItemByName("HmnRec"

.AddCurrentValue(Cstr(lblHmnRec))
Session("oRpt"

.ParameterFields.GetItemByName("OpCst"

.AddCurrentValue(Cstr(lblOpCst))
Session("oRpt"

.ParameterFields.GetItemByName("Grants"

.AddCurrentValue(Cstr(lblGrants))
Session("oRpt"

.ParameterFields.GetItemByName("STotDExpen"

.AddCurrentValue(Cstr(lblSTotDExpen))
Session("oRpt"

.ParameterFields.GetItemByName("OverhdRec"

.AddCurrentValue(Cstr(lblOverhdRec))
Session("oRpt"

.ParameterFields.GetItemByName("ExpOHRec"

.AddCurrentValue(Cstr(lblExpOHRec))
Session("oRpt"

.ParameterFields.GetItemByName("IndCstAll"

.AddCurrentValue(Cstr(lblIndCstAll))
Session("oRpt"

.ParameterFields.GetItemByName("TotCst"

.AddCurrentValue(Cstr(lblTotCst))
Session("oRpt"

.ParameterFields.GetItemByName("Ippf"

.AddCurrentValue(Cstr(lblIppf))
Session("oRpt"

.ParameterFields.GetItemByName("Int"

.AddCurrentValue(Cstr(lblInt))
Session("oRpt"

.ParameterFields.GetItemByName("NatIncSales"

.AddCurrentValue(Cstr(lblNatIncSales))
Session("oRpt"

.ParameterFields.GetItemByName("LocDon"

.AddCurrentValue(Cstr(lblLocDon))
Session("oRpt"

.ParameterFields.GetItemByName("TotInc"

.AddCurrentValue(Cstr(lblTotInc))
Session("oRpt"

.ParameterFields.GetItemByName("FndTrans"

.AddCurrentValue(Cstr(lblFndTrans))
Session("oRpt"

.ParameterFields.GetItemByName("SurDef"

.AddCurrentValue(Cstr(lblSurDef))
'Session("oRpt"

.ParameterFields.GetItemByName("Assets"

.AddCurrentValue(Cstr(lblAssets))
Session("oRpt"

.ParameterFields.GetItemByName("PjctNo"

.AddCurrentValue(Cstr(lblPjctNo))
Session("oRpt"

.ParameterFields.GetItemByName("CurrKExp"

.AddCurrentValue(CStr(lblCurrKExp))
'strCurrID = "BRL"
'strlan= "Lang1"
'strTransYear = "2002"
'strEntity ="408"
'strReportName = "Test"
'strGroupBy = "U"
'strFundtypeFrom = "A"
'strFundtypeTo = "Z"
'strTransTypeFrom = "P"
'strTransTypeTo = "P"
Session("oRpt"

.ParameterFields.GetItemByName("LocalXRate"

.AddCurrentValue(cstr(strXRate))
Session("oRpt"

.ParameterFields.GetItemByName("Currency"

.AddCurrentValue(Cstr(strCurrID))
Session("oRpt"

.ParameterFields.GetItemByName("ReportName"

.AddCurrentValue(Cstr(strReportName))
Session("oRpt"

.ParameterFields.GetItemByName("CountryName"

.AddCurrentValue(Cstr(strCountry))
Session("oRpt"

.ParameterFields.GetItemByName("FundSelected"

.AddCurrentValue(Cstr(strFundSelected))
Session("oRpt"

.ParameterFields.GetItemByName("EntityName"

.AddCurrentValue(Cstr(strEntityName))
Session("oRpt"

.ParameterFields.GetItemByName("@lang"

.AddCurrentValue(Cstr(strlan))
Session("oRpt"

.ParameterFields.GetItemByName("@GroupBy"

.AddCurrentValue(CStr(strGroupBy))
Session("oRpt"

.ParameterFields.GetItemByName("@TransYear"

.AddCurrentValue(Cstr(strTransYear))
Session("oRpt"

.ParameterFields.GetItemByName("@Entity"

.AddCurrentValue(CStr(strEntity))
Session("oRpt"

.ParameterFields.GetItemByName("@TransTypeFrom"

.AddCurrentValue(CStr(strTransTypeFrom))
Session("oRpt"

.ParameterFields.GetItemByName("@TransTypeTo"

.AddCurrentValue(CStr(strTransTypeTo))
Session("oRpt"

.ParameterFields.GetItemByName("@FundtypeFrom"

.AddCurrentValue(CStr(strFundtypeFrom))
Session("oRpt"

.ParameterFields.GetItemByName("@FundtypeTo"

.AddCurrentValue(CStr(strFundtypeTo))
'On Error Resume Next
session("oRpt"

.ReadRecords
If Err.Number <> 0 Then
Response.Write "Error Occurred Reading Records: " & Err.Description
Set Session("oRpt"

= nothing
Set Session("oApp"

= nothing
Session.Abandon
Else
If IsObject(session("oPageEngine"

) Then
set session("oPageEngine"

= nothing
End If
set session("oPageEngine"

= session("oRpt"

.PageEngine
End If
if strVB = "1" then%>
<!-- #include file="SmartViewerActiveX.asp" -->
<%else%>
<!-- #include file="SmartViewerJAVA.asp" -->
<%end if%>