Hi!

Now I've got some interesting new stuff for the ODBC-hackers! I've 
got following constellation on a database:

Following users are defined:

    DBA
     |
     \--> TESTUSER
              |
              \--> TESTACC 

The TESTUSER is owned by the DBA and TESTACC is owned by TESTUSER.
TESTUSER has got a table AUFTR which has been created with the 
following statement:

CREATE TABLE AUFTR (
    ANR            FLOAT NOT NULL,
    AUFBEW         FLOAT,
    ERWARBEITSSTD  FLOAT,
    ERWLOHNKOST    FLOAT,
    ERWMATKOST     FLOAT,
    ERWSONSTKOST   FLOAT,
    TATSARBEITSSTD FLOAT,
    TATSLOHNKOST   FLOAT,
    PROJEKTNR      CHAR(8),
    DATANL         DATE,
    DATAEND        DATE,
    BEARB          CHAR(8),
    DATGEPLANT     DATE,
    STDAUFTRAG     CHAR(8),
    DATENDE        DATE,
    ARBG           VARCHAR(255),
    ATYP           CHAR(2),
    AART           CHAR(2),
    ASTATUS        CHAR(6),
    SCHICHT        CHAR(6),
    MEISTERB       CHAR(6),
    OBJKOSTST      CHAR(8),
    VERANTWBER     CHAR(4),
    BEM            LONG,
    KOMPONENTE     CHAR(18),
    ARBEITSPLANER  CHAR(20),
    STOERZEIT      FLOAT,
    DOKUMENT       CHAR(20),
    INSPWART       CHAR(4),
    AUSFKOSTST     CHAR(6),
    SPERR          CHAR(1),
    KARTENNUMMER   CHAR(12),
    KOSTENTR       CHAR(11),
    PLANINTERVALL  FLOAT,
    EINHEIT        CHAR(3),
    STDFREMDFIRMA  FLOAT,

    PRIMARY KEY (ANR)
) 
---
CREATE INDEX INDEX_ASTATUS    ON AUFTR(ASTATUS) 
---
CREATE INDEX INDEX_ATYP       ON AUFTR(ATYP)
---
CREATE INDEX INDEX_BEARB      ON AUFTR(BEARB)
---
CREATE INDEX INDEX_STDAUFTRAG ON AUFTR(STDAUFTRAG)

(BTW: I haven't designed this table/db ;-) )

TESTUSER has created a role TESTROLE which has got SELECT-
privileges on table AUFTR. TESTUSER granted this role to
TESTACC and altered TESTACC so that he will use TESTROLE as
his default role.

Now TESTACC can access this table read-only. After TESTUSER 
has put 152572 records in table AUFTR.

When TESTACC connects via MS Access2k the first time he is 
able to open the table. The second time he isn't, the third
he is, the forth he isn't and so on.

I've put a ODBC-trace as attachment to this mail.

So. After logging that, I played a bit with the data. Once
I've read a mail about the problems of Access with huge 
tables (i.g. a lot of rows). So I deleted first 50000 rows.
TESTACC had the same problem. Then I deleted several times
hundreds of rows. But the problem persisted. After a while
I was getting to only 60 rows in the table. At this point
TESTACC couldn't display the table anymore.

Here's an ODBC-trace (stuff like this <...> means that I've 
cut some lines away, which have been nearly the same):

PRODUCT : liveCache C-PreComp Runtime
VERSION : 7.2.5
BUILD   : 004-000-246-186

DATASOURCE: LINUXDB_TEST
SESSION   : 1;    
SQLMODE   : INTERN
SERVERDB  : TEST              
SERVERNODE: linuxdb
CONNECT "TESTACC           " IDENTIFIED BY :A   ISOLATION LEVEL 1
START  :  DATE :  2001-12-19    TIME :  0018:21:51
END    :  DATE :  2001-12-19    TIME :  0018:21:51

SELECT Config, nValue FROM MSysConf
PARSE  : CMD   :  
SQLCODE:  -4004      Unknown table name:MSYSCONF
PARSEID: OUTPUT:  00000000 00000000 00000000
SQLERRD(INDEX_6) : 28        ERROR NEAR ^ :     alue FROM ^MSysConf 
START  :  DATE :  2001-12-19    TIME :  0018:21:51
END    :  DATE :  2001-12-19    TIME :  0018:21:51

SELECT "TESTUSER"."AUFTR"."ANR" FROM "TESTUSER"."AUFTR"
PARSE  : CMD   :  
mfIndex init      : 1
mfIndex init      : 2
PARSEID: OUTPUT:  000000A0 00000201 3C002C00
START  :  DATE :  2001-12-19    TIME :  0018:21:51
END    :  DATE :  2001-12-19    TIME :  0018:21:51

SELECT "TESTUSER"."AUFTR"."ANR" FROM "TESTUSER"."AUFTR"
EXECUTE: CMD   :  
PARSEID: INPUT :  000000A0 00000201 3C002C00
mfIndex init      : 2
mfIndex init      : 2
WARNING: W-------8------- 
SQLRESULTNAME  :  SQL_CURSOR_0002 
SQLERRD(INDEX_3) : -1         
START  :  DATE :  2001-12-19    TIME :  0018:21:51
END    :  DATE :  2001-12-19    TIME :  0018:21:51

MASS STATEMENT :  
 FETCH "SQL_CURSOR_0002"
PARSE  : CMD   :  
WARNING: W--3------------ 
PARSEID: OUTPUT:  000000A0 00000401 2A002B00
START  :  DATE :  2001-12-19    TIME :  0018:21:51
END    :  DATE :  2001-12-19    TIME :  0018:21:51

MASS STATEMENT :  
 FETCH "SQL_CURSOR_0002"
EXECUTE: CMD   :  
PARSEID: INPUT :  000000A0 00000401 2A002B00
OUTPUT :    1: ANR                             :  9.574020000000000E+05
SQLERRD(INDEX_3) : 1          
START  :  DATE :  2001-12-19    TIME :  0018:21:51
END    :  DATE :  2001-12-19    TIME :  0018:21:51

<...>

MASS STATEMENT :  
 FETCH "SQL_CURSOR_0002"
EXECUTE: CMD   :  
PARSEID: INPUT :  000000A0 00000401 2A002B00
OUTPUT :    1: ANR                             :  1.046388000000000E+06
SQLERRD(INDEX_3) : 1          
START  :  DATE :  2001-12-19    TIME :  0018:21:51
END    :  DATE :  2001-12-19    TIME :  0018:21:51

MASS STATEMENT :  
 FETCH "SQL_CURSOR_0002"
EXECUTE: CMD   :  
PARSEID: INPUT :  000000A0 00000401 2A002B00
SQLCODE:  100        ROW NOT FOUND
START  :  DATE :  2001-12-19    TIME :  0018:21:51
END    :  DATE :  2001-12-19    TIME :  0018:21:51

CLOSE "SQL_CURSOR_0002"
PARSE  : CMD   :  
PARSEID: OUTPUT:  000000A0 00000501 06002800
START  :  DATE :  2001-12-19    TIME :  0018:21:51
END    :  DATE :  2001-12-19    TIME :  0018:21:51

CLOSE "SQL_CURSOR_0002"
EXECUTE: CMD   :  
PARSEID: INPUT :  000000A0 00000501 06002800
PARSEID: SELECT:  000000A0 00000201 3C002C00
mfIndex init      : 2
mfIndex restore   : 2
START  :  DATE :  2001-12-19    TIME :  0018:21:51
END    :  DATE :  2001-12-19    TIME :  0018:21:51
 
SQCDROPPARSID     
PARSEID:       :  000000A0 00000401 2A002B00
 
SQCDROPPARSID     
PARSEID:       :  000000A0 00000501 06002800
mfIndex delete    : 2
 
SQCDROPPARSID     
PARSEID:       :  000000A0 00000201 3C002C00

SELECT
"ANR","AUFBEW","ERWARBEITSSTD","ERWLOHNKOST","ERWMATKOST","ERWSONSTKOST",
"TATSARBEITSSTD","TATSLOHNKOST","PROJEKTNR","DATANL","DATAEND","BEARB",
"DATGEPLANT","STDAUFTRAG","DATENDE","ARBG","ATYP","AART","ASTATUS","SCHICHT"
,
"MEISTERB","OBJKOSTST","VERANTWBER",'#S_C_H#',"KOMPONENTE","ARBEITSPLANER",
"STOERZEIT","DOKUMENT","INSPWART","AUSFKOSTST","SPERR","KARTENNUMMER",
"KOSTENTR","PLANINTERVALL","EINHEIT","STDFREMDFIRMA"  FROM
"TESTUSER"."AUFTR"  
WHERE "ANR" = ? OR "ANR" = ? OR "ANR" = ? OR "ANR" = ? OR "ANR" = ? OR "ANR"
= 
? OR "ANR" = ? OR "ANR" = ? OR "ANR" = ? OR "ANR" = ?
PARSE  : CMD   :  
SQLCODE:  100        Row not found
PARSEID: OUTPUT:  00000000 00000000 00000000
START  :  DATE :  2001-12-19    TIME :  0018:21:51
END    :  DATE :  2001-12-19    TIME :  0018:21:51

S1: DISCONNECT 
 
SQCFINISH         

Maybe you can help me? Thanks!


Greets
Christian Jung


PS: I hope that it doesn't bother you, that the ODBC-trace is packed as a
gzipped tar. At the moment I haven't got a zip-tool for Windows...



 

 <<trace.tar.gz>> 

Attachment: trace.tar.gz
Description: Binary data

Reply via email to