2009-08-03 9 views
1

J'ai un fichier de base de données d'accès 2003 avec des centaines de requêtes. Je voudrais renommer tous les tableaux référencés à partir de mes requêtes basées sur une conditionRenommer par programme les tables dans les requêtes Access

If tableNameInQuery = "tableName" Then 

    tableNameInQuery = "newTableName" 

End If 

Toutes les suggestions ou articles seraient super.

Merci

PS un exemple dans C# ou VB.NET serait apprécié

Répondre

6

J'ai un sous VBA & rapide sale qui fait ce que je pense que vous voulez. (Pouvez-vous le traduire dans l'une de vos langues préférées?) Vous pouvez l'essayer avec une copie de votre base de données. (NE PAS essayer avec la seule copie d'une base de données que vous souhaitez conserver!)

Pour substituer « tblBar » pour « tblFoo » dans vos requêtes, vous pouvez l'exécuter à partir de la fenêtre immédiate VBE (de accès, Ctrl +g vous y) comme ceci:

call swapTblNamesInQueryDefs("tblFoo", "tblBar") 

Pour enregistrer réellement les définitions de requêtes modifiées, appelez-le comme suit:

call swapTblNamesInQueryDefs("tblFoo", "tblBar", "savechanges") 

Le code:

Public Sub swapTblNamesInQueryDefs(ByVal pstrFind As String, _ 
ByVal pstrReplace As String, _ 
Optional ByVal pstrMode As String = "DisplayOnly") 

Dim qd As QueryDef 
Dim re As Object 
Dim strSql As String 

Set re = CreateObject("vbscript.regexp") 
re.Global = True 
re.IgnoreCase = True 

re.Pattern = "\b" & pstrFind & "\b" 

For Each qd In CurrentDb.QueryDefs 
    If Left$(qd.Name, 1) <> "~" Then 
     Debug.Print qd.Name 
     Debug.Print "Before: " & qd.SQL 
     strSql = re.Replace(qd.SQL, pstrReplace) 
     Debug.Print "After: " & strSql 
     'only save the modified SQL statement if called 
     'with SaveChanges parameter 
     'If pstrMode = "SaveChanges" Then 
     If StrComp(pstrMode, "SaveChanges", vbTextCompare) = 0 Then 
      qd.SQL = strSql 
     End If 
     Debug.Print String(20, "-") 
    End If 
Next qd 
Set re = Nothing 
Set qd = Nothing 
End Sub 

Edit: évaluation Changement de pstrMode pour garantir la comparaison de insensibles à la casse (dans le module de cas comprend "Option Compare Binary").

+0

Bon code! Je ne peux pas dire que j'en ai besoin (comme j'ai 3 options de recherche et de remplacement à choisir), mais je peux voir qu'il est utile à un moment donné pour moi, et est certainement utile pour l'OP. –

+0

Merci Hans, VBA est également une option à ma disposition. Je vais essayer le code dans un jour ou deux et faire un rapport. Quels compléments de recherche et de remplacement utilisez-vous David? – Ben

+0

J'ai essayé le code hier et ça a très bien fonctionné. Merci. – Ben

0

Vous pouvez consulter Black Moshannon's Speed Ferret. Cet outil n'est pas gratuit mais je pense qu'il est relativement peu coûteux et vous donnera un nom de table TRÈS fiable. Si votre temps vaut la peine d'y jeter un coup d'œil. Une chose à retenir si vous utilisez Speed ​​Ferret ou un autre outil similaire ... et c'est l'ORDRE que vous renommez les tables est assez important. Assurez-vous d'y réfléchir.

Seth Spearman

+0

Je ne pense pas que je me suis fait clair, je veux renommer la référence à la table dans la requête. Pas la table elle-même? Va vérifier le lien maintenant. Merci Ben – Ben

+0

En d'autres termes, vous voulez changer quelle table est référencée à l'intérieur d'une requête. Pas le nom de la table. Vous pouvez toujours le faire avec Speed ​​Ferret. –

+0

oui c'est correct. La dernière version de Speed ​​Ferret ne supporte que l'accès en 2002. – Ben

Questions connexes