Cannot Assign tfieldlist to tstringlist
Hi,
I am migrating application from delphi 4 to delphi 10.4.We are using report builder in our application and template of reports are stored in database. When we are tring to open report giving this error "Cannot Assign Tfieldlist to Tstringlist" .When we look into the column of template and we have found that the error coming after addition of TppDBCalc object which is in TppSummaryBand of report as shown below.
object ppSummaryBand1: TppSummaryBand
mmBottomOffset = 0
mmHeight = 36513
mmPrintPosition = 0
object ppLabel7: TppLabel
UserName = 'Label7'
Alignment = taRightJustify
Caption = 'Nombre total de rapports transcrits : '
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Name = 'Arial'
Font.Size = 10
Font.Style = [fsBold]
Transparent = True
mmHeight = 4233
mmLeft = 794
mmTop = 11113
mmWidth = 61119
BandType = 7
end
object ppDBCalc1: TppDBCalc
UserName = 'DBCalc1'
Alignment = taRightJustify
DataField = 'COUNT(RT.NO_REQUETE)'
DataPipeline = plListeDemandeeMemoire
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Name = 'Arial'
Font.Size = 10
Font.Style = [fsBold]
Transparent = True
mmHeight = 4233
mmLeft = 61913
mmTop = 11113
mmWidth = 18256
BandType = 7
end
end
I am migrating application from delphi 4 to delphi 10.4.We are using report builder in our application and template of reports are stored in database. When we are tring to open report giving this error "Cannot Assign Tfieldlist to Tstringlist" .When we look into the column of template and we have found that the error coming after addition of TppDBCalc object which is in TppSummaryBand of report as shown below.
object ppSummaryBand1: TppSummaryBand
mmBottomOffset = 0
mmHeight = 36513
mmPrintPosition = 0
object ppLabel7: TppLabel
UserName = 'Label7'
Alignment = taRightJustify
Caption = 'Nombre total de rapports transcrits : '
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Name = 'Arial'
Font.Size = 10
Font.Style = [fsBold]
Transparent = True
mmHeight = 4233
mmLeft = 794
mmTop = 11113
mmWidth = 61119
BandType = 7
end
object ppDBCalc1: TppDBCalc
UserName = 'DBCalc1'
Alignment = taRightJustify
DataField = 'COUNT(RT.NO_REQUETE)'
DataPipeline = plListeDemandeeMemoire
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Name = 'Arial'
Font.Size = 10
Font.Style = [fsBold]
Transparent = True
mmHeight = 4233
mmLeft = 61913
mmTop = 11113
mmWidth = 18256
BandType = 7
end
end
Comments
If you trace into the RB source, where is the error occurring? If you save this template to file and try to load it manually, do you get the same issue? If so, please put together a simple application that demonstrates this problem (perhaps with some sample data) and send it to us in .zip format so we can research what is happening.
It sounds like your templates could be well over 20 years old and while we do our best to keep ReportBuilder backward compatible, this is quite a jump. Some of your templates may require a manual update or recreation.
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com
We have looked into this further and found that after addition of these two properties i.e, Datafield and DBCalcType (as marked in Bold) causing the issue. If we remove these two properties from report, our report is able to open and it showing blank.
object ppDBCalc1: TppDBCalc
UserName = 'DBCalc1'
Alignment = taRightJustify
DataField = 'COUNT(RT.NO_REQUETE)'
DBCalcType = dcCount
DataPipeline = plListeDemandeeMemoire
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Name = 'Arial'
Font.Size = 10
Font.Style = [fsBold]
Transparent = True
mmHeight = 4233
mmLeft = 61913
mmTop = 11113
mmWidth = 18256
BandType = 7
end
As a test I created a calculated field Count(CustNo) using our built-in demo data. I then placed a DBCalc on a report and set its field to the calculated field. This of course was the field alias that is automatically created for each calculated field (Count_CustNo).
I then saved the template as text and manually altered the DataField property of the DBCalc to 'Count(CustNo'. I then loaded the template successfully without any errors.
1. Are you certain there is a calculated field in your dataset named COUNT(RT.NO_REQUETE)?
2. It seems redundant to perform a count on a COUNT calculated field. Have you tried setting the datafield to the original field? DataField = 'RT.NO_REQUETE'.
3. Unfortunately this may have been a bug in the earlier version that was fixed. The DataField property should either have a calculated field alias as its value or simply the DB field name.
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com
Here is the code for field:
object TppField
FieldAlias = 'COUNT(RT.NO_REQUETE)'
FieldName = 'COUNT(RT.NO_REQUETE)'
FieldLength = 0
DataType = dtDouble
DisplayWidth = 10
Position = 2
end
And below is the field code which getting after tdasql:
object TdaSQL
DatabaseName = 'DBname'
DatabaseType = dtOracle
DataPipelineName = 'plListeDemandee'
Description = 'ListeDemandee'
EditSQLAsText = True
SQLText.Strings = (
' SELECT E.Nom_prenom "Secr'#233'taire" ,X."Sum(RT.Lettre)",X."COUNT(RT.No_REQUETE)",' +
' e.poincon_license '
' ) X)
SQLType = sqSQL1
object TdaField
Alias = 'COUNT(RT.No_REQUETE)'
DataType = dtDouble
FieldAlias = 'COUNT(RT.No_REQUETE)'
FieldName = 'COUNT(RT.No_REQUETE)'
SQLFieldName = 'COUNT(RT.No_REQUETE)'
end
Please try manually altering the DBCalc DataField property inside the template to the DB field rather than a calculated field and see if that solves the issue.
object ppDBCalc1: TppDBCalc
UserName = 'DBCalc1'
Alignment = taRightJustify
DataField = 'RT.NO_REQUETE'
...
As I mentioned before, it is redundant to perform a count calculation on a COUNT calculated field. Another option would be to use a DBText assigned to the COUNT field.
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com