2008-12-02 6 views
3

Est-il possible d'obtenir un rapport des enregistrements mis à jour à l'aide d'une requête de mise à jour, sans utiliser un jeu d'enregistrements?Comment afficher le nombre d'enregistrements mis à jour par une requête de mise à jour?

Ex:

sqltext = update table employees set bonus = 0 where salary > 50000
DoCmd.RunSQL sqltext

Après cette requête est exécutée, il est possible d'obtenir le nom des employés pour lesquels cette requête de mise à jour a été effectuée?

Répondre

4

Il est jamais une bonne idée d'utiliser DoCmd.RunSQL car il génère une invite (que vous devez désactiver si vous ne voulez pas), et il complète les mises à jour, même si des erreurs se produisent et ne signale pas les erreurs. Beaucoup mieux est de le remplacer par une fonction qui exécute la même SQL:

Public Function SQLRun(strSQL As String) As Boolean 
On Error GoTo errHandler 

    CurrentDB.Execute strSQL, dbFailOnError 
    SQLRun= True 

exitRoutine: 
    Exit Function 

errHandler: 
    MsgBox err.Number & ": " & err.Description, vbExclamation, "Error in SQLRun()" 
    Resume exitRoutine 
End Function 

Une fois que vous avez placé cela dans un module public, vous pouvez facilement faire une recherche globale et remplacer pour DoCmd.RunSQL de le remplacer par SQLRun.

EDIT: Une autre version de cette fonction qui renvoie le nombre d'enregistrements affectés est here.

1

Je ne vois aucun moyen pour l'instant d'obtenir l'information après que la requête de mise à jour a été exécutée, sauf si vous avez un autre champ distinctif (peut-être un champ de date mis à jour). Pourquoi ne pas exécuter une requête de sélection pour cela et exécuter un rapport hors de ces données, puis exécutez la requête de mise à jour pour modifier les valeurs de «bonus». Faites-moi savoir si cela aide! JFV

+0

Je ne suis pas sûr de cette méthode car il y a des mises à jour des chances sur certains dossiers peuvent échouer à haapen mais ils peuvent être interceptées par la requête de sélection – tksy

+0

tant que les données ne sont pas très volatile, le 'Select' et le 'Update' devraient retourner les mêmes enregistrements. Si la mise à jour échoue, vous risquez d'avoir d'autres problèmes avec les données. – JFV

+0

Vous pouvez ouvrir la base de données Access pour un accès exclusif pour exécuter la sélection et la mise à jour, juste pour vous assurer que personne ne soit entré et n'ait modifié vos données entre les requêtes. –

2

Je sais c'est une vieille question, mais il n'y avait pas de réponse qui a directement répondu à la question OP (Je suis arrivé ici via Google Top 3 résultats en essayant de se rappeler la syntaxe) Si vous utilisez la méthode Execute, vous pouvez obtenir le nombre d'enregistrements qui sont directement concernés

sqltext = "update table employees set bonus = 0 where salary > 50000" 
CurrentDb.Execute sqltext 
AffectedRows = CurrentDb.RecordsAffected 
'Optional Notification 
    MsgBox CStr(AffectedRows) & " records were affected by this SQL statement." 
Questions connexes