> My guess is, that in your environment, Qt runs the driver in ODBC 2.x
> and asks for supporting SQLFetchScroll via SQLGetFunctions. The
> driver, actually having SQLFetchScroll, answers no, since it runs in
> ODBC 2.x.

Ok, I move more and more towards a success :-)


First, I now link directly to libsqlod.so, so there is no unixODBC 
anymore on the machine.

Secondly, I had to patch Qt's odbc source code (the following patch 
applies to the Qt3 snapshot from today):

mnz110:/usr/src/qt3/src/sql/drivers/odbc# diff -udb qsql_odbc.cpp.orig 
qsql_odbc.cpp
--- qsql_odbc.cpp.orig  Thu Dec  6 15:59:39 2001
+++ qsql_odbc.cpp       Thu Mar 14 10:30:31 2002
@@ -691,7 +691,11 @@
     }
     r = SQLSetEnvAttr( d->hEnv,
                        SQL_ATTR_ODBC_VERSION,
+#ifdef BEFORE_HOLGER_TOUCHED_THIS
                        (SQLPOINTER)SQL_OV_ODBC2,
+#else
+                       (SQLPOINTER)SQL_OV_ODBC3,
+#endif
                        SQL_IS_UINTEGER );
     r = SQLAllocHandle(SQL_HANDLE_DBC,
                        d->hEnv,
@@ -779,7 +783,11 @@
     static const SQLUSMALLINT reqFunc[] = {
                SQL_API_SQLDESCRIBECOL, SQL_API_SQLGETDATA, 
SQL_API_SQLCOLUMNS,
                SQL_API_SQLGETSTMTATTR, SQL_API_SQLGETDIAGREC, 
SQL_API_SQLEXECDIRECT,
-               SQL_API_SQLGETINFO, SQL_API_SQLTABLES, 
SQL_API_SQLPRIMARYKEYS, 0
+               SQL_API_SQLGETINFO, SQL_API_SQLTABLES,
+#ifdef BEFORE_HOLGER_TOUCHED_THIS
+               SQL_API_SQLPRIMARYKEYS,
+#endif
+               0
     };




But still then demo app "sqltable" did not work, it said

  QSqlCursor::setName: unable to build record, does 'simpletable' exist?

and that is not nice. :-)



Then I put "TraceFileName   = /var/tmp/sql.tx" into my odbc.ini and 
looked at the trace. And strange enought, I saw some "row not found", 
e.g. here:

SELECT TABLE_QUALIFIER AS TABLE_CAT, TABLE_OWNER AS TABLE_SCHEM, 
TABLE_NAME,
COLUMN_NAME, DATA_TYPE, TYPE_NAME, PRECISION AS COLUMN_SIZE, LENGTH AS
BUFFER_LENGTH, SCALE AS DECIMAL_DIGITS, RADIX AS NUM_PREC_RADIX, 
NULLABLE,
REMARKS, NULL AS COLUMN_DEF, DATA_TYPE AS SQL_DATA_TYPE, NULL AS
SQL_DATETIME_SUB, PRECISION AS CHAR_OCTET_LENGTH, POS AS 
ORDINAL_POSITION,
DECODE(NULLABLE,1,'YES',0,'NO','NO') AS IS_NULLABLE, CODETYPE FROM 
SYSDBA.
SYSODBCCOLUMNS WHERE TABLE_OWNER LIKE '%' ESCAPE '\' AND TABLE_NAME LIKE
'simpletable' ESCAPE '\' AND COLUMN_NAME LIKE '%' ESCAPE '\' ORDER BY 
2, 3, 13
EXECUTE: CMD   :
PARSEID: INPUT :  0000006B 00000201 3C002E00
mfIndex init      : 2
mfIndex init      : 2
SQLCODE:  100        Row not found
SQLRESULTNAME  : SQL_CURSOR_0001
START  :  DATE :  2002-03-14    TIME :  0011:36:01
END    :  DATE :  2002-03-14    TIME :  0011:36:01

So I change the source code for "sqltable" from

    SimpleCursor () : QSqlCursor( "simpletable") {}

to

    SimpleCursor () : QSqlCursor( "SIMPLETABLE") {}

and, voila, it worked.




So, I'd suggest that some code in libsqlod.so does an automatic 
uppercasing of table names. After all, SAP DB runs in caps-lock mode, 
doesn't it?

As for the other patches to the Qt3-odbc-driver: I don't have any idea 
if Qt is in error or SAP DB, so I don't have any clue which one should 
change it's source code.

-- 
MN-Logistik GmbH         http://www.mn-logistik.de
Holger Schurig           Network Administrator
Dieselstr. 18
61191 Rosbach v.d.H�he
Tel: 06003/9141-0        Fax: 06003/9141-49
_______________________________________________
sapdb.general mailing list
[EMAIL PROTECTED]
http://listserv.sap.com/mailman/listinfo/sapdb.general

Reply via email to