Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Si vous souhaitez utiliser vos applications Access existantes avec SQL Server, vous pouvez lier vos tables Access d’origine aux tables SQL Server ou Azure SQL migrées. La liaison modifie votre base de données Access afin que vos requêtes, formulaires, rapports et pages d’accès aux données utilisent les données dans SQL Server ou Azure SQL Database au lieu des données de votre base de données Access.
Note
Vos tables Access restent dans Access, mais ne sont pas mises à jour avec SQL Server ou les mises à jour Azure SQL. Après avoir lié les tables et vérifié les fonctionnalités, vous pouvez supprimer vos tables Access.
Lier les tables Access et SQL Server
Lorsque vous liez une table Access à une table SQL Server ou Azure SQL, le moteur de base de données Jet stocke les informations de connexion et les métadonnées de table, mais les données sont stockées dans SQL Server ou Azure SQL. Cette liaison permet à vos applications Access de fonctionner sur les tables Access, même si les tables et données réelles se trouvent dans SQL Server ou Azure SQL.
Note
Si vous utilisez l’authentification SQL Server, votre mot de passe est stocké en texte clair sur les tables Access liées. Utilisez plutôt l’authentification Windows.
Dans l’Explorateur de métadonnées Access, sélectionnez les tables à lier.
Cliquez avec le bouton droit sur Tables, puis sélectionnez Lien.
L’Assistant Migration SQL Server (SSMA) pour Access sauvegarde la table Access d’origine et crée une table liée.
Après avoir lié les tables, les tables de SSMA s’affichent avec une petite icône de lien. Dans Access, les tables s’affichent avec une icône « liée », qui est un globe avec une flèche pointant vers celle-ci.
Lorsque vous ouvrez une table dans Access, les données sont récupérées à l’aide d’un curseur d’ensemble de clés. Par conséquent, pour les tables volumineuses, les données ne sont pas récupérées en même temps. Toutefois, lorsque vous parcourez la table, Access récupère plus de données si nécessaire.
Important
Pour lier des tables Access à une base de données Azure, vous avez besoin de SQL Server Native Client (SNAC) version 10.5 ou ultérieure. Obtenez la dernière version de SNAC à partir de Microsoft SQL Server 2008 R2 Feature Pack. Le SNAC a été supprimé dans SQL Server 2022 (16.x).
Dissocier les tables Access
Lorsque vous dissociez une table Access à partir d’une table SQL Server ou Azure SQL, SSMA restaure la table Access d’origine et ses données.
Dans l’Explorateur de métadonnées Access, sélectionnez les tables à dissocier.
Cliquez avec le bouton droit sur Tables, puis sélectionnez Dissocier.
Lier des tables à un autre serveur
Si vous liez les tables Access à une instance SQL Server et que vous souhaitez ultérieurement modifier les liens vers une autre instance, vous devez lier à nouveau les tables.
Dans l’Explorateur de métadonnées Access, sélectionnez les tables à dissocier.
Cliquez avec le bouton droit sur Tables , puis sélectionnez Dissocier.
Sélectionnez le bouton Reconnecter à SQL Server .
Connectez-vous à l’instance de SQL Server ou d’Azure SQL à laquelle vous souhaitez lier les tables Access.
Dans l’Explorateur de métadonnées Access, sélectionnez les tables à lier.
Cliquez avec le bouton droit sur Tables, puis sélectionnez Lien.
Mettre à jour les tables liées
Si vous modifiez les structures des tables SQL Server ou Azure SQL, vous pouvez dissocier puis relier les tables dans SSMA à l’aide des procédures présentées précédemment dans cet article. Vous pouvez également mettre à jour les tables à l’aide d’Access.
Ouvrez la base de données Access.
Dans la liste Objets , sélectionnez Tables.
Cliquez avec le bouton droit sur une table liée, puis sélectionnez Gestionnaire de tables liées.
Cochez la case en regard de chaque table liée que vous souhaitez mettre à jour, puis sélectionnez OK.
Problèmes de post-migration possibles
Les sections suivantes répertorient les problèmes qui peuvent se produire dans les applications Access existantes après avoir migré des bases de données d’Access vers SQL Server ou Azure SQL, puis liez les tables. Les sections décrivent également les causes et les résolutions de ces problèmes.
Performance lente avec des tables liées
Cause : Certaines requêtes peuvent être lentes après la montée en puissance pour les raisons suivantes :
L’application dépend des fonctions qui n’existent pas dans SQL Server ou Azure SQL. Jet télécharge les tables localement pour exécuter une requête
SELECT.Jet envoie des requêtes qui mettent à jour ou suppriment de nombreuses lignes en tant que requête paramétrable pour chaque ligne.
Résolution : Convertissez les requêtes qui s'exécutent lentement en requêtes pass-through, procédures stockées ou vues. La conversion en requêtes directes présente les problèmes suivants :
Vous ne pouvez pas modifier les requêtes directes. Vous devez modifier le résultat de la requête ou ajouter de nouveaux enregistrements de manière alternative. Par exemple, vous pouvez avoir des boutons De modification ou d’ajout explicites sur votre formulaire lié à la requête.
Les requêtes directes ne prennent pas en charge la saisie utilisateur, mais certaines requêtes nécessitent une saisie utilisateur. Vous pouvez utiliser Visual Basic pour Applications (VBA) pour demander des paramètres ou obtenir une entrée utilisateur à l’aide d’un formulaire. Dans les deux cas, le code VBA envoie la requête avec l’entrée utilisateur au serveur.
Les colonnes de création automatique ne sont pas mises à jour tant que l’enregistrement n’est pas mis à jour
Cause : après avoir appelé RecordSet.AddNew, la colonne d'incrémentation automatique est disponible avant la mise à jour de l’enregistrement. Cette condition n’est pas vraie dans SQL Server ou Azure SQL. La nouvelle valeur de la colonne d’identité est disponible uniquement après l’enregistrement du nouvel enregistrement.
Résolution : exécutez le code Visual Basic pour Applications (VBA) suivant avant d’accéder au champ d’identité :
Recordset.Update
Recordset.Move 0,
Recordset.LastModified
Les nouveaux enregistrements ne sont pas disponibles
Cause : lorsque vous ajoutez un enregistrement à une table SQL Server ou Azure SQL à l’aide de VBA, si le champ d’index unique de la table a une valeur par défaut et que vous n’affectez pas de valeur à ce champ, le nouvel enregistrement n’apparaît pas tant que vous n’avez pas rouvert la table dans SQL Server ou Azure SQL. Si vous essayez d’obtenir une valeur à partir du nouvel enregistrement, vous recevez le message d’erreur suivant :
Run-time error '3167' Record is deleted.
Résolution : lorsque vous ouvrez la table SQL Server ou Azure SQL à l’aide du code VBA, incluez l’option dbSeeChanges , comme dans l’exemple suivant :
Set rs = db.OpenRecordset("TestTable", dbOpenDynaset, dbSeeChanges)
Après la migration, certaines requêtes n’autorisent pas l’utilisateur à ajouter un nouvel enregistrement
Cause : si une requête n’inclut pas toutes les colonnes incluses dans un index unique, vous ne pouvez pas ajouter de nouvelles valeurs à l’aide de la requête.
Résolution : vérifiez que toutes les colonnes incluses dans au moins un index unique font partie de la requête.
Vous ne pouvez pas modifier un schéma de table liée à l’aide d’Access
Cause : après la migration de données et la liaison de tables, vous ne pouvez pas modifier le schéma d’une table dans Access.
Résolution : modifiez le schéma de table à l’aide de SQL Server Management Studio, puis mettez à jour le lien dans Access.
La fonctionnalité lien hypertexte est perdue après la migration des données
Cause : une fois les données migrées, les liens hypertexte dans les colonnes perdent leurs fonctionnalités et deviennent des colonnes nvarchar(max) simples.
Résolution : Aucun.
Access ne prend pas en charge certains types de données SQL Server
Cause : si vous mettez à jour vos tables SQL Server ou Azure SQL pour inclure des types de données que Access ne prend pas en charge, vous ne pouvez pas ouvrir la table dans Access.
Résolution : Définissez une requête Access qui retourne uniquement des lignes avec des types de données pris en charge.