2010-08-20 19 views
1

J'ai un formulaire ASP qui contient un certain nombre d'enregistrements que je veux modifier puis mettre à jour. Actuellement, les mises à jour se déroulent comme une mise à jour un à la fois via des DLL qui créent simplement une instruction SQL et appellent la base de données pour chaque enregistrement.Création d'une mise à jour par lots dans ASP classique et ADO

Maintenant, je dois placer une coche dans le SQL pour m'assurer que je ne me débarrasse pas du dernier type d'emplacement d'un bâtiment donné. Si j'ai 5 lieux de travail et si j'ai essayé de transformer tous ces lieux de travail en bureaux, je devrais avoir une erreur disant que j'ai besoin d'au moins un lieu de travail par étage, et le SQL devrait se terminer sans mettre à jour les lignes. Actuellement, il mettrait à jour chaque ligne jusqu'à la dernière, puis lancer l'erreur. Quelqu'un m'a fait remarquer que je devrais essayer de travailler par lots le SQL ou la mise à jour, mais je ne sais pas comment je devrais faire à ce sujet. Des indices, s'il vous plait?

+0

Voulez-vous dire créer une transaction SQL afin de permettre une restauration en cas de problème? Pourriez-vous détailler un peu plus la phrase: «pour m'assurer que je ne me débarrasse pas du dernier type d'emplacement d'un bâtiment donné»? – jdecuyper

+0

J'ai essayé de le verrouiller par transaction, mais cela ne semblait pas fonctionner. Comme dans, il m'a donné des erreurs lorsque j'ai essayé de mettre à jour plus d'un enregistrement. Ce que je veux dire par cette déclaration ... J'ai des endroits à l'intérieur d'un étage d'un immeuble. Ils ont un type (lieu de travail, bureau, cuisine, ect). Chaque étage doit avoir au moins un lieu de travail, je dois donc empêcher l'utilisateur de faire des changements qui supprimeraient le dernier lieu de travail d'un étage. S'ils essaient de faire un grand nombre de changements et d'essayer de soumettre ces changements, et que ces changements feraient disparaître le dernier lieu de travail, je dois arrêter TOUS ces changements. – CrystalBlue

Répondre

0

Vous pouvez enchaîner plusieurs commandes et lancer une erreur si certaines règles commerciales ne

Quelque chose comme (pseudo-code, non testé):

For i = 0 to ubound(Items) - 1 
    stmt = stmt + " UPDATE BuildingFloor set Type=" + Items(i).Type + " WHERE ID=" + Items(i).ID + ";" 
next 
stmt = stmt + " IF NOT EXISTS(SELECT * FROM BuildingFloor" 
stmt = stmt + " WHERE Type = 'WorkPlace') RAISERROR ('Must have a workplace', 16, 1);" 

Si vous exécutez le lot, toutes les phrases seront être exécuté dans une transaction et la base de données ne sera pas mise à jour si une erreur est générée.

Clause de non-responsabilité: Juste une idée, pas testé.