Error when opening dbase table with TSQLTable

Help
2010-07-20
2013-05-01
  • Chris Hedges
    Chris Hedges
    2010-07-20

    Hi All,

    I've getting a strange error when trying to open a DB3 table using a TSQLTable. I'm using the demo application that ships with open-dbx (..\Source\Demos\DBMS\DBF\SQL) and I'm getting the same problem.

    When I make a connection to dbase and then try to open a table with a TSQLTable I get the following error

    "Schema or user name separated by a "." must be specified"

    I'm doing nothing fancy with the connection, just using the dbx_dbf_connect unit from the demo to setup the connection and then assigning it to a SQLTable e.g.

    MyTable.SQLConnection := MyConnection;
    MyTable.Tablename := 'Params.dbf';
    MyTable.Open;

    Omitting the .dbf from the tablename makes no difference.  I can make a TSQLQuery work fine with a "select * from Params.dbf"
    but I need to be able to get this resolved as I'm using ReportBuilder for my reporting and it's raising the same error.

    any ideas or suggestions? I'm guessing this is most likely a setup issue but I'm stumped

    Thanks,

    Chris Hedges

     
  • This very old mistakes in intermediate adapter "dbxadapter*.dll"
    On given moment I have a no decisions of this problem. Its possible was quickly and easy solve if code "dbxadapter30.dll" was open.  Or pattern of the code is given for dbx4 driver.

     
  • Chris Hedges
    Chris Hedges
    2010-07-20

    Hi Pult,

    so, there is no way I can fix this? or do I need to make some changes to the open-dbx code etc?

    Thanks,

    Chris.

     
  • In "dbxoodbc.dll" no mistakes. The Mistake inwardly "dbxadapter*.dll" which there is layer between "dbxoodbx" and dbx4. Some mistakes will in the near future are eliminated. But this - while not.

     
  • Decision:
      SQLTable1.GetMetadata := False;

     
  • In the following version problem will is solved (at nearest days).

     
  • Chris Hedges
    Chris Hedges
    2010-07-21

    Thanks for taking time to look into this for me. I'll be looking forward to the next version :)

    Many thanks,

    Chris.

     
  • Chris Hedges
    Chris Hedges
    2010-07-27

    Hi Pult,

    Are you making any progess with this problem? If you have anything that you would like testing regarding this issue I'd love to help out in any way I can :)

    Many thanks,

    Chris.

     
  • Is out  new version "Version 3.100, 2008-03-24_ Beta "
    In this version for Delphi 2007 Up not supported metadata reader (list tables, columns etc).
    Because of it was your error : "Schema or user name separated by a "." must be specified"
    Metadata suppotred only over for query ("packages\source\Dbx34DrvDbms.pas").
    Support of metadata will added in following version.

    Changed: "demos\connections\dbx_dbf_connect.pas"
    Example: "demos\dbms\dbf\sql"

     
  • :)
    Version 3.210, 2010-07-27_ Beta

     
  • Chris Hedges
    Chris Hedges
    2010-07-30

    Hi Pult,

    Thanks for the update. I can not open dbase files via a SQLTable but only if I set GetMetadata := False;

    This allows me to open the table but unfortunately ReportBuilder still generates the same error. Reportbuilder must be creating a table to allow the display of the fields within a table. and without setting the metadata property to false, it fails.

    Is there any way the I can avoid this e.g all controls connected to the dbx connection will have Metadata = False?
    Is it a lot of work to make Metadata be supported fully?

    Thanks again,

    Chris.

     
  • Qustions:
    1) your delphi version ?
    2) where you get error ? In IDE or in your application ?

    Recommendation:
    1) for delphi ide "2007 and upper" need install "packages\binary\PkgDbxXXDrv*.bpl"
    2) for your application need add to project: uses …, DbxXXDrv;

     
  • Latest dbx version 3.211, 2010-07-29

     
  • Version 3.211, 2010-07-31, Beta

    Recommendation:
    1) for ANY delphi ide : need install "packages\binary\PkgDbxXXDrv*.bpl"
    2) for your application need add to project: uses …, DbxXXDrv;

    what news:
    + added FechTable for D2007 up over odbc
    + DbxDBFix.pas - added support d6..d2011
         - it module corrected much QC (bugs) …

     
  • Chris Hedges
    Chris Hedges
    2010-08-10

    Hi Pult,

    Sorry for the late reply regarding this issue.

    I'm using D2007 and I have installed the 211 release of ODBX into the IDE and using the DbxXXDrv in my project.

    To confirm, I still get the "Schema or user name separated by a "." must be specified"  error if the TSQLTable.GetMetaData = True? Should that happen or must I turn it off?

    If I must set TSQLTable.GetMetaData = False, then this is a problem for me still :(  I am using ReportBuilder for reporting and this is displaying the error.

    Is there any way of making all TSQLTable components attached to the TSQLConnection automatically set GetMetaData = False?  How much work is to get DBX to support metadata correctly?

    Thanks for your help :)

     
  • 2) where you get error ? In IDE or in your application ?

    I have/use RBuilder.
    Can give me example?

     
  • Version 3.2010.08.11

    + fixed: AV when use connection option coNetPacketSize (coNetPacketSize=8192)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    + fixed: "Dbx34Drv.pas" work only in static mode (replaced "GetSQLDriverODBC…" to "getSQLDriverODBC…").
    + added: "Dbx34Drv.pas" Delphi 2007: change VendorLib (it allow use direct mode odbc).
    + added: "Dbx34Drv.pas" Delphi 2007 Up: Environmet variable are processed in connection parameters LibraryName and VendorLib.
               sample: VendorLib = '%windir%\system32\odbc32.dll'
    + fixed: work in IDE. added version of packages with included dbxoodbc statically (IDE not required dbxoodbc.dll).
              "packages\binary\embedded\*.*"
    + updates:
         "driver\binary"
           dbx*connections.ini
           dbx*drivers.ini

     
  • for Delphi 2007 it is important:

    DFM file:

      object SQLConnection1: TSQLConnection
        DriverName = 'DbxOpenOdbc'
        LibraryName = 'dbxoodbc.dll'
        Params.Strings = (
          'DriverPackageLoader=TDBXDynalinkDriverLoaderOpenOdbc')
        VendorLib = 'odbc32.dll'

    end

    see parameter "DriverPackageLoader" - it is critical for IDE

     
  • I try install package PkgDbxXXDrv2007.dpk get a error:

    "Error in module : CONTAINS clause is incorrect."

     
  • IDE spoils the text of the file PkgDbxXXDrv*.dpk.

    So:

    1) For compiling use command "build_d*.bat" or use bpl file from folder "packages\binary\"
    2) In IDE it is necessary to install binary file PkgDbxXXDrv*.pbl

      where:
        * - your version Delphi

     
  • >PkgDbxXXDrv*.pbl
    PkgDbxXXDrv*.bpl

     
  • Leonardo Sasso
    Leonardo Sasso
    2011-08-08

    I used to have a problem opening MySQL tables with TSQLTable because of the " . MySQL takes ` or nothing instead. What I did to fix this, I open the table with a TSQLQuery instead.

     
  • It looks like your version of odbc draver returns incorrect Quote Char:


    "DbxOpenOdbc.pas":
    function TSQLConnectionOdbc.GetMetaDataOption;//(eDOption: TSQLMetaDataOption;

          xeMetaObjectQuoteChar: // Readonly

                    OdbcRetcode := SQLGetInfoString(fhCon, SQL_IDENTIFIER_QUOTE_CHAR,
                      @GetInfoStringBuffer, SizeOf(GetInfoStringBuffer), iLength);
                    if OdbcRetcode <> OdbcApi.SQL_SUCCESS then
                      fOwnerDbxDriver.OdbcCheck(OdbcRetcode, 'SQLGetInfo(SQL_IDENTIFIER_QUOTE_CHAR)',
                        SQL_HANDLE_DBC, fhCon, nil);
                    if (GetInfoStringBuffer = ' ') or (GetInfoStringBuffer = cNullAnsiChar) then
                    begin
                      PAnsiChar(PropValue)^ := cNullAnsiChar;
                      fWantQuotedTableName := False;
                      iLength := 0;
                    end
                    else
                    begin
                      AnsiChar(PropValue^) := GetInfoStringBuffer;
                      iLength := 1;
                    end


    More precisely one could say after seeing your connection log.