jwcolby
jwcolby at colbyconsulting.com
Fri Jun 4 21:37:39 CDT 2004
I think I have stumbled on a record locking bug. For an Insurance company call center, I have built a system of events. Events happen to a claim, the claim is received, it is pended (waiting for action), opened, closed, phone calls made etc. These events may or may not cause a change in status. The receive event causes a received status, the Open event causes an Open status. A Phone cause does not cause a status change. If the claim is in an open status then it remains in an open status etc. The managers can define the events that can occur, whether they cause a status change etc. Via a state machine, I look at the current status and enable specific events. Obviously if a claim is in the open status, then it can have many different events occur, but it cannot have a received event occur because it was already received and can only be received once. If a claim is denied, it can be appealed, but it cannot be closed, because it was never opened. So... There are many tables. There is a claim table ad a claim event table. The claim event is where we log events happening to the claim. It is in this table specifically that I am noticing the locking issue. When I designed this db I ported existing data from thousands of claims. The old system didn't have an event table, it had a bunch of fields such as openedDate1, closedDate1, openedDate2, closedDate2 etc. Hmmmm... Anyway, in order to port the data I did my best to figure out how these fields mapped to events and created a set sequence of: Received Pended Then Opened or denied depending on what was in these fields. Thus each old claim would have at least 3 or 4 or more events to indicate that it was received, that it was opened, closed, possibly opened again, possibly closed again etc. OK... With that groundwork... I have discovered that if I build a little query that pulls all the events for claim 800: EventID ClaimID SomeField And another identical query pulling all events for claim 801 (actually about 10 claims on either side of the claim)... It certainly appears that it is locking the block that the event records are built in. When I start an edit and don't save, other events with PKs close to that event are also locked. I have pulled just the table of events into a new db, and designed these identical queries and I am seeing the same thing. I am convinced it is a bug. I see it on my dev machine at the client (Win2K A2K), my dev machine at home (Win2K, A2K or AXP), but not on another machine running OfficeXP at the client. Truly bizarre. I cut most of the fields out of the record including the only memo, both to drop the size of the test db as well as to see if any of these other fields were "causing" the problems. No help, same symptoms. The current db is just that one table and the two queries and is absolutely reproducible on my machine here at my home office, running Win2K A2K SP3 or Axp I have been under the impression that Access no longer locks an entire block, but will lock just the individual record. This testing seems to indicate that is not true. I have this db available for anyone who would like to look at this. My users have complained of locking issues and I have been unable to explain the goings on given my understanding that A2K and above locked just the edited record. Perhaps this is not always true? John W. Colby www.ColbyConsulting.com