Home DADE
New Blog Posts: Merging Reports - Part 1 and Part 2

DataDisctionary problem

edited November 2003 in DADE

There amiss about the UseDataDictionary settings in 7.03. Have a custom
dictionary builder which sets the field alias to consist of +
'-' + so that users can easily differentiate between the same
field name in different tables (hey, why isn't this standard?).

Setting the UseDataDictionary flag at design time contributed to a
significant report loading an overhead in 6.03 and still seems to in 7.03,
so I used to set it dynamically in the DesignerOnTabChange event if the
user went to the Data tab. However, even though inspecting the DataSetting
at runtime shows UseDataDictionary as true (ticked) when I look at my
list of fields in the Query Designer, they are not the Dictionary ones.

OK, so I live with the loading overhead and set UseDataDictionary at
design time. Now I open a report and everything works fine. I close the
report, open another one and its not using the dictionary, only this time
its because the UseDataDictionary has somehow been set to False! By who?

Lastly, on a slightly different point, I have added lots of new fields to
my tables and rebuilt the dictionary tables. I now want to add them to the
report. But sometimes the Query Designer makes them available in the field
list and sometimes it doesn't. If the latter then the only solution is to
remove the table I want refreshed and add it back again. Of course if the
table and other tables linked off it then these need adding again as well
:-(


Any ideas?

All the best ....

Paul Toms - Navigator Systems


#############################################################

Navigator Systems Ltd,
Network House,9 Rivers Street Place,
Julian Road, Bath, BA1 2RS,UK

Main Tel: +44 (0)7000 NAVSYS (628797)
Fax: +44 (0)7000 NAVFAX (628329)
Support Tel: +44 (0)7000 NAVTEC (628832)

E-mail Mailto:pault@navigator.co.uk

Comments

  • edited November 2003

    OK, I discovered one issue which is my fault: I had some old code turning
    off UseDataDictionary in the OnHide event for the designer, which is why
    it was losing its design time setting. Sorry about that one. However, my
    other points still stand, namely:

    1. Why is there so much overhead when using a dictionary. I have a 135kb
    report (in a database) which takes 25 secs to load when the
    UseDataDictionary is on, as opposed to about 4 sec when it is off
    2. Why is my old technique for setting it a runtime to get over the above
    no longer working?
    3. Why are not all the new fields in tables visible in the query designer
    until to remove a table and put it back? For some tables it works fine???


    Paul


    In article ,
  • edited November 2003

    1. The DataDictionary is optimized. However there will be initial overhead
    to open the datapipelines and to load the entries into the meta data cache.

    From tracing the code, it looks like the call to ReportExplorer.Execute
    results in the datapipelines being opened. To delay this opening the
    datasets, you could set DataPipeline.OpenDataSource to false. But then you
    need to add code to open the datapipelines at some later time.

    2. Prior to setting UseDataDictionary at run-time try calling

    uses
    daMetaDataManager;

    gMetaDataManager.Clear


    I think doing the above may solve your other two problems.


    --
    Nard Moseley
    Digital Metaphors
    http://www.digital-metaphors.com

    Best regards,

    Nard Moseley
    Digital Metaphors
    www.digital-metaphors.com
  • edited November 2003
    In article <3fb11e40$1@dm500.>, support@digital-metaphors.com (Nard
  • edited November 2003
    Or am I missing something obvious here, namely can I just write some code
    to force the Report Designer to display the field alias as TableName +
    FieldName (in the Query Designer and Data View) without using a dictionary
    at all?

    Paul


    In article ,
  • edited November 2003

    The table and field information will be loaded from the dataset to an
    in-memory cache, the first time it is needed. Thereafter the cache will be
    used - so it should be fast.

    To modify the source, you probably want to check out ppDsgnDB.pas. The
    DataDictionary.CreateFields and GetTableNames woudl be a good place to start
    looking.


    --
    Nard Moseley
    Digital Metaphors
    http://www.digital-metaphors.com

    Best regards,

    Nard Moseley
    Digital Metaphors
    www.digital-metaphors.com
  • edited November 2003


    Check out daQueryDataView.pas. The method TdaQueryDataView.CreateField




    --
    Nard Moseley
    Digital Metaphors
    http://www.digital-metaphors.com

    Best regards,

    Nard Moseley
    Digital Metaphors
    www.digital-metaphors.com
This discussion has been closed.