Groups > dBase > dBase bug reports > Re: Text limit




Text limit

Text limit
Thu, 24 Jan 2008 19:03:14 +000
Hi

I seem to have hit a limit of 32k bytes in a text control on a report. 
   I can't see that documented anywhere.   Is it real, or is it me?


Post Reply
Re: Text limit
Sun, 27 Jan 2008 23:27:40 -050
Hi Bruce,

> I seem to have hit a limit of 32k bytes in a text control on a report. I 
> can't see that documented anywhere.   Is it real, or is it me?

I've done some investigating and, so far, I have not found any hard coded 
limit to the size of a Text object's
value property.  Internally, dBASE is just using a dBASE variable with 
character data stored to it.
It should have the same capacity as any other dBASE character string 
variable - which should
only be limited by available memory (or 2^32 bytes) - whichever comes first.

Any idea if your computer was short on available RAM when you tested your 
report?


- Marty -

Martin Kay
dataBased Intelligence, Inc.

Post Reply
Re: Text limit
Mon, 28 Jan 2008 15:38:34 +000
Marty Kay wrote:

> I've done some investigating and, so far, I have not found any hard coded 
> limit to the size of a Text object's
> value property.  Internally, dBASE is just using a dBASE variable with 
> character data stored to it.

> Any idea if your computer was short on available RAM when you tested your 
> report?

No reason to think so.    The aim of the exercise was to print the 
contents of an editor control.    The process I followed was to output 
the .value to a text file, then store the contents of the text file (in 
fact, the contents of a series of text files, concatenated) to a memo 
field on a single-row table, then to print that memo field to a text 
control on a report.

It has worked fine for years with less data.   But in a new project I 
was sending an unusually large editor control .value (> 50kb) to the 
process.    I found the report output (which stretched over several 
pages of report output) to have been truncated, and crude multiplication 
pointed to 32kb.    The memo field was complete so I blamed the text 
control.

Does that suggest anything else to you, before I do more experiments?


Bruce
Post Reply
Re: Text limit
Mon, 28 Jan 2008 22:46:39 +000
Marty Kay wrote:

>> I seem to have hit a limit of 32k bytes in a text control on a report.
I 
>> can't see that documented anywhere.   Is it real, or is it me?
> 
> I've done some investigating and, so far, I have not found any hard coded 
> limit to the size of a Text object's
> value property.  Internally, dBASE is just using a dBASE variable with 
> character data stored to it.
> It should have the same capacity as any other dBASE character string 
> variable - which should
> only be limited by available memory (or 2^32 bytes) - whichever comes
first.

Here's a turnkey that suggests the capacity is about 29,400 chars.


Bruce



***************

* tmemo.rep
* Shows the limit of a report text control to be about 29400 chars.


private t
t = "testmemo.dbf"
if file(t)
    delete file (t)
endif
create table "&t." (header char(50), memo1 blob)
q = new query([select * from testmemo"])
q.rowset.beginappend()
q.rowset.fields["memo1"].value = ""
local s, r
s = 0
do while s < 500
    s ++
    q.rowset.fields["memo1"].value = ;
       q.rowset.fields["memo1"].value + str(s*80, 7) + "  "
;
       + repl("1234567890 ", 7) + chr(13)
enddo
q.rowset.save()
q.active = false

s = 0
do while s < 10
    s ++
    local r
    r = new tmemoReport()
    r.startpage := s
    r.render()
    r.reportViewer.form.text = "Page " + s
    r.reportViewer.form.width = 1000
enddo

return

** END HEADER -- do not remove this line
//
// Generated on 28/01/2008
//
local r
r = new tmemoReport()
r.render()

class tmemoReport of REPORT
    with (this)
       autoSort = false
    endwith

    this.QUERY1 = new QUERY()
    this.QUERY1.parent = this
    with (this.QUERY1)
       left = 8610.0
       top = 495.0
       sql = "select * from testmemo"
       active = true
    endwith

    with (this.printer)
       duplex = 1	// None
       orientation = 1	// Portrait
       paperSource = 15
       paperSize = 9
       resolution = 0	// Default
       color = 1	// Monochrome
       trueTypeFonts = 2	// Download
    endwith

    this.PAGETEMPLATE1 = new PAGETEMPLATE(this)
    with (this.PAGETEMPLATE1)
       height = 16837.0
       width = 11905.0
       marginTop = 930.0
       marginLeft = 1095.0
       marginBottom = 1230.0
       marginRight = 1065.0
       gridLineWidth = 0
    endwith

    this.PAGETEMPLATE1.STREAMFRAME1 = ;
       new STREAMFRAME(this.PAGETEMPLATE1)
    with (this.PAGETEMPLATE1.STREAMFRAME1)
       height = 11592.0
       left = 360.0
       top = 1365.0
       width = 9360.0
       form.STREAMFRAME1 = form.pagetemplate1.streamframe1
    endwith

    this.STREAMSOURCE1 = new STREAMSOURCE(this)
    with (this.STREAMSOURCE1.detailBand)
       height = 250.0
    endwith

    with (this.reportGroup.headerBand)
       height = 300.0
    endwith

    this.reportGroup.headerBand.TEXTMEMO11 = ;
       new TEXT(this.reportGroup.headerBand)
    with (this.reportGroup.headerBand.TEXTMEMO11)
       height = 300.0
       left = 60.0
       top = 360.0
       width = 9135.0
       variableHeight = true
       prefixEnable = false
       text = {||this.form.query1.rowset.fields["memo1"].value}
    endwith

    this.reportGroup.headerBand.TEXTHEADER1 = ;
       new TEXT(this.reportGroup.headerBand)
    with (this.reportGroup.headerBand.TEXTHEADER1)
       height = 300.0
       left = 75.0
       top = 30.0
       width = 4680.0
       variableHeight = true
       prefixEnable = false
       text = {||this.form.query1.rowset.fields["header"].value}
    endwith

    with (this.reportGroup.footerBand)
       height = 250.0
    endwith

    this.firstPageTemplate = this.form.pagetemplate1
    this.form.pagetemplate1.nextPageTemplate = this.form.pagetemplate1
    this.form.pagetemplate1.streamframe1.streamSource = ;
       this.form.streamsource1
    this.form.streamsource1.rowset = this.form.query1.rowset

endclass


Post Reply
about | contact