Re: Help on resolving record conflicts with ADO
- From: "Bill Hicks" <waylien_no_spam@xxxxxxxxx>
- Date: Fri, 24 Feb 2006 01:13:41 +0800
Thanks for the input, Steve.
I'm no expert, but it seems like having to write my own update statements
(and also needing to know what fields the user has updated) seems a bit
extreme. Is there any way to be certain the upate statement ADO is
constructing is being put together with the proper key information, so you
don't have to go through all that extra work? I've been told BetterADO is
one way to go, but I'm running into similar problems.
"Steve Zimmelman" <skz@xxxxxxxxxxxxxxxxxx> wrote in message
news:43fde88a$1@xxxxxxxxxxxxxxxxxxxxxxxxx
Assuming you are using SQL Server...
When ADO Posts, it constructs an SQL update statement. It uses the
primary and the fields that have changed in the Where clause. Something
like:
Update MyTable
Set SomeField = NewValue
Where
PrimaryKey = SomeValue
And SomeField = OldValue
If Another user has changed the value of SomeField, then the Update
statement fails because it can no longer find that value.
I stopped using the Post method in ADO and construct my own update
statements that only use the PrimaryKey as in "Where" clause. The trick
is knowing what fields the user changed so you can dynamically create an
Update statement without using every field in the table.
Take a look at this, it might give you some ideas.
http://www.skzimmelman.com/Articles/TFields_WhatChanged.htm
-Steve-
"Bill Hicks" <waylien_no_spam@xxxxxxxxx> wrote in message
news:43fd6f59$1@xxxxxxxxxxxxxxxxxxxxxxxxx
I am using Delphi 7, SQL2000, ADO.
I am trying to find a clean way to resolve update conflicts between users
and am stuck. I have a SQL table that has a primary key. If a user
attempts to update a record that's already been updated by another user,
the OnPostError event fires and allows me to handle the conflict. So far
so good. Now, if I try to run the following code because the user has
choosen to overwrite the other users changes, I run into the same
OnPostError as soon as the retry occurs. It seems as though there is not
enough information to complete the update.
TAdoDataset(DataSet).UpdateCursorPos;
TAdoDataset(DataSet).Properties['Update Criteria'].Value :=
adCriteriaKey;
TAdoDataset(DataSet).RecordSet.Resync(adAffectCurrent,
adResyncUnderlyingValues);
Action := daRetry;
I thought that setting ['Update Criteria'].Value := adCriteriaKey was
going to allow me to use just the key field to make the update, but it
seems like ADO still cannot locate the record in question.
Thanks in advance.
Bill Hicks
.
- References:
- Help on resolving record conflicts with ADO
- From: Bill Hicks
- Re: Help on resolving record conflicts with ADO
- From: Steve Zimmelman
- Help on resolving record conflicts with ADO
- Prev by Date: Re: Help on resolving record conflicts with ADO
- Next by Date: Re: ADO and TCPIP Connections
- Previous by thread: Re: Help on resolving record conflicts with ADO
- Next by thread: Re: Help on resolving record conflicts with ADO
- Index(es):
Relevant Pages
|