> 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