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

InterBase & Int64

edited November 2002 in End User
I've put together an End-User App using InterBase 6. This app is converted
from using a Paradox backend, so it did work and I know how it worked. I've
gotten to the stage where I want to generate my DataDictionary tables. The
DataDictionary component chokes when it's generating the Fields table. It
cannot handle Int64 fields and error reports that it can only handle SQL
Dialect 1. Well, this is Dialect 3 (available for over a year now). How do I
correct this. I see no properties anywhere that I can select Dialect 3 and
I'm concerned about not having any SessionType for InterBase. I'm using
IBObject's TIBOQuery to connect.

--
Steven S. Weston (sweston@westonmuir.com)
Weston & Muir (http://www.westonmuir.com)
The Banking Software Specialists
800-487-5655
760-752-7812

Comments

  • edited November 2002
    We haven't fully tested it and we don't explicitly support dialect 3. Thanks
    for the heads up. We'll look into this.


    Cheers,

    Jim Bennett
    Digital Metaphors

  • edited November 2002
    Hmm... I presume that your message is that RBuilder does not support
    InterBase Dialect 3 for End-User Reporting. Therefore, I'm SOL and will have
    to drop this feature that we have offered end-users for about five years.
    Sadly, they will still want end-user reporting and will have to buy a
    solution from another vendor.

    --
    Steven S. Weston (sweston@westonmuir.com)
    Weston & Muir (http://www.westonmuir.com)
    The Banking Software Specialists
    800-487-5655
    760-752-7812
  • edited November 2002
    The error you are running into sounds like the client side database object
    on your form is not configured for dialect 3. There is a property called
    SQLDialect that you can set to 3 on th TIBODatabase.

    We support Interbase. All I was trying to say is that we haven't tested
    every possible scenario and that we need to look into it. No other
    reporting tool is even in the same league as ReportBuilder.

    I can run our end user IB example using dialect 3. Works fine. However, we
    haven't researched using an Int64 type column. So I created one. I modified
    the sample Employee.gdb database with a new Sales table with a column that
    was saved as Int64 in Interbase 6. When I ran the data dictionary it worked
    fine generating the fields.


    Cheers,

    Jim Bennett
    Digital Metaphors

  • edited November 2002
    I am using TIBConnection for which I have set the SQLDialect property to 3.
    I'm using a TIBOQuery component for tblField as per the tutorial. Both its
    DatabaseName and IB_Connection properties are set to the TIBConnection
    component. The connection is active; tblField is Active. So, I do have a
    connection to the database. DataSource and Pipeline components are correctly
    linked. The DataDictionary component is correctly linked to the Table, Field
    and Join pipelines; all FieldNames are selected and correct.

    When I Generate the Fields table I get the following error:
    Unable to open table: .
    Error: General SQL Error.
    Data type unknown
    Client SQL dialect 1 does not support reference to 64-bit numeric datatype

    This message repeats for every table that has an Int64 type datafield.

    I also get the same error for tables that have the DATE datatype.

    I'm using D6 and RB 6.03. If you got it to work, I should be able to do so
    also. So, what do I need to change or do?
  • edited November 2002
    The error is not one that we raise, but is raised from a data access
    component.

    I tesed with IBO 4.2. I opened the IBO end user demo, connected it to my
    database, and set the SQLDialoect property to 3. Installed the rbIBO delphi
    design time DADE plugin and ran the data dictionary. I generated using my
    Int64 field in my new table. Ran the end user project and it worked.

    The only thing that is different from what I can tell is that I'm using RB
    7.

    I also ran the IBX demo out of the box using Dialect 3.

    Today's successful tests include the following components:

    D6.02
    RB 7.0
    IB 6.03 (using dialect 3)
    IBX 6.03 and IBO 4.2 (using dialect 3)


    Cheers,

    Jim Bennett
    Digital Metaphors

  • edited November 2002
    If you can reproduce the problem in RB 7, then tell me exactly what I need
    to do to reproduce the problem or send me a simple working example I can run
    or even a simple interbase database which has this field in it. Perhaps I
    don't have the database configured the same way as you using the Int64 field
    definition. Send a demo to support@digital-metaphors.com


    Cheers,

    Jim Bennett
    Digital Metaphors

  • edited November 2002
    I was hoping to get my app finished without going through any more component
    upgrades, like RB 7. It's all a matter of change management, not money. But,
    it looks like I must do RB 7 nevertheless -- I wish I had taken your advance
    upgrade offer last September.
  • edited November 2002
    You could test with our demo version of RB 7 before you pay for the upgrade
    to make sure that it will fix the problem.


    Cheers,

    Jim Bennett
    Digital Metaphors

  • edited November 2002
    The RB7 demo version has created a snarl. TppViewer(Viewer).ZoomSetting :=
    zs100Percent; produces an Undeclared identifier error on build. ppViewR is
    declared.

    DataDictionary generate still produces the errors for Int64 and DATE
    fieldtypes. What's the declaration in the source code for the DD unit? Does
    it include enumerated types for these datatypes. My source for 6.03 did not.
  • edited December 2002
    You'll need to add ppTypes to the uses clause. This changed form RB 6.03 to
    RB 7.


    Cheers,

    Jim Bennett
    Digital Metaphors

  • edited December 2002
    ppType has been added to produce a clean build. BTW, this is why developers
    do not like to "upgrade" to new versions -- over 20 modules has to be
    modified for RB7 to work.

    MORE IMPORTANTLY:
    A DataDictionary generate still produces the errors for Int64 and DATE
    fieldtypes. What's the declaration in the source code for the DD unit? Does
    it include enumerated types for these datatypes? My source for 6.03 did not.

    I'd like to clear this problem soon. We have been going around and around
    for week now without any resolution. Does RB support SQL Dialect 3, or
    not??? Based upon my results, it does not.
  • edited December 2002
    We haven't done full QA testing on dialect 3 for Interbase. I did some
    preliminary testing and it does work correctly here. I even created new
    tables and field types for dialect 3 issues and tried to reproduce your
    problem. I used both IBX and IBO to connect and they both worked. We need
    to be able to reproduce the problem here to see why you can't get it to
    work. This is why I asked for a demo project that shows the error when I
    run the data dictionary. I have not been able to reproduce the problem on
    my machine, but we haven't performed further testing with different
    configurations to perform more QA. It seems to me that dialect 3 should
    work, but we don't have the QA to prove that it does work. If you could
    provide a sample database (or SQL script to create/populate the data tables
    and end user RB tables) created in dialect 3 and a simple end user project
    then I should be able to reproduce the problem on my machine in order to see
    what is happening and to fix it. Send it to support@digital-metaphors.com


    Cheers,

    Jim Bennett
    Digital Metaphors

  • edited December 2002
    Jim,

    Have you had a chance to work with the project and db that I sent?
  • edited December 2002
    Yes. I ran your project as you sent it to me. I got the error. THen I saw
    that the exception was raised from the BDE. But that would be bad, since you
    have an interbase database and IBO connectivity. So, once I changed the
    DataDictionary BuilderSettings DtaabaseType from BDESession to IBOSession it
    worked. You need to install the IBO DADE plugin package to enable this as
    an option in the object inspector for this property. The packages is
    located in the RBuilder installation in the end user demos directory for
    IBO, the same directory where daIBO.pas is located. That should fix the
    problem.


    Cheers,

    Jim Bennett
    Digital Metaphors

  • edited December 2002
    I'm sorry, Jim, but I'm going to need better instructions than that. When I
    try to compile and install the rblIBO76.dpk, I get an error regarding
    daIBO.dcu not found. So I deleted that item and added it back to resolve the
    Where's Waldo problem. Then I get an error about IBO40XRT not being
    available although that package has been installed (and can't be installed
    again). I also see three versions of daIBO: IBO's version a 28KB and two
    from RB at 20KB. Can you provide some course of action here?
  • edited December 2002
    Use the daIBO.pas that ships with RB. This should be located in
    RBuilder\Demos\EndUserDatabases\Interbase\IBObjects\daIBO.pas. Make sure
    this and the IBO bpls and source are in the build path. Then it should work.
    I have it installed here just fine.

    Remove the other daIBO.* files from your system. They won't be necessary.
    Make sure that this daIBO unit is in the library path of the project. Select
    from the Delphi menu Tools | Environment Options | Library | Library Path to
    point it at that directory, or copy the daIBO.pas to you current build
    library path for RB, such as the default RBuilder\Lib. This way the correct
    daIBO gets pulled in. The daIBO that installs with IBO, is for an older
    version of RB and is not compatible. Is the directory where the IBO bpl's
    are located in the library path. I believe that the Delphi package compiler
    needs that info to link up to the correct bpls for IBO40WRT. You can check
    to see where Delphi thinks they are located from the Component | Install
    Packages menu when you select one from the list. The full path should be
    shown below the list box. I'm gonna guess and say they are in the default
    Projects\BPL directory if you didn't change the output paths when you built
    the packages for the installation of IBO packages into Delphi. IMO, this is
    not a good idea to place the bpls in this directory, but you can point your
    library path to this directory to link in those IBO bpls to make it easy on
    yourself. It shoudl compile then. I would check to make sure you don't have
    conflicting bpls in there for RB or your other components. Building bpls
    and dcps to Projects\BPL is pretty much a corrupt build waiting to happen,
    from my experience. I always like to build to a nice clean directory
    everytime I build a package, just to be safe. When I first started working
    in Delphi, I always had to fight with removing Projects\BPL from my build
    path because I built everything in there and then sometimes different
    versions of bpls got mixed together, I ran into very strange problems, I
    learned my lesson and always build packages controlling the output
    directory.

    Cheers,

    Jim Bennett
    Digital Metaphors

  • edited December 2002
    Jim,

    Perhaps RB is not using the current version of IBObjects? For example, daIBO
    (from your eval. version) has a uses IBDataset. The current module name is
    IBODataset. I made the change in daIBO.

    But, then I get the error "Never-build pakage 'IBO40XRT' must be recompiled"
    That is in my build path, but there were some version changes here, too.
    Your last message mentions IBO40WRT, but that dcp is not listed as required
    in the rbIBO76.dpk.

    Note also that IB uses compiler suffixes now (i.e., IBO40XRT_D6). I can make
    that change in the dpk, but do I need the WRT package as well as the XRT and
    CRT packages listed in the dpk?

    I'm going to shortcut some of these questions. I replaced IBO40XRT and ..CRT
    with ..XRT_D6 and ..CRT_D6. No go. I added ..WRT_D6. No go. First error is
    "Method 'SetDatabaseName' not found in base class"

    I'd like to ask RB to test this dpk with the current version of IBO and D6.
    It certainly does not work for me here. All my paths, libs, builds searches
    and locations are good.

    I started this thread by mentioning that third-party tool version changes
    are a major headache for commercial developers. This is a perfect example of
    why we feel this way and are loath to upgrade/update for any reason. I track
    this and find that it costs us nearly 10% of productive time over a year --
    more than a man-month!
  • edited December 2002
    I'm running IBO 4.2 (Version 4.2.Ha dated 4/22/2002) in Delphi 6.02 and RB
    7. I have Interbase 6.0. I also have IBX 6.03 installed.

    IBO has no installation exe. You have to build the packages manually. This
    isn't very much fun. So, let's take IBO out of the equation so you can see
    Dialect 3 working with RB 7. The goal here is to run the Data Dictionary at
    Delphi design time. Let's try IBX. I have IBX 6.03 (the latest) installed.
    Here's what I did:

    1. Verified my environment configuration by checking that I had the
    rbIBE76.bpl installed in the Windows System32 directory of my Win2K machine
    and that it was checked in the Delphi Component | Install Packages list and
    had the correct path to this bpl.

    2. Open the IB Express end user project in
    RBuilder\Demos\EndUserDatabases\Interbase\IB Express. The reason is because
    the rbIBE76 packages is installed automatically when you install RB 7 so
    this should be painless as possible to get working.

    3. Change the IBdatabase to point to the IconProd.gdb.

    4. Set the SQLDialect property to 3 on the IBDatabase component.

    4. Verified the DataDictionary.BuilderSettings used the IBDatabase1 on the
    form and was set to use the IBXSession.

    5. Ran the DataDictionary and it generated the Tables and Fields without
    problems.

    Once this works, we know that RB can support Interbase Dialect 3 and have
    solved the problem where the session wasn't set on the DataDictionary.

    Now, we can look at IBO.

    You will want to check your machine for bpls and dcps for previous versions
    of IBO and remove them first. Make sure IBO stills runs without RB.

    I ran your demo which you sent me with the rbIBO76 package installed. It
    installe dan dworked without error. I guess when I installed IBO, because
    there was no install exe, I rebuilt all of the packages in my "installation"
    of the IBO 4.2 unzipped directory. This is how I ended up with a
    IBO40CDT.bpl. IBO just does not have an installation exe, which doesn't
    help this situation. The IBO download that I have doesn't have a
    IBO40CDT_D6.dpk, just the IBO40CDT_D6.bpl. I do have a IB40CDT.dpk and
    IBO40CDT.bpl because I compiled it. All of the packages in my Delphi
    installed components use the _D6 postfix, because those bpls are built for
    the IBO zip file. All of the dcp's I have are not post fixed and are in the
    IBO 4.2 unzipped directory (yes that is the name of my installation
    directory, IIRC that is the default unzip directory). I searched my hard
    drive and I do not have a IBO40CDT_D6.dpk. Only the bpl is distributed and
    the dcp is not distributed. This is why we chose to use the non-postfixed
    IBO packages in our requires clause. IBO is installed and working on my
    machine, but I'm uninstalling IBO right now and starting from scratch to see
    if there are any issues whih I forgot about when I installed IBO originally.
    We tested the IBO plugin before release of RB 7 on multiple machines and it
    worked just fine. The date on the proper daIBO.pas should be 7/29/2002.

    Let me know if IBX works for you in the sample project you have. The bottom
    line is that RB works with IB Dialect 3 in all of the tests we have
    performed on our machines up to this point using IBO 4.2.Ha and IBX 6.03.

    Cheers,

    Jim Bennett
    Digital Metaphors

  • edited December 2002
    Jim,

    This merry-go-round must end. The current release of IB is 4.2 i (there are
    sub-releases, but I am using 4.2 i). I'm using D6. When I try to compile
    rbIBO76.dpk, I get compiler errors from daIBO:

    Line 71: Method 'SetDatabaseName' not found in base class.
    Line 366: Undeclared identifier: 'SetDatabaseName'.
    Line 444: Undeclared identifier: 'DatabaseName'.

    I've had erased IBO and completely reinstalled it. All previous bpl, dcu,
    etc. were removed prior to installation.

    The fact as I see it is that IBO has made changes in their class structure
    that render daIBO no longer compilable. Would someone there please test this
    using IB release I? Release Ha is no longer a valid release.
  • edited December 2002
    I'm running IBO 4.2 I. Your version of IBO 4.2 Ha is no longer available and
    is superceded by my version. IBO had to make module and class changes
    because D7 hijacked the ibo prefix. This is why the current version of
    rbIBO76 does not compile anymore. It doesn't work. It needs to be changed.

    Thank you for your description of using IBX. We don't have IBX components
    installed. We don't use IBX. We are not interested in using IBX.

    Proving that RB works with Dialect 3 and IBX may be interesting to some, but
    is of no interest to us because we don't use IBX. We use IBO.

    This situation is a business problem to us. If we can't get the
    DataDictionary to function with IBO, then we must drop our support for
    End-User Reporting in our app. We don't want to do that. If RB cannot fully
    support End-User Reporting with the current version of IBO, then we are
    forced to look elsewhere for a solution. We are very reluctant to do that
    because all of the app's standard reports employ RB.

    We are asking you to reexamine your approach to solving our problem. We ask
    that you produce and test a new version of rbIBO76 that is compatible with
    the current version of IBO.

    If you can demonstrate to us that the current version of RB works with the
    current version of IBO, then we will be more than happy to pay the upgrade
    cost for RB.
This discussion has been closed.