Perhaps you need to design an overlap into your incremental load.
Load the from the source database for the past N days, months or hours, and then append data from the stored QVD using a where not exists clause to prevent duplicate data. Finally re-write the updated qvd.
I assume the QVD corruption is caused by the server crash occurring during the re-write of the qvd.
I would also consider investigating the cause of the server crash and resolving the issue, as from the wording of your question this seems to be a regular occurrence!
My issue resolved by qlikview tech help.
The server crushes and the data lose were related to each other. apparently when the memory reached it's limit of 90% the qvds were stored partially because there was not enough memory to complete the save, and the server restarted itself to clear the cashe memory.
So the solution is:
1. Remove all preloads so it won't stay in the memory.
2. Clear cash every night by adding the row ClearCacheTimesPerDay=1 to the settings.ini file