|
FAQ
OpenAccess ODBC SDK
Q1 What is maximum length of SQL command?
Q2 Which keywords are not supported as identifiers?
Q3 Which keywords are allowed only for column
names (when qualified with table name)?
Q4 How to get Parent ODBC application windows
handle?
Q5 Explain significance of some OpenAccess system
tables from application point of view?
Q6 How does MSQuery identify a unique index?
Q7 How does MSQuery identify autojoins?
Q8 How MSQuery read data?
Q9 How MSQuery modify data?
Q10 How does MSAccess identify a unique index?
Q11 How does MSAccess identify autojoins?
Q12 How does MSAccess read data?
Q13 How does MSAccess modify data?
Q14 How MSAccess access LONGVARBINARY data?
Q15 Why Crystal Reports shows TimeStamp fields
as Date fields?
Q16 Why MS Access shows #deleted for some records?
Q17 How to use SQL.REQUEST in Excel?
Q18 How MSEXCEL & MSQUERY interact?
Q19 How to use OpenRDA ODBC Driver from Linked
Server?
Q20 Do you have list of Reserved keywords?
Q21 How to disable login dialog?
Q22 What is the significance of SQLDescribeParam
option?
Q23 What is the significance of OA_INFO table?
Q24 How to change the value of SQL_TXN_CAPABLE
transaction support?
Q25 How do I Install and Use OpenAccess SDK
on OpenVMS 7.0 , 7.1, 7.2 or 7.3
Q26 How do I use the interval syntax [between
now() - {interval '1' DAY} and now()] while building a query in
MS ACCESS, MS EXCEL or Crystal Report.
Q27 Unable to connect through Microsoft Access
using ODBC.
Q28 We have a problem generating a report
using Crystal Report.
Q29 How do I setup the Oracle Generic Connectivity
using OpenAccess ODBC Driver?
Q30 When I run a certain query through your
OpenAccess ODBC SDK, I will periodically get a "Transaction Rollback
- Statement Completion Unknown" error.
Q31 ADO connection deadlock problem with
SQLServer.
Q32 We don't have UCX running on our VMS
box, instead we use Multinet for our TCP/IP, When I install the
OpenRDA ODBC Driver it gives following error's when linking executables.
%LINK-F-OPENIN, error opening SYS$COMMON:[SYSLIB]UCX$IPC.OLB; as
input -RMS-E-FNF, file not found
%LINK-F-OPENIN, error opening SYS$COMMON:[SYSLIB]SQL$USER.OLB; as
input -RMS-E-FNF, file not found
Q33 Installing OpenAccess on Windows XP gives
the following error.
D:\is6\Code|XT|RunTime\ISFunc\MsgBox.rul
The box below is an "Unhandled Exception" and in the box
Error Number: 0x80040706
Description: Object reference not set Setup will now terminate
Q34 Installing OpenRDA on Windows XP gives the
following error.
C:\Windows\SYSTEM32\AUTOEXEC.NT. The system file is not suitable
for running MS-DOS and Microsoft Windows applications.
Choose 'Close' to terminate the application.
Q1 What is maximum length of SQL command?
The OpenRDA ODBC driver supports a maximum command
length of 32768. The Interactive SQL tool supports command length
maximum of 1024.
Q2 Which keywords are not supported as identifiers?
AS FROM UNION
Q3 Which keywords are allowed only for column
names (when qualified with table name)?
ALL AND ASC AVG BETWEEN BY COUNT DESC DISTINCT ESCAPE EXISTS FOR
FULL GROUP HAVING HINT IN INNER LEFT LIKE MAX MIN NOT NULL ON OR
ORDER RIGHT SELECT SUM WHERE
select e.all from emp e
Q4 How to get Parent ODBC application windows
handle?
The ip_connect() routine can be modified to access the window handle:
extern HWND gODBCParentWindow;
sprintf(dam_msgBuf, "Parent handle:%lx", (long)gODBCParentWindow);
tm_trace(mem_tm_Handle, UL_TM_ERRORS, "%s\n", (dam_msgBuf));
Q5 Explain significance of some OpenAccess
system tables from application point of view?
OA_COLUMNS - Include the column definitions and mark the primary
key column(s) as BEST_ROWID. If your database has a pseudocolumn
specifically designed for this purpose (as in Oracle ROWID) you
can expose these columns. If your database supports ROWVER field
(columns that are automatically updated by the datasource when any
value in the row is updated) expose that information.
OA_STATISTICS - Expose all the unique and non-unique indexes.
Expose the primary key Unique index first followed by other unique
and non-unique indexes.
The first unique index is used as primary key by some applications
and DAM uses all the index information in its optimizer to determine
the best index for a query execution.
OA_FKEYS - Expose the Primary key information (even if some applications
rely on OA_STATISTICS to get primary key). Also expose Foreign key
information (even if some applications rely on matching column names
to determine auto join conditions) since the DAM planner uses it
to implement JOIN processing.
Keep the column names in Primary and Foreign tables the same since
most applications use it to identify auto join conditions.
Q6 How does MSQuery identify a unique index?
MSQuery uses ODBC call SQLSpecialColumns(SQL_BEST_ROWID) to detect
the primary key fields for a table. A column can be marked as ROWID
column in the OA_COLUMNS definition. Please refer to pages 3-11
& 3-12 in the ODBC Driver Development Kit Programmer's Guide
for details on how to mark the column as ROWID.
Q7 How does MSQuery identify autojoins?
MSQuery says that it will auto setup the inner join if the field
names match and the field is defined as the "primary key" to one
of the files.
Q8 How MSQuery read data?
When fetching data for a table, Query reads data for all the columns
Q9 How MSQuery modify data?
Query uses unique index and the old value is supplied
Q10 How does MSAccess identify a unique
index?
When attaching an ODBC table, Access calls SQLStatistics to collect
index information. The first unique index returned is marked as
the "primary" index. Unless a "primary" index is found, the attached
table will not be updatable.
Q11 How does MSAccess identify autojoins?
Microsoft Access automatically creates joins if you add two tables
to a query and the tables each have a field with the same or compatible
data type and if one of the join fields is a primary key.
Q12 How does MSAccess read data?
When fetching data for a table, Access first queries for the primary
index fields and later uses the value of the index fields to read
data for the remaining fields.
Q13 How does MSAccess modify data?
If SQLSpecialColumns(ROWVER) reports a ROWVER column (say, "RV"),
Access uses it to implement optimistic concurrency during datasheet
updates. On datasheet Update/delete, the UPDATE/DELETE query is
appended with "AND RV = ?", and the old value supplied.
If there is no ROWVER column, then all updatable columns are compared
to their old values, as in:
UPDATE MyTable SET col1 = ?, col2 = ?, col3 = ?
WHERE PrimKey = ? AND col1 = ? AND col2 = ? AND col3 = ?
Q14 How MSAccess access LONGVARBINARY data?
LONGVARBINARY fields are mapped as OLE objects. If the table has
index information, Access passes the literal string ‘#S_C_H#’ as
the column for LONGVARBINARY field. It then tries to read the string
value as BINARY data
SQLPrepare called:
hstmt=0x165100
szSqlStr=SELECT "NAME",'#S_C_H#' FROM "OAUSER"."EMP_TABLE" WHERE
"NAME" = ? OR "NAME" = ? OR "NAME" = ? OR "NAME" = ? OR "NAME" =
? OR "NAME" = ? OR "NAME" = ? OR "NAME" = ? OR "NAME" = ? OR "NAME"
= ?
cbSqlStr=SQL_NTS
SQLPrepare: returns SQL_SUCCESS
SQLGetData called:
hstmt=0x162be8
icol=2
fCType=SQL_C_BINARY
cbValueMax=16000
SQLGetData: returns SQL_ERROR
SQLState=S1003, ErrorMsg=CLI error: Program type out of range
If the table does not have index information, it just displays
‘Long binary data’ as the field value but calls to get max of 16K
data
SQLGetData called:
hstmt=0x16a260
icol=2
fCType=SQL_C_BINARY
cbValueMax=16000
Q15 Why Crystal Reports shows TimeStamp
fields as Date fields?
You need to make sure that before you design the report, you set
the Options for Reporting properly. Choose File|Options menu and
go to the Reporting Tab. Select option to "Keep date-time type"
for Date-Time field.
Q16 Why MS Access shows #deleted for some
records?
This occurs when MSAccess does not find matching records for the
unique index exposed by the table. MSAccess first runs a query to
get the unique index values. It later uses the value of the unique
index field to query for the other column values. It tries to lookup
10 matching records each time.
For example, if EMP table has unique index on EMPNO, the second
query contains 10 conditions on the EMPNO field:
select EMPNO from emp;
select EMPNO, ENAME, SAL, HIREDATE, DEPTNO FROM EMP WHERE EMPNO
= ? OR EMPNO = ? OR EMPNO = ?... EMPNO = ?
When MSAccess does not find matching records for all the EMPNO
values, it shows #deleted for the corresponding records.
This occurs if IP is not processing the Index conditions returned
by dam_getOptimalIndexAndConditions correctly. If IP is only checking
the first condition list, MSAccess displays only every 10th row
correctly and shows a block of 9 #deleted rows. If IP fails to return
matching records for some of the conditions, MSAccess displays #deleted
for the corresponding rows.
Q17 How to use SQL.REQUEST in Excel?
To use the SQL.REQUEST array formula:
SQL.REQUEST(connection_string,output_ref,driver_prompt,query_text,col_names_logical)
the format for the connection_string is:DSN=test_server;UID=name;PWD=password
When you enter the array formula, Microsoft Excel automatically
inserts the formula between { } (braces).
If the array formula will return one result, click the cell in
which you want to enter the array formula. If the array formula
will return multiple results,
select the range of cells in which you want to enter the array
formula.
Type the array formula.
Press CTRL+SHIFT+ENTER.
Q18 How MSEXCEL & MSQUERY interact?
When you are running EXCEL and you invoke the Data-GetExternal
Data-Create New Query option then you will get Microsoft Query’s
window handle in SQLDriverConnect() function because first dialog
box pop-up to select the ODBC driver.
When you are running EXCEL, and you invoke the Data-Get External
Data-Run Database Query to run a saved query then you will get Open
File’s window handle in SQLDriverConnect() function because first
it will asked for file to run.
When you are running EXCEL, and you invoke the Data-Get ExternalData-Edit
Query option then you will get Excel’s window handle in SQLDriverConnect()
function because there is not any pop-up intermediate window .
Q19 How to use OpenRDA ODBC Driver from
Linked Server?
- Run the Enterprise Manager from the SQL Server.
- Select security -> Link server.
- Right click on link server to create a new Linked server. Enter
linked server name as "TEST_OPENRDA".
- Select the Provider name as 'Microsoft OLEDB Provider for ODBC
drivers.'
- Specify the DataSource name eg: test_local
- Under the Provider Options
Enable : Dynamic Parameters, Allow InProcess
Disable: Nested queries, Level zero only, Non-transacted updates,
Index as access path
Enable: "Collation compatible" option. -
This option will delegate filter condition to provider.
Disable: RPC, RPC Out
Leave Collation Name empty
Leave Connection Timeout and Query Timeout at 0.
- Under the Security tab, select "Be made using this security
context" and specify the Remote Login and Password for the Provider.
- Once the linked server is created, you should be able to query
your database tables.
select * from "TEST_OPENRDA"."SCHEMA".OAUSER.EMP;
select * from OPENQUERY(Test_OpenRDA, 'select * from emp');
select * FROM OPENROWSET('MSDASQL','DSN=test_local', 'SELECT *
FROM emp')
Q20 Do you have list of Reserved keywords?
add, all, alter, and, any, as, asc, avg, between, binary, by, call,
cascade, char, close, commit, count, create, current, decimal, delete,
desc, distinct, divide, double, drop, escape, exists, exit, false,
fetch, float, for, from, full, grant, group, having, hint, in, index,
inner, insert, integer, into, is, join, key, left, like, longvarbinary,
longvarchar, max, min, not, nowait, null, numeric, of, on, open,
or, order, outer, primary, procedure, public, query, quit, real,
references, restrict, revoke, right, rollback, select, set, smallint,
sum, table, timestamp, to, true, union, unique, unknown, update,
userdata, values, varbinary, varchar, view, where, work
Q21 How to disable login dialog?
To disable the login dialog do the following settings in openrda.ini:
[ODBC32]
PromptForUID=1
If you are using our installation for distributing your driver,
the "Client Distribution Guide" explains how you can control this
setting for your custom install.
Q22 What is the significance of SQLDescribeParam
option?
The checkbox in ODBC data source setup allows you to enable/disable
support for SQLDescribeParam(), a function that is part of the ODBC
API. Based on this setup, our ODBC driver either exposes this optional
function or not. Our current implementation of this function is
not complete and is provided to work with some tools that require
this functionality. For example Visual Basic application using RDO
require support for this function.
Typically you are not supposed to enable this function. When an
application starts to report errors that "SQLDescribeParam" is not
supported, you should contact our support staff and we will recommend
if you should enable this feature.
Q23 What is the significance of OA_INFO
table?
Our ODBC clients do the queries on OA_INFO table to lookup database
specific information. This is done once during the connection and
if we do not find the table, we assume default values. OA_INFO is
a catalog table and contains information required by the ODBC API
SQLGetInfo(). SQLGetInfo is typically not used by custom applications
like the ones you are building.
In our next release we plan to provide a configuration option to
indicate to the client not to read this information. If you want
to avoid these error messages, please setup a table named OA_INFO
with the following columns:
INFO_NAME CHAR(128),
INFO_NUM INTEGER,
INFO_INT INTEGER,
INFO_BITMASK INTEGER,
INFO_TEST CHAR(128),
REMARKS CHAR(128)
Create the above table and leave it empty.
Q24 How to change the value of SQL_TXN_CAPABLE
transaction support?
IP can change the value returned for SQLGetInfo(SQL_TXN_CAPABLE).
You can update the damipex.h to change the value for SQL_TXN_CAPABLE,
info_num=46, in gColArray_Info. The info_int field value for this
entry should be changed from 2 to 0.
Once you update the damipex.h, rebuild the OpenRDA Server (or in
case of Local SDK, rebuild the odbc driver). Delete the existing
oainfo.ini that contains cached driver information from the client
systems. oainfo.ini (oaodbc\schema\oainfo.ini) is located in the
schema folder of the driver install.
You may also want to modify your IP to return DAM_FAILURE for ROLLBACK
transactions. We do not have enough information about how different
ODBC applications use the SQL_TXN_CAPABLE option but this is how
ODBC driver is expected to report.
Q25 How do I Install and Use OpenAccess
SDK on OpenVMS 7.0 , 7.1, 7.2 or 7.3?
The OpenAccess SDK 4.8 for OpenVMS was built on OpenVMS 6.2. You
must perform the following steps to install and use it on a OpenVMS
7.x system.
1.Please follow the instructions in Chapter 17 "OpenVMS
Installation Notes" in the Installation and Configuration Guide.
Complete steps 1-7 in the installation guide and then continue with
steps below.
NOTE: Some customers have had trouble using the command EXCHANGE
/FDL. If you get and error with this command then please do the
following:
set file /attr=(rfm:fix,lrl:32256,mrs:32256) avms.sav
2. After extracting the save set file in step 7. Change
to AVMS folder
   $ set def oa_root:[AVMS]
3. Under OpenVMS V7.x and higher, to link object files that
were compiled under OpenVMS V6.2, Modify the oaisql.opt, odbcisql.opt
and oaserver.opt command files.
Look for:
   SYS$SHARE:CMA$OPEN_RTL/SHARE
   SYS$SHARE:POSIXC$SHARE/SHARE
Replace with:
   oa_root:[avms72]CMA$OPEN_RTL/SHARE
4. Create the AVMS72 folder under OA_root folder.
   $ set def OA_root:[000000]
   $ create /dir [.AVMS72]
5. Also add this line at the end of disql_o.opt file.
   oa_root:[avms72]CMA$OPEN_RTL/SHARE
6. Transfer the CMA$OPEN_RTL.EXE
(Click on the file name to get it) under [.AVMS72] folder.
   $ Set def OA_root:[AVMS72]
7. Continue with the instruction in our installation and
Configuration Guide step 8.
To Build the Memory IP
Follow the instructions in step 3 above to Modify the AVMS.OPT
command file at the following folder to build the Memory IP
$ Set def OA_root:[sdk.damip.memory]
You will have to change the permissions to modify this file using
SET FILE/PROTECTION=(S:RWED,O=RWED,G:RWE,W:RWE) avms.opt
To Build the Memory Server
Follow the instructions in step 3 above to Modify the AVMS.OPT
command file at the following folder to build the Memory Server.
$ Set def OA_root:[sdk.server]
You will have to change the permissions to modify this file using
SET FILE/PROTECTION=(S:RWED,O=RWED,G:RWE,W:RWE) avms.opt
Q26: How do I use the interval syntax
[between now() - {interval '1' DAY} and now()] while building a
query in MS ACCESS, MS EXCEL or Crystal Report.
Solution: You can write the query in SQL Window of MS EXCEL and
CRYSTAL REPORT. In MS ACCESS use the Query Pass through mode to
Design the query using interval options. Here are the sample queries
for each application.
MS Access Query Pass Through Mode
SELECT OAUSER.ARCHIVE.NODE, OAUSER.ARCHIVE.TAG, OAUSER.ARCHIVE.TIME,
OAUSER.ARCHIVE.VALUE FROM OAUSER.ARCHIVE WHERE (((OAUSER.ARCHIVE.TAG)=
'TEST_AA') AND ((OAUSER.ARCHIVE.TIME) Between now() - {interval
'1' DAY} And now()) AND OAUSER.ARCHIVE.DURATION='1:00:00');
MS Excel
SELECT ARCHIVE.NODE, ARCHIVE.TAG, ARCHIVE.TIME, ARCHIVE.VALUE, ARCHIVE.STATUS,
ARCHIVE.ALARM, ARCHIVE.DURATION, ARCHIVE.INTERVAL, ARCHIVE.MODE,
ARCHIVE.DATASET FROM OAUSER.ARCHIVE ARCHIVE WHERE (ARCHIVE.TIME
between now() - {interval '1' DAY} and now()) and (ARCHIVE.TAG='TEST_AA')
and ARCHIVE.INTERVAL='1:00:00'
Crystal Report
SELECT ARCHIVE."NODE", ARCHIVE."TAG", ARCHIVE."TIME", ARCHIVE."VALUE"
FROM "SCHEMA"."OAUSER"."ARCHIVE" ARCHIVE WHERE ARCHIVE."TIME" between
now() - {interval '1' DAY} and now() AND ARCHIVE."TAG" = 'TEST_AA'
AND ARCHIVE."INTERVAL" = '1:00:00'
Note: You can not use the Query Builder to build the query using
interval options.
Q27 Unable to connect through Microsoft
Access using ODBC.
Microsoft Access returns -77xx error messages when Access determines
that a driver has failed to comply with the ODBC specifications.
Please click
here and scroll down to look for the topic Microsoft Access
ODBC Spec-Compliance Error Codes for the complete details.
Q28 We have a problem generating a
report using Crystal Report.
This seems to be a Bug in Crystal report.
Workaround: Once you generate the report do some editing
in the query manually. Open Show SQL Query Window. Now insert some
characters and then delete them (i.e. just touch the query). Now
either save the report without data or preview the report, it will
work.
Q29 How do I setup the Oracle Generic
Connectivity using OpenAccess ODBC Driver?
Please download (Generic Connectivity Using ODBC.pdf) for Windows
and Unix
for step-by-step guide on setting up and troubleshooting generic
connectivity using OpenAccess ODBC Driver.
Q30 When I run a certain query through
your OpenAccess ODBC SDK, I will periodically get a "Transaction
Rollback - Statement Completion Unknown" error.
Check that the 'Response time' defined in the Openrda.ini file
is sufficient for the type of operations performed. Default Response
time out is 3600 seconds. This value should be less than 32767.
[CLIENT]
RESPONSE_TIME_OUT=3600
Q31 ADO connection deadlock problem
with SQLServer.
The problem is most likely related to the version of your MDAC.
If you are using MDAC 2.5 or earlier versions, there seems to be
a bug with OLE DB Service Components which causes the connection
to hang. Please refer to the article on Microsoft site: http://support.microsoft.com/support/kb/articles/Q267/5/66.ASP
Q32 We don't have UCX running on our VMS
box, instead we use Multinet for our TCP/IP, When I install the OpenRDA
ODBC Driver it gives following error's when linking executables.
- Please link with the Multinet IPC.OLB library which provides the
Multi socket function, which we are using from this UCX library.
- sql$user.olb are optional library files. Please run the setup again
and once it fails, edit the oaisql.opt and odbcisql.opt files under
install/vvms to remove the SQL$USER.OLB and run build.com.
Q33 Installing OpenAccess on Windows XP
gives the following error.
The user you are installing it as should have local Admin rights,
please either login as local administrator and then install the OpenAccess
product or give that user the local Admin rights.
Q34 Installing OpenRDA on Windows XP gives
the following error.
C:\Windows\SYSTEM32\AUTOEXEC.NT. The system file is not suitable for
running MS-DOS and Microsoft Windows applications.
Here is the article on Microsoft site for this error message, please
follow the instruction in this article.
http://support.microsoft.com/default.aspx?scid=kb;en-us;324767
Technical Support Number and Hours
Email
For technical questions we suggest email. Please send your email
to: oasupport@datadirect.com
You can expect a response based on your support plan.
|