2010-09-11 21 views
7

Các Delphi XE dbExpress tutorial trong tài liệu trực tuyến sử dụng ApplyUpdates (-1):Tôi có nên sử dụng ApplyUpdates (0) hoặc ApplyUpdates (-1) không?

// Client data set has provider do update. 
    ClientDataSet1.ApplyUpdates(-1); 

Một số nguồn tin trực tuyến tuy nhiên nói rằng nó sẽ có những thuận lợi để sử dụng ApplyUpdates (0), và nó sẽ là một sai lầm phổ biến hoặc thực hành xấu để sử dụng -1. Điều này có đúng không? Và khi nào và tại sao tôi nên chọn 0 trên -1 làm giá trị cho MaxErrors?

+0

Thật ngạc nhiên khi sử dụng (thường không tốt) sử dụng ApplyUpdates (-1) được tăng sinh, như ApplyUpdates (0) thường tốt hơn nhiều. –

Trả lời

9

-1 Cho phép báo cáo không giới hạn các lỗi, vì vậy mọi bản cập nhật trong đồng bằng ClientDataSet sẽ được thử.

0 Cho phép không có lỗi gì cả, điều đó có nghĩa là không có nỗ lực nào bị lãng phí khi thử cập nhật sau lần thất bại đầu tiên.

-1 có thể phù hợp nếu bạn có nhiều thay đổi không liên quan để bơm qua cơ sở dữ liệu. Ví dụ khi bơm lại những thay đổi từ việc sử dụng ngoại tuyến trong mô hình cặp. Trong kiểu kịch bản này, các bản cập nhật có thể thất bại vì các bản ghi trong thời gian trung bình đã được người dùng khác cập nhật, nhưng việc cập nhật không thành công sẽ ít hoặc không có gì về khả năng các bản cập nhật khác không thành công. Sau đó, có thể sẽ thuận tiện hơn nếu để mọi bản cập nhật được thử và nhận lại một báo cáo về những bản cập nhật không thành công để người dùng có thể giải quyết được.

0 có thể phù hợp hơn trong trường hợp có thể dự đoán được rằng nếu một bản cập nhật không thành công, tất cả hoặc nhiều bản cập nhật khác trong vùng đồng bằng cũng sẽ không thành công. Nó sẽ là "ngu xuẩn" để có ClientDataSet thử các bản cập nhật khác khi khả năng của họ thất bại cũng cao. Phải thừa nhận mặc dù tôi có một thời gian khó khăn suy nghĩ lên một kịch bản trong đó đây sẽ là trường hợp.

+0

Cảm ơn câu trả lời chi tiết! Một điều trở lại trong tâm trí khi tôi đọc nó: iirc cũng có sự khác biệt trong 'rollback', trong khi 0 sẽ không cam kết bất kỳ thay đổi nào đối với cơ sở dữ liệu sao cho client có thể chắc chắn không có gì xấu xảy ra với cơ sở dữ liệu, -1 sẽ cam kết 'càng nhiều càng tốt' - hoặc một cái gì đó như thế. (Tôi vẫn đang tìm kiếm các tài nguyên trực tuyến có mô tả tốt hơn về sự khác biệt này.) – mjn

+0

@mjustin: -1 cam kết càng nhiều càng tốt là một cược khá an toàn. 0 không cam kết bất cứ điều gì sau khi thất bại tôi ít chắc chắn về, nhưng nó là những gì tôi mong chờ ... :) –

Các vấn đề liên quan