Restricted Datatype Attribute Violation in Powerbuilder 7 Application With Oracle 8i ODBC
From: Allen Marshall <arm_at_camsys.com>
Date: 6 Nov 2001 13:50:52 -0800
Message-ID: <c4b94895.0111061350.66fa09bc_at_posting.google.com>
Date: 6 Nov 2001 13:50:52 -0800
Message-ID: <c4b94895.0111061350.66fa09bc_at_posting.google.com>
We were stumped by a Restricted Datatype Attribute Violation occurring
in very ordinary select statements within a PB 7.0.3 application. This only occurred with the Oracle 8i ODBC drivers (multiple versions for Oracle 8.1.7 in particular). We finally abandoned these drivers and standardized on PB Intersolv Oracle 8, and things stabilized. However, users continued to clamor for fixing the problem so they could use the Oracle ODBC support and not have to install extra drivers. With some pain, we found that PB was issuing ODBC SQLExtendedFetch calls to retrieve rows, presumably for performance reasons, and Oracle's ODBCTEST.EXE showed that Oracle called the ODBC SQLFetch for the same initial SQL statement. Further exploration revealed that setting the retrieve factor to 1 for the SQLCA in PB would force PB to use SQLFetch instead of SQLExtendedFetch, and presto! problem apparently gone. It appears that newer ODBC drivers, except for Oracle's, remap SQLExtendedFetch calls to a newer function whose name escapes me, making this tweak unnecessary. That is why the PB Intersolv drivers worked, I guess, as well as other Merant ODBC drivers we have tested. So, as far as we can tell, PB7 doesn't like to use Oracle 8i ODBC with BLOCK set to anything other than BLOCK=1. Check your DBPARM. Here's an example: DBParm=connectstring='dsn=or816 smart;uid=pstest;pwd=******',block=1,delimitidentifier='no' AllenReceived on Tue Nov 06 2001 - 22:50:52 CET