Updating records in dataset
Hereafter, changes are all made to a delta (a list of changes).
The dataset looks to all intents and purposes as if the data has changed, but the changes have only been made in memory; they have not been applied to the database.
To make the changes permanent, use , for example, can be used exactly the same way as for cached updates to identify records according to whether they have been inserted, updated, deleted, or unmodified.
This approach is particularly useful for highlighting records in different colors in a grid or showing their status on a status bar.
The order in which the statements are executed is important, because the new product might relate to the new supplier, so the new supplier is inserted first.
The biggest problem with the ADO solution can be seen when a row in a join is deleted. The exact message you see depends on the version of ADO you are using and the database, but it will be along the lines that you cannot delete the row because other records relate to it. In the current scenario, the error message implies that a product cannot be deleted because there are records that relate to the product, but the error occurs whether the product has any related records or not.
Run the program twice (it is the Batch Updates example if you don't want to rebuild it) and begin editing a record in the first copy of the program.
Although for the sake of simplicity I'll demonstrate a conflict using just a single machine, the scenario and subsequent events are unchanged when using multiple machines: As with many ADO error messages, the exact message you receive will depend not only on the version of ADO you are using but also on how closely you followed the example.
This approach offers some performance benefits, but there are more practical reasons why this technology is a necessity: The user might not be connected to the database at the time they make their updates.
In an ADO join, each field object knows which underlying table it belongs to.
If you update a field in the Products table and post the change, then a SQL statements are generated, one for each table.
This behavior is essential for briefcase applications (discussed later in the chapter) and web applications, where there is no permanent connection to the database and, therefore, no way to implement pessimistic locking.
In contrast with pessimistic locking, optimistic locking has the additional considerable benefit that resources are consumed only momentarily; therefore, the average resource usage is much lower, making the database more scalable. Assume you have an ADOData Set connected to the Customer table of the .