- Aron Cox
- PowerBuilder
- Thursday, 29 October 2020 11:27 AM UTC
PowerBuilder 2017 R2 Build 1769
Blob size = Len(lblob)
We have a window which retrieves multiple reports in one go and then using a single datawindow allows the user to switch between the reports as required. We do this by saving each report into an array of blobs using GetFullState, switchign them back in tp the datawindow using SetFullState. This has been working fine for years.
A customer seems to have reached a blob size limitation on one of the reports. GetFullState returns the correct number of rows, but the blob has a length of 0, using it to do a SetFullState returns -1 because, of course, the blob has a length of 0.
I tried removing rows until it worked, and it seems as long as the blob size is less than 100,000,000 it works but when it goes over it stops working.
So,
* Anyone know if this is a max size for GetItemString?
* If it is, then is there a way to change it?
* Anything else I can do to save a datawindow and reshow it other than having invisible datawindows and showing them when applicable. The formatting can be chaged on the fly, and so needs to be part of the save, not just the rows. I assume dw_2 = dw_1 doesn't copy dw_1 but just points to it?
Here's my test code and results. I am testing by using RowsCopy to copy the data to a temporary datastore, then doing a GetFullState, and logging the results
lds.Reset()
ll_ret = adw.RowsCopy(1, 40000, Primary!, lds, 1, Primary!)
f_pblog("w_rep_client_statement_old", location, " Tried again using RowsCopy with 40000 rows, rc = " + String(ll_ret))
f_pblog("w_rep_client_statement_old", location, " Rows in lds = " + String(lds.RowCount()))
lblob = lblob_null
ll_ret = lds.GetFullState(lblob)
f_pblog("w_rep_client_statement_old", location, " GetFullState rc = " + String(ll_ret))
f_pblog("w_rep_client_statement_old", location, " Blob extracted from datastore has a length of " + String(Len((lblob))))
lds.Reset()
ll_ret = adw.RowsCopy(1, 50000, Primary!, lds, 1, Primary!)
f_pblog("w_rep_client_statement_old", location, " Tried again using RowsCopy with 50000 rows, rc = " + String(ll_ret))
f_pblog("w_rep_client_statement_old", location, " Rows in lds = " + String(lds.RowCount()))
lblob = lblob_null
ll_ret = lds.GetFullState(lblob)
f_pblog("w_rep_client_statement_old", location, " GetFullState rc = " + String(ll_ret))
f_pblog("w_rep_client_statement_old", location, " Blob extracted from datastore has a length of " + String(Len((lblob))))
Results:
Works fine with 40,000 rows and results in a blob size of just under 100,000,000
Tried again using RowsCopy with 40000 rows, rc = 1
Rows in lds = 40000
GetFullState rc = 40000
Blob extracted from datastore has a length of 96086718
Fails with 50,000 rows, get GetFullState does return the correct row count, just a blob size of 0
Tried again using RowsCopy with 50000 rows, rc = 1
Rows in lds = 50000
GetFullState rc = 50000
Blob extracted from datastore has a length of 0
Any thoughts are welcome! Thank you!
Find Questions by Tag
Helpful?
If a reply or comment is helpful for you, please don’t hesitate to click the Helpful button. This action is further confirmation of their invaluable contribution to the Appeon Community.