[INTERFACES] Error from backend. Was: MSAccess problem deleting rows - Mailing list pgsql-interfaces
From | leif@danmos.dk |
---|---|
Subject | [INTERFACES] Error from backend. Was: MSAccess problem deleting rows |
Date | |
Msg-id | 199907261055.MAA14266@crysberg.dk Whole thread Raw |
List | pgsql-interfaces |
Hi all, Please forgive for posting this again, but since I posted this last week and haven't got any response, and since I am getting a bit desperate about this, I will try again. I am having trouble using M$Access on a PostgreSQL database using PostODBC. My setup: Linux kernel: 2.0.36 Linux dist: RedHat 5.0 PostgreSQL: 6.4.2 PostODBC: -> 06.40.0006 M$Access: 97 My main problem is to make M$Access use the primary (unique) key of my table when I am deleting a single row from M$Access. This is what I do: 1) Link the table 'ut32loen' into a new and freshly opened M$Access database. 2) Open the table in "raw" Access (simply clicking on the Open button in the database window of Access). 3) Selecting the first row of the table (by clicking in the left-most column, the one not being a table column, selecting the hole row). 4) Pressing the 'delete' key on the keyboard. This results in two different responses from Access: 1) Access claims that somebody else has changed the data, that I am trying to delete, though *noone* else is on the database. 2) I get an error from the backend. Re 1: In this case I have *not* checked 'Row versioning' in the ODBC Manager setup of the data set name that I am using. For some reason it looks like Access cannot figure out to use the unique index that exists on the table, and which it accepted when I linked the table. (It didn't ask for a unique key, as it does if none exists.) In stead Acccess generates this awfull where clause using *all* columns for qualifying the row. I suspect, it is because of rounding errors that it can't find the row resulting in this stupid message from Access telling me somebody else has modified the data !!?? The main problem is, however, that M$Access does not use *only* the unique key column in the where clause. This situation is logged in the file psqlodbc_42941.... below. Re 2: Here I have checked the 'Row versioning' option. The where clause looks a lot better, but I get this error from the backend: errmsg='ERROR: There is more than one possible operator '=' for types 'xid' and 'int4' You will have to retype this query using an explicit cast' I am afraid that I can't cast anything since this was generated by the M$ JetEngine. This situation is logged in the file psqlodbc_42942.... below. I have included the output from a small psql session showing the table ut32loen and its contents, the .sql that I used for generating the table, and the two log-files that I refered to above. I have tried the same thing without having the 'serial' (sequencer) on the 'id' column, without any luck. Plese forgive me for not compressing and attaching these files, this old mailer is not capable of doing attachments :-(. Please help, ___________________________________________________________________________ / _/ _/_/ / Leif Jensen (leif@danmos.dk) _/ _/ _/ / _/ _/_/ _/_/_/ / _/ _/ _/ _/ _/ / Linux 2.0.36, gcc 2.7.2, wxWin 1.68c _/ _/ _/_/ _/ _/ / _/ _/ _/ _/ _/ / _/_/_/_/ _/_/ _/_/ _/ / (and Windows 95 :-( ___________________________________________________________________________ ---- psql.out: ------------------------------------------------------------------------------- >\d ut32loen Table = ut32loen +----------------------------------+----------------------------------+-------+ | Field | Type | Length| +----------------------------------+----------------------------------+-------+ | id | int4 not null default nextval('u | 4 | | beregnnr | int4 | 4 | | stempling | int4 | 4 | | stemplingstype | int4 | 4 | | beregndato | date | 4 | | startdato | date | 4 | | enddato | date | 4 | | medarbejder | varchar() | 50 | | periodeskema | varchar() | 50 | | kommettid | varchar() | 50 | | gaaettid | varchar() | 50 | | normtimer | float8 | 8 | | pausetimer | float8 | 8 | | tillaegtimer | float8 | 8 | | flextimer | float8 | 8 | | akkordtimer | float8 | 8 | | fravaertimer | float8 | 8 | | varseltimer | float8 | 8 | | bonustimer | float8 | 8 | | beskrivelse | varchar() | 50 | | loensats | varchar() | 50 | | flexkrpar | float8 | 8 | | flextimerpar | float8 | 8 | | funktionaerloen | float8 | 8 | +----------------------------------+----------------------------------+-------+ Index: ut32loen_pkey >select * from ut32loen; id|beregnnr|stempling|stemplingstype|beregndato| startdato| enddato|medarbejder|periodeskema|kommettid|gaaettid| normtimer|pausetimer|tillaegtimer| flextimer|akkordtimer|fravaertimer|varseltimer|bonustimer|beskrivelse|loensats|flexkrpar|flextimerpar|funktionaerloen --+--------+---------+--------------+----------+----------+----------+-----------+------------+---------+--------+----------------+----------+------------+------------------+-----------+------------+-----------+----------+-----------+--------+---------+------------+--------------- 27| 19| 0| 0|05-07-1999|04-12-1999|04-12-1999| 87|No |00:00:00 |00:00:00| 0| 0| 0|-0.550000000046566| 0| 0| 0| 0|Flex |No | 0| 0| 0 28| 19| 3413| 1|05-07-1999|04-12-1999|04-12-1999| 87|No |09:07:11 |16:36:36|6.94999999995343| 0| 0| 0| 0| 0| 0| 0|Normtimer |Løn1 | 0| 0| 0 (2 rows) >\q ---------------------------------------------------------------------------------------------- ---- ut32loen.sql: --------------------------------------------------------------------------- CREATE TABLE "ut32loen" ( "id" int4 DEFAULT nextval('ut32loen_id_seq') NOT NULL, "beregnnr" int4, "stempling" int4, "stemplingstype" int4, "beregndato" date, "startdato" date, "enddato" date, "medarbejder" character varying(50), "periodeskema" character varying(50), "kommettid" character varying(50), "gaaettid" character varying(50), "normtimer" float8, "pausetimer" float8, "tillaegtimer" float8, "flextimer" float8, "akkordtimer" float8, "fravaertimer" float8, "varseltimer" float8, "bonustimer" float8, "beskrivelse" character varying(50), "loensats" character varying(50), "flexkrpar" float8, "flextimerpar" float8, "funktionaerloen" float8); COPY "ut32loen" FROM stdin; 27 19 0 0 05-07-1999 04-12-1999 04-12-1999 87 No 00:00:00 00:00:00 0 0 0 -0.550000000046566 0 0 0 0 Flex No 0 0 0 28 19 3413 1 05-07-1999 04-12-1999 04-12-1999 87 No 09:07:11 16:36:36 6.94999999995343 0 0 0 0 0 0 0 Normtimer Løn1 0 0 0 \. CREATE UNIQUE INDEX "ut32loen_pkey" on "ut32loen" using btree ( "id" "int4_ops" ); ---------------------------------------------------------------------------------------------- ---- psqlodbc_42941....: ---------------------------------------------------------- conn=80021628, SQLDriverConnect( in)='DSN=ut32_be_p;', fDriverCompletion=1 DSN info: DSN='ut32_be_p',server='ljserv',port='5432',dbase='ut32_be_i',user='cdsinfo',passwd='******' readonly='0',protocol='6.4',showoid='1',fakeoidindex='0',showsystable='1' conn_settings='' translation_dll='',translation_option='' Global Options: Version='06.40.0006', fetch=100, socket=4096, unknown_sizes=0, max_varchar_size=254, max_longvarchar_size=8190 disable_optimizer=1, ksqo=1, unique_index=1, use_declarefetch=1 text_as_longvarchar=1, unknowns_as_longvarchar=0, bools_as_char=1 extra_systable_prefixes='dd_;', conn_settings='' conn=80021628, query=' ' conn=80021628, query='set DateStyle to 'ISO'' conn=80021628, query='set geqo to 'OFF'' conn=80021628, query='set ksqo to 'ON'' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C5413C cursor for select oid from pg_type where typname='lo'' conn=80021628, query='fetch 100 in SQL_CUR04C5413C' [ fetched 0 rows ] conn=80021628, query='close SQL_CUR04C5413C' conn=80021628, query='END' conn=80021628, SQLDriverConnect(out)='DSN=ut32_be_p;DATABASE=ut32_be_i;SERVER=ljserv;PORT=5432;UID=cdsinfo;PWD=******;READONLY=0;PROTOCOL=6.4;FAKEOIDINDEX=0;SHOWOIDCOLUMN=1;ROWVERSIONING=0;SHOWSYSTEMTABLES=1;CONNSETTINGS=' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C5413C cursor for SELECT Config, nValue FROM MSysConf' ERROR from backend during send_query: 'ERROR: msysconf: Table does not exist.' conn=80021628, query='ABORT' STATEMENT ERROR: func=SC_execute, desc='', errnum=1, errmsg='Error while executing the query' ------------------------------------------------------------ hdbc=80021628, stmt=80036156, result=0 manual_result=0, prepare=0, internal=0 bindings=0, bindings_allocated=0 parameters=0, parameters_allocated=0 statement_type=0, statement='SELECT Config, nValue FROM MSysConf' stmt_with_params='declare SQL_CUR04C5413C cursor for SELECT Config, nValue FROM MSysConf' data_at_exec=-1, current_exec_param=-1, put_data=0 currTuple=-1, current_col=-1, lobj_fd=-1 maxRows=0, rowset_size=1, keyset_size=0, cursor_type=0, scroll_concurrency=1 cursor_name='SQL_CUR04C5413C' ----------------QResult Info ------------------------------- CONN ERROR: func=SC_execute, desc='', errnum=110, errmsg='ERROR: msysconf: Table does not exist.' ------------------------------------------------------------ henv=81068164, conn=80021628, status=1, num_stmts=16 sock=81068180, stmts=81068220, lobj_type=-999 ---------------- Socket Info ------------------------------- socket=61, reverse=0, errornumber=0, errormsg='(null)' buffer_in=80027956, buffer_out=80032056 buffer_filled_in=3, buffer_filled_out=0, buffer_read_in=2 conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C64208 cursor for select relname, usename, relhasrules from pg_class, pg_user whererelkind = 'r' and relname !~ '^xinv[0-9]+' and int4out(usesysid) = int4out(relowner)order by relname' conn=80021628, query='fetch 100 in SQL_CUR04C64208' [ fetched 100 rows ] conn=80021628, query='fetch 100 in SQL_CUR04C64208' [ fetched 21 rows ] conn=80021628, query='close SQL_CUR04C64208' conn=80021628, query='END' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C64208 cursor for select u.usename, c.relname, a.attname, a.atttypid,t.typname, a.attnum,a.attlen, a.atttypmod, a.attnotnull from pg_user u, pg_class c, pg_attribute a, pg_type t where int4out(u.usesysid)= int4out(c.relowner) and c.oid= a.attrelid and a.atttypid = t.oid and (a.attnum > 0) and c.relname like'ut32loen' order by attnum' conn=80021628, query='fetch 100 in SQL_CUR04C64208' [ fetched 24 rows ] conn=80021628, query='close SQL_CUR04C64208' conn=80021628, query='END' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C7A444 cursor for select u.usename, c.relname, a.attname, a.atttypid,t.typname, a.attnum,a.attlen, a.atttypmod, a.attnotnull from pg_user u, pg_class c, pg_attribute a, pg_type t where int4out(u.usesysid)= int4out(c.relowner) and c.oid= a.attrelid and a.atttypid = t.oid and (a.attnum > 0) and c.relname like'ut32loen' order by attnum' conn=80021628, query='fetch 100 in SQL_CUR04C7A444' [ fetched 24 rows ] conn=80021628, query='close SQL_CUR04C7A444' conn=80021628, query='END' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C64208 cursor for select c.relname, i.indkey, i.indisunique, i.indisclustered frompg_index i, pg_class c, pg_class d where c.oid = i.indexrelid and d.relname = 'ut32loen' and d.oid = i.indrelid' conn=80021628, query='fetch 100 in SQL_CUR04C64208' [ fetched 1 rows ] conn=80021628, query='close SQL_CUR04C64208' conn=80021628, query='END' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C7A444 cursor for SELECT "ut32loen"."id" FROM "ut32loen" ' conn=80021628, query='fetch 100 in SQL_CUR04C7A444' [ fetched 2 rows ] conn=80021628, query='close SQL_CUR04C7A444' conn=80021628, query='END' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C7A444 cursor for SELECT "oid","id","beregnnr","stempling","stemplingstype","beregndato","startdato","enddato","medarbejder","periodeskema","kommettid","gaaettid","normtimer","pausetimer","tillaegtimer","flextimer","akkordtimer","fravaertimer","varseltimer","bonustimer","beskrivelse","loensats","flexkrpar","flextimerpar","funktionaerloen" FROM "ut32loen" WHERE "id" = 27 OR "id" = 28 OR "id" = 28 OR "id" = 28 OR "id" = 28 OR "id" = 28 OR "id" = 28 OR "id" =28 OR "id" = 28 OR "id" = 28' conn=80021628, query='fetch 100 in SQL_CUR04C7A444' [ fetched 2 rows ] conn=80021628, query='close SQL_CUR04C7A444' conn=80021628, query='END' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C5413C cursor for SELECT "oid","id","beregnnr","stempling","stemplingstype","beregndato","startdato","enddato","medarbejder","periodeskema","kommettid","gaaettid","normtimer","pausetimer","tillaegtimer","flextimer","akkordtimer","fravaertimer","varseltimer","bonustimer","beskrivelse","loensats","flexkrpar","flextimerpar","funktionaerloen" FROM "ut32loen" WHERE "id" = 27' conn=80021628, query='fetch 100 in SQL_CUR04C5413C' [ fetched 1 rows ] conn=80021628, query='close SQL_CUR04C5413C' conn=80021628, query='END' conn=80021628, query='BEGIN' conn=80021628, query='DELETE FROM "ut32loen" WHERE "id" = 27 AND "oid" = 199520 AND "beregnnr" = 19 AND "stempling" = 0 AND"stemplingstype" = 0 AND "beregndato" = '1999-05-07' AND "startdato" = '1999-04-12' AND "enddato" = '1999-04-12' AND "medarbejder"= '87' AND "periodeskema" = 'No' AND "kommettid" = '00:00:00' AND "gaaettid" = '00:00:00' AND "normtimer" =0.000000 AND "pausetimer" = 0.000000 AND "tillaegtimer" = 0.000000 AND "flextimer" = -0.550000 AND "akkordtimer" = 0.000000AND "fravaertimer" = 0.000000 AND "varseltimer" = 0.000000 AND "bonustimer" = 0.000000 AND "beskrivelse" = 'Flex'AND "loensats" = 'No' AND "flexkrpar" = 0.000000 AND "flextimerpar" = 0.000000 AND "funktionaerloen" = 0.000000' conn=80021628, query='COMMIT' conn=80021628, SQLDisconnect ---------------------------------------------------------------------------------------------- ---- psqlodbc_42942.....: -------------------------------------------------------------------- conn=80021628, SQLDriverConnect( in)='DSN=ut32_be_p;', fDriverCompletion=1 DSN info: DSN='ut32_be_p',server='ljserv',port='5432',dbase='ut32_be_i',user='cdsinfo',passwd='******' readonly='0',protocol='6.4',showoid='1',fakeoidindex='0',showsystable='1' conn_settings='' translation_dll='',translation_option='' Global Options: Version='06.40.0006', fetch=100, socket=4096, unknown_sizes=0, max_varchar_size=254, max_longvarchar_size=8190 disable_optimizer=1, ksqo=1, unique_index=1, use_declarefetch=1 text_as_longvarchar=1, unknowns_as_longvarchar=0, bools_as_char=1 extra_systable_prefixes='dd_;', conn_settings='' conn=80021628, query=' ' conn=80021628, query='set DateStyle to 'ISO'' conn=80021628, query='set geqo to 'OFF'' conn=80021628, query='set ksqo to 'ON'' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C5413C cursor for select oid from pg_type where typname='lo'' conn=80021628, query='fetch 100 in SQL_CUR04C5413C' [ fetched 0 rows ] conn=80021628, query='close SQL_CUR04C5413C' conn=80021628, query='END' conn=80021628, SQLDriverConnect(out)='DSN=ut32_be_p;DATABASE=ut32_be_i;SERVER=ljserv;PORT=5432;UID=cdsinfo;PWD=******;READONLY=0;PROTOCOL=6.4;FAKEOIDINDEX=0;SHOWOIDCOLUMN=1;ROWVERSIONING=1;SHOWSYSTEMTABLES=1;CONNSETTINGS=' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C5413C cursor for SELECT Config, nValue FROM MSysConf' ERROR from backend during send_query: 'ERROR: msysconf: Table does not exist.' conn=80021628, query='ABORT' STATEMENT ERROR: func=SC_execute, desc='', errnum=1, errmsg='Error while executing the query' ------------------------------------------------------------ hdbc=80021628, stmt=80036156, result=0 manual_result=0, prepare=0, internal=0 bindings=0, bindings_allocated=0 parameters=0, parameters_allocated=0 statement_type=0, statement='SELECT Config, nValue FROM MSysConf' stmt_with_params='declare SQL_CUR04C5413C cursor for SELECT Config, nValue FROM MSysConf' data_at_exec=-1, current_exec_param=-1, put_data=0 currTuple=-1, current_col=-1, lobj_fd=-1 maxRows=0, rowset_size=1, keyset_size=0, cursor_type=0, scroll_concurrency=1 cursor_name='SQL_CUR04C5413C' ----------------QResult Info ------------------------------- CONN ERROR: func=SC_execute, desc='', errnum=110, errmsg='ERROR: msysconf: Table does not exist.' ------------------------------------------------------------ henv=81068164, conn=80021628, status=1, num_stmts=16 sock=81068180, stmts=81068220, lobj_type=-999 ---------------- Socket Info ------------------------------- socket=61, reverse=0, errornumber=0, errormsg='(null)' buffer_in=80027956, buffer_out=80032056 buffer_filled_in=3, buffer_filled_out=0, buffer_read_in=2 conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C64208 cursor for select relname, usename, relhasrules from pg_class, pg_user whererelkind = 'r' and relname !~ '^xinv[0-9]+' and int4out(usesysid) = int4out(relowner)order by relname' conn=80021628, query='fetch 100 in SQL_CUR04C64208' [ fetched 100 rows ] conn=80021628, query='fetch 100 in SQL_CUR04C64208' [ fetched 21 rows ] conn=80021628, query='close SQL_CUR04C64208' conn=80021628, query='END' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C64208 cursor for select u.usename, c.relname, a.attname, a.atttypid,t.typname, a.attnum,a.attlen, a.atttypmod, a.attnotnull from pg_user u, pg_class c, pg_attribute a, pg_type t where int4out(u.usesysid)= int4out(c.relowner) and c.oid= a.attrelid and a.atttypid = t.oid and (a.attnum > 0) and c.relname like'ut32loen' order by attnum' conn=80021628, query='fetch 100 in SQL_CUR04C64208' [ fetched 24 rows ] conn=80021628, query='close SQL_CUR04C64208' conn=80021628, query='END' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C7A5A0 cursor for select u.usename, c.relname, a.attname, a.atttypid,t.typname, a.attnum,a.attlen, a.atttypmod, a.attnotnull from pg_user u, pg_class c, pg_attribute a, pg_type t where int4out(u.usesysid)= int4out(c.relowner) and c.oid= a.attrelid and a.atttypid = t.oid and (a.attnum > 0) and c.relname like'ut32loen' order by attnum' conn=80021628, query='fetch 100 in SQL_CUR04C7A5A0' [ fetched 24 rows ] conn=80021628, query='close SQL_CUR04C7A5A0' conn=80021628, query='END' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C64208 cursor for select c.relname, i.indkey, i.indisunique, i.indisclustered frompg_index i, pg_class c, pg_class d where c.oid = i.indexrelid and d.relname = 'ut32loen' and d.oid = i.indrelid' conn=80021628, query='fetch 100 in SQL_CUR04C64208' [ fetched 1 rows ] conn=80021628, query='close SQL_CUR04C64208' conn=80021628, query='END' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C7A5A0 cursor for SELECT "ut32loen"."id" FROM "ut32loen" ' conn=80021628, query='fetch 100 in SQL_CUR04C7A5A0' [ fetched 2 rows ] conn=80021628, query='close SQL_CUR04C7A5A0' conn=80021628, query='END' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C7A5A0 cursor for SELECT "oid","id","beregnnr","stempling","stemplingstype","beregndato","startdato","enddato","medarbejder","periodeskema","kommettid","gaaettid","normtimer","pausetimer","tillaegtimer","flextimer","akkordtimer","fravaertimer","varseltimer","bonustimer","beskrivelse","loensats","flexkrpar","flextimerpar","funktionaerloen","xmin" FROM "ut32loen" WHERE "id" = 27 OR "id" = 28 OR "id" = 28 OR "id" = 28 OR "id" = 28 OR "id" = 28 OR "id" = 28 OR "id" =28 OR "id" = 28 OR "id" = 28' conn=80021628, query='fetch 100 in SQL_CUR04C7A5A0' [ fetched 2 rows ] conn=80021628, query='close SQL_CUR04C7A5A0' conn=80021628, query='END' conn=80021628, query='BEGIN' conn=80021628, query='declare SQL_CUR04C5413C cursor for SELECT "oid","id","beregnnr","stempling","stemplingstype","beregndato","startdato","enddato","medarbejder","periodeskema","kommettid","gaaettid","normtimer","pausetimer","tillaegtimer","flextimer","akkordtimer","fravaertimer","varseltimer","bonustimer","beskrivelse","loensats","flexkrpar","flextimerpar","funktionaerloen","xmin" FROM "ut32loen" WHERE "id" = 27' conn=80021628, query='fetch 100 in SQL_CUR04C5413C' [ fetched 1 rows ] conn=80021628, query='close SQL_CUR04C5413C' conn=80021628, query='END' conn=80021628, query='BEGIN' conn=80021628, query='DELETE FROM "ut32loen" WHERE "id" = 27 AND "xmin" = 115514' ERROR from backend during send_query: 'ERROR: There is more than one possible operator '=' for types 'xid' and 'int4' You will have to retype this query using an explicit cast' conn=80021628, query='ABORT' STATEMENT ERROR: func=SC_execute, desc='', errnum=1, errmsg='Error while executing the query' ------------------------------------------------------------ hdbc=80021628, stmt=80259088, result=0 manual_result=0, prepare=0, internal=0 bindings=0, bindings_allocated=0 parameters=80168644, parameters_allocated=2 statement_type=3, statement='DELETE FROM "ut32loen" WHERE "id" = ? AND "xmin" = ?' stmt_with_params='DELETE FROM "ut32loen" WHERE "id" = 27 AND "xmin" = 115514' data_at_exec=-1, current_exec_param=-1, put_data=0 currTuple=-1, current_col=-1, lobj_fd=-1 maxRows=0, rowset_size=1, keyset_size=0, cursor_type=0, scroll_concurrency=1 cursor_name='SQL_CUR04C8A810' ----------------QResult Info ------------------------------- CONN ERROR: func=SC_execute, desc='', errnum=110, errmsg='ERROR: There is more than one possible operator '=' for types'xid' and 'int4' You will have to retype this query using an explicit cast' ------------------------------------------------------------ henv=81068164, conn=80021628, status=1, num_stmts=16 sock=81068180, stmts=81068220, lobj_type=-999 ---------------- Socket Info ------------------------------- socket=61, reverse=0, errornumber=0, errormsg='(null)' buffer_in=80027956, buffer_out=80032056 buffer_filled_in=3, buffer_filled_out=0, buffer_read_in=2 conn=80021628, SQLDisconnect ----------------------------------------------------------------------------------------------
pgsql-interfaces by date: