Subject | DML Caching problem |
---|---|
Author | Riho-Rene Ellermaa |
Post date | 2002-03-15T11:01:23Z |
IBO 4.2Fp, BCB5
I'm trying to implement DML caching to my banking app. The application consists of several BPL modules that all share one IB connection.
One case is were there are two users working with the same module (generating payments). This I got to work - one user does something and other users grid is updated OK.
The problem case is were 1 user prepares some payments (shown in grid) and then from menu launches another module that sends these payments to bank and updates their statuses (STATUS="SENT").
It worked when one user viewed payment module and other user sent data to bank, but when 1 user did all, then no updates were visible.
Next I set the UpdateQuery's dcfAnnounceEdit=true, but now I get error "KEYROWNUM field is not found" when I try to post my status change. It's true that I don't have such fields in my tables, but who wants it?
---------------------
Stack:
003173DA Ib_components::TIB_Row::ByName(Self=:013AD518, AFieldName=????)
0031878F Ib_components::TIB_Row::GetColumnOldValue(Self=:013AD518, ColumnName=????)
002F99AF Ib_components::TIB_Dataset::DefaultDMLCacheAnnounceItem(Self=:02EC7768, ADMLCacheItemType=0 /* ditEdit */)
002F98F4 Ib_components::TIB_Dataset::DoDMLCacheAnnounceItem(Self=:02EC7768, ADMLCacheItemType=0 /* ditEdit */)
0031079C Ib_components::TIB_UpdateSQL::SQL_Edit(Self=:031B9E58)
002FA329 Ib_components::TIB_Dataset::SQL_EditRow(Self=:02EC7768)
0030774F Ib_components::TIB_BDataset::SQL_EditRow(Self=:02EC7768)
002FA1F4 Ib_components::TIB_Dataset::SysEditCursorRow(Self=:02EC7768)
003074AF Ib_components::TIB_BDataset::SysEditCursorRow(Self=:02EC7768)
002FE9D8 Ib_components::TIB_Dataset::SysPostEditedRow(Self=:02EC7768)
003073C7 Ib_components::TIB_BDataset::SysPostEditedRow(Self=:02EC7768)
002FBC48 Ib_components::TIB_Dataset::CheckOperation(Self=:02EC7768, Operation={Ib_components::TIB_BDataset::SysPostEditedRow,:02EC7768}, ErrorEvent={NULL,NULL})
002FE5BD Ib_components::TIB_Dataset::SysExecPost(Self=:02EC7768, CancelUnmodified=false)
003039BC Ib_components::TIB_BDataset::SysExecPost(Self=:02EC7768, CancelUnmodified=false)
002FE3CB Ib_components::TIB_Dataset::SysPost(Self=:02EC7768, CancelUnmodified=false, IsRetaining=false)
00303845 Ib_components::TIB_BDataset::SysPost(Self=:02EC7768, CancelUnmodified=false, IsRetaining=false)
002FBD0C Ib_components::TIB_Dataset::Post(Self=:02EC7768)
From Monitor:
EXECUTE STATEMENT
TR_HANDLE = 41365612
STMT_HANDLE = 41255176
PARAMS = [ Version 1 SQLd 3 SQLn 3 <-------- Here I update status
DOM_PAY.STATUS = 2
DOM_PAY.SENDSTATUS = 1
[OLD_ID] = 302 ]
SELECT COUNT: 1
UPDATE COUNT: 1
----*/
/*---
COMMIT RETAINING
TR_HANDLE = 41365612
----*/
/*---
EXECUTE STATEMENT
TR_HANDLE = 19090932
STMT_HANDLE = 19094232
PARAMS = [ Version 1 SQLd 1 SQLn 1
[LASTID] = 60 ]
----*/
/*---
FETCH
STMT_HANDLE = 19094232
FIELDS = [ Version 1 SQLd 6 SQLn 6
IBO$DMLCACHE.DMLID = <n> 0
IBO$DMLCACHE.DMLACTION = <n> ''
IBO$DMLCACHE.KEYFIELDS = <n> ''
IBO$DMLCACHE.KEYVALUE1 = <n> ''
IBO$DMLCACHE.KEYVALUE2 = <NULL>
IBO$DMLCACHE.KEYVALUE3 = <NULL> ]
ERRCODE = 100
----*/
/*---
EXECUTE STATEMENT
TR_HANDLE = 19092100
STMT_HANDLE = 41356920
PARAMS = [ Version 1 SQLd 1 SQLn 1
[LASTID] = 62 ]
----*/
/*---
FETCH
STMT_HANDLE = 41356920
FIELDS = [ Version 1 SQLd 6 SQLn 6
IBO$DMLCACHE.DMLID = <n> 0
IBO$DMLCACHE.DMLACTION = <n> ''
IBO$DMLCACHE.KEYFIELDS = <n> ''
IBO$DMLCACHE.KEYVALUE1 = <n> ''
IBO$DMLCACHE.KEYVALUE2 = <NULL>
IBO$DMLCACHE.KEYVALUE3 = <NULL> ]
ERRCODE = 100
----*/
/*---
COMMIT
TR_HANDLE = 19090932
Riho-Rene Ellermaa
senior programmer
Hansabank
I'm trying to implement DML caching to my banking app. The application consists of several BPL modules that all share one IB connection.
One case is were there are two users working with the same module (generating payments). This I got to work - one user does something and other users grid is updated OK.
The problem case is were 1 user prepares some payments (shown in grid) and then from menu launches another module that sends these payments to bank and updates their statuses (STATUS="SENT").
It worked when one user viewed payment module and other user sent data to bank, but when 1 user did all, then no updates were visible.
Next I set the UpdateQuery's dcfAnnounceEdit=true, but now I get error "KEYROWNUM field is not found" when I try to post my status change. It's true that I don't have such fields in my tables, but who wants it?
---------------------
Stack:
003173DA Ib_components::TIB_Row::ByName(Self=:013AD518, AFieldName=????)
0031878F Ib_components::TIB_Row::GetColumnOldValue(Self=:013AD518, ColumnName=????)
002F99AF Ib_components::TIB_Dataset::DefaultDMLCacheAnnounceItem(Self=:02EC7768, ADMLCacheItemType=0 /* ditEdit */)
002F98F4 Ib_components::TIB_Dataset::DoDMLCacheAnnounceItem(Self=:02EC7768, ADMLCacheItemType=0 /* ditEdit */)
0031079C Ib_components::TIB_UpdateSQL::SQL_Edit(Self=:031B9E58)
002FA329 Ib_components::TIB_Dataset::SQL_EditRow(Self=:02EC7768)
0030774F Ib_components::TIB_BDataset::SQL_EditRow(Self=:02EC7768)
002FA1F4 Ib_components::TIB_Dataset::SysEditCursorRow(Self=:02EC7768)
003074AF Ib_components::TIB_BDataset::SysEditCursorRow(Self=:02EC7768)
002FE9D8 Ib_components::TIB_Dataset::SysPostEditedRow(Self=:02EC7768)
003073C7 Ib_components::TIB_BDataset::SysPostEditedRow(Self=:02EC7768)
002FBC48 Ib_components::TIB_Dataset::CheckOperation(Self=:02EC7768, Operation={Ib_components::TIB_BDataset::SysPostEditedRow,:02EC7768}, ErrorEvent={NULL,NULL})
002FE5BD Ib_components::TIB_Dataset::SysExecPost(Self=:02EC7768, CancelUnmodified=false)
003039BC Ib_components::TIB_BDataset::SysExecPost(Self=:02EC7768, CancelUnmodified=false)
002FE3CB Ib_components::TIB_Dataset::SysPost(Self=:02EC7768, CancelUnmodified=false, IsRetaining=false)
00303845 Ib_components::TIB_BDataset::SysPost(Self=:02EC7768, CancelUnmodified=false, IsRetaining=false)
002FBD0C Ib_components::TIB_Dataset::Post(Self=:02EC7768)
From Monitor:
EXECUTE STATEMENT
TR_HANDLE = 41365612
STMT_HANDLE = 41255176
PARAMS = [ Version 1 SQLd 3 SQLn 3 <-------- Here I update status
DOM_PAY.STATUS = 2
DOM_PAY.SENDSTATUS = 1
[OLD_ID] = 302 ]
SELECT COUNT: 1
UPDATE COUNT: 1
----*/
/*---
COMMIT RETAINING
TR_HANDLE = 41365612
----*/
/*---
EXECUTE STATEMENT
TR_HANDLE = 19090932
STMT_HANDLE = 19094232
PARAMS = [ Version 1 SQLd 1 SQLn 1
[LASTID] = 60 ]
----*/
/*---
FETCH
STMT_HANDLE = 19094232
FIELDS = [ Version 1 SQLd 6 SQLn 6
IBO$DMLCACHE.DMLID = <n> 0
IBO$DMLCACHE.DMLACTION = <n> ''
IBO$DMLCACHE.KEYFIELDS = <n> ''
IBO$DMLCACHE.KEYVALUE1 = <n> ''
IBO$DMLCACHE.KEYVALUE2 = <NULL>
IBO$DMLCACHE.KEYVALUE3 = <NULL> ]
ERRCODE = 100
----*/
/*---
EXECUTE STATEMENT
TR_HANDLE = 19092100
STMT_HANDLE = 41356920
PARAMS = [ Version 1 SQLd 1 SQLn 1
[LASTID] = 62 ]
----*/
/*---
FETCH
STMT_HANDLE = 41356920
FIELDS = [ Version 1 SQLd 6 SQLn 6
IBO$DMLCACHE.DMLID = <n> 0
IBO$DMLCACHE.DMLACTION = <n> ''
IBO$DMLCACHE.KEYFIELDS = <n> ''
IBO$DMLCACHE.KEYVALUE1 = <n> ''
IBO$DMLCACHE.KEYVALUE2 = <NULL>
IBO$DMLCACHE.KEYVALUE3 = <NULL> ]
ERRCODE = 100
----*/
/*---
COMMIT
TR_HANDLE = 19090932
Riho-Rene Ellermaa
senior programmer
Hansabank