Hi Ultimately, either mechanism will result in locks being held on the affected records until you commit the transaction. In fact, because the looped approach takes longer to execute the locks will actually be held longer using this approach.
Malcolm From: Axapta-Knowledge-Village@yahoogroups.com [mailto:axapta-knowledge-vill...@yahoogroups.com] On Behalf Of thomas 'znal' ramdhan Sent: 01 September 2010 10:34 To: Axapta-Knowledge-Village@yahoogroups.com Subject: Re: [Axapta-Knowledge-Village] delete_from vs loop delete Hi Burtt, Thanks for brief explanation :) I have declare all suitable index for my table, but sometimes still returns me lock error. If I use batch helpers, for sure I get more lock issue in activity monitor. If this is the case, is loop delete the righteous solution ? Thanks and Regards, Afin On Wed, Sep 1, 2010 at 4:07 PM, Malcolm Burtt <malcolm.bu...@touchstone.co.uk<mailto:malcolm.bu...@touchstone.co.uk>> wrote: Hi The difference between the two approaches is in the speed of execution. Assuming that the tables delete() method has not been overridden and that there is no database logging of deletes for the table then "delete_from" x++ code will generate a single database round trip which will delete all of the records matched by the where clause. The looping approach will issue one database round trip for each record to be deleted in addition to the initial select and is, consequently, slower than the "delete_from" approach. It's worth noting that "delete_from" will automatically revert to a looped approach if the table's delete() method has been overridden or AX has been configured to log deletes for the table. This can be avoided by call the table's skipDataMethod() and skipDatabaseLog() passing "true" as the argument to each of these calls but you can only do that if you are sure that the code in the delete() method isn't needed in this instance and that its okay to not log the delete. You might have seen table locks with "delete_from" if your where clause has no viable index. In such cases the database has no choice but to lock the whole table while it deletes the rows. My advice: use "delete_from" wherever you can but, as with all database access, make sure you have suitable indexes. Regards Malcolm Burtt Touchstone Group People - Partnership - Solutions From: Axapta-Knowledge-Village@yahoogroups.com<mailto:Axapta-Knowledge-Village@yahoogroups.com> [mailto:Axapta-Knowledge-Village@yahoogroups.com<mailto:Axapta-Knowledge-Village@yahoogroups.com>] On Behalf Of thomas 'znal' ramdhan Sent: 01 September 2010 06:20 To: Axapta-Knowledge-Village@yahoogroups.com<mailto:Axapta-Knowledge-Village@yahoogroups.com> Subject: [Axapta-Knowledge-Village] delete_from vs loop delete Dear all, I'd like to ask about delete issue in AX. AX has 2 way to delete records by using 'delete_from' or below code while select forUpdate * from tableA { tableA.doDelete(); } Which one do you prefer to delete some records from both above code ? Sometimes, I found locked table if I use delete_from code. Thanks and Regards, Afin -- ne faites pas une limite pour votre competence ------------------------------------------------------------------------- bilden Sie nicht eine Begrenzung fur Ihre Fahigkeit ------------------------------------------------------------------------- non faccia un limite per la vostra abilita ------------------------------------------------------------------------- --(-@ -- ne faites pas une limite pour votre competence ------------------------------------------------------------------------- bilden Sie nicht eine Begrenzung fur Ihre Fahigkeit ------------------------------------------------------------------------- non faccia un limite per la vostra abilita ------------------------------------------------------------------------- --(-@