Fonction JetAttachDatabase

S’applique à : Windows | Windows Server

Fonction JetAttachDatabase

La fonction JetAttachDatabase joint un fichier de base de données à utiliser avec une base de données instance. Pour pouvoir utiliser la base de données, vous devez l’ouvrir par la suite avec JetOpenDatabase.

    JET_ERR JET_API JetAttachDatabase(
      __in          JET_SESID sesid,
      __in          const tchar* szFilename,
      __in          JET_GRBIT grbit
    );

Paramètres

sesid

Contexte de session de base de données à utiliser pour l’appel d’API.

szFilename

Nom de la base de données à attacher.

grbit

Groupe de bits qui spécifient zéro ou plusieurs des options suivantes.

Valeur

Signification

JET_bitDbDeleteCorruptIndexes

Si JET_paramEnableIndexChecking a été défini, tous les index sur les données Unicode sont supprimés. Pour plus d’informations, consultez la section Notes.

JET_bitDbDeleteUnicodeIndexes

Tous les index sur les données Unicode sont supprimés, quel que soit le paramètre de JET_paramEnableIndexChecking. Pour plus d’informations, consultez la section Notes.

JET_bitDbUpgrade

Obsolète. Ne pas utiliser.

JET_bitDbReadOnly

Empêche les modifications apportées à la base de données.

Valeur renvoyée

Cette fonction retourne le type de données JET_ERR avec l’un des codes de retour suivants. Pour plus d’informations sur les erreurs ESE possibles, consultez Erreurs du moteur de stockage extensible et Paramètres de gestion des erreurs.

Code de retour

Description

JET_errSuccess

L’opération s’est terminée avec succès.

JET_errBackupInProgress

L’attachement d’une base de données n’est pas autorisé pendant une sauvegarde.

JET_errDatabaseFileReadOnly

Le fichier de base de données spécifié par szFilename doit être accessible en écriture. L’attribut Read-Only ne doit pas être défini et le processus en cours d’exécution doit disposer de privilèges suffisants pour écrire dans le fichier.

JET_errDatabaseInUse

Le fichier de base de données est déjà ouvert par un autre processus.

JET_errDatabaseInvalidPath

Un chemin d’accès non valide a été indiqué dans szFilename. szFilename doit être non NULL et faire référence à un chemin d’accès valide.

JET_errDatabaseSharingViolation

Le fichier de base de données a déjà été attaché par une autre session.

JET_errFileAccessDenied

Le moteur de base de données ne peut pas ouvrir le fichier de base de données. Le fichier peut être utilisé par un autre processus ou l’appelant peut ne pas avoir les privilèges suffisants pour ouvrir le fichier.

JET_errFileNotFound

Le fichier fourni dans szFilename n’existe pas.

JET_errPrimaryIndexCorrupted

Il existe une erreur avec l’index principal. Il peut s’agir d’une altération physique (par exemple, une altération du disque ou de la mémoire). Il peut également être retourné lors de l’attachement d’une base de données modifiée pour la dernière fois sur un système d’exploitation plus ancien et l’index principal se trouve sur une colonne avec des données Unicode. Consultez les remarques pour plus d’informations sur les index sur les données Unicode.

JET_errSecondaryIndexCorrupted

Il existe une erreur avec un index secondaire. Il peut s’agir d’une altération physique (par exemple, une altération du disque ou de la mémoire). Il peut également être retourné lors de l’attachement d’une base de données modifiée pour la dernière fois sur un système d’exploitation plus ancien et un index secondaire se trouve sur une colonne avec des données Unicode. Consultez les remarques pour plus d’informations sur les index sur les données Unicode. Les index secondaires sont entièrement reconstruits lorsqu’une base de données est défragmentée avec un utilitaire hors connexion à l’aide de la commande suivante : esentutl -d.

JET_errTooManyAttachedDatabases

Seul un nombre fini de bases de données peut être attaché par instance. La limite est actuellement de sept bases de données par instance.

JET_wrnDatabaseAttached

Avertissement non fatal indiquant que le fichier de base de données a déjà été attaché par cette session.

Notes

L’appel de JetAttachDatabase revient à appeler JetAttachDatabase2 et à transmettre une valeur de zéro, ce qui signifie qu’il n’y a pas de limite, pour le paramètre cpgDatabaseSizeMax .

L’attachement d’une base de données accessible en écriture (autrement dit, si JET_bitDbReadOnly n’a pas été spécifié dans le paramètre grbit ) ouvre le fichier exclusivement au niveau du système d’exploitation. Aucun autre processus ne pourra ouvrir le fichier. Il est possible pour plusieurs processus d’attacher une base de données unique en l’ouvrant en mode lecture seule.

Le fichier de base de données est détaché à l’aide de JetDetachDatabase ou JetDetachDatabase2.

Paramètres de vérification d’index

Différentes versions de Windows normalisent le texte Unicode de différentes manières. Cela signifie que les index créés sous une version de Windows peuvent ne pas fonctionner sur d’autres versions.

Avant Windows Server 2003, lorsque la version du système d’exploitation a changé (y compris l’installation d’un Service Pack), chaque index sur les données Unicode était dans un état potentiellement endommagé.

Les index créés dans Windows Server 2003 et versions ultérieures sont marqués avec la version de normalisation Unicode avec laquelle ils ont été générés. Les index plus anciens ne contiennent aucune information de version. La plupart des changements de normalisation Unicode consistent à ajouter de nouveaux caractères, les points de code qui étaient auparavant non définis sont désormais définis et normalisés différemment. Par conséquent, si des données binaires sont stockées dans une colonne Unicode, elles se normalisent différemment à mesure que de nouveaux points de code sont définis.

Depuis Windows Server 2003, le moteur de base de données ESE suit les entrées d’index Unicode qui contiennent des points de code non définis. Ils peuvent être utilisés pour corriger un index lorsque l’ensemble de caractères Unicode définis change.

Ces paramètres contrôlent ce qui se passe lorsque le moteur de base de données ESE s’attache à une base de données qui a été utilisée pour la dernière fois sous une autre build du système d’exploitation. La version du système d’exploitation est marquée dans l’en-tête de base de données.

Si JET_paramEnableIndexChecking a la valeur TRUE et que la base de données contient des index potentiellement endommagés :

  • JetAttachDatabase supprime les index potentiellement endommagés si grbit contient JET_bitDbDeleteCorruptIndexes

  • JetAttachDatabaseretourne une erreur si grbit ne contient pas de JET_bitDbDeleteCorruptIndexes et si certains index doivent être supprimés.

Si JET_paramEnableIndexChecking a la valeur FALSE :

  • JetAttachDatabase ignore les index potentiellement endommagés et retourne JET_errSuccess (en supposant qu’il n’y ait pas d’autres erreurs).

Windows Server 2003 et versions ultérieures : si JET_paramEnableIndexChecking n’a pas été réinitialisé, la table de correction interne est utilisée pour corriger les entrées d’index. Cela peut ne pas corriger toutes les altérations d’index, mais sera transparente pour l’application.

Si la base de données a été attachée en lecture seule, l’index ne peut pas être fixe ou supprimé. Dans ce cas, l’API retourne plutôt une erreur, telle que JET_errSecondaryIndexCorrupted ou JET_errPrimaryIndexCorrupted.

Spécifications

Condition requise Valeur

Client

Nécessite Windows Vista, Windows XP ou Windows 2000 Professionnel.

Serveur

Nécessite Windows Server 2008, Windows Server 2003 ou Windows 2000 Server.

En-tête

Déclaré dans Esent.h.

Bibliothèque

Utilisez ESENT.lib.

DLL

Nécessite ESENT.dll.

Unicode

Implémenté en tant que JetAddColumnW (Unicode) et JetAddColumnA (ANSI).

Voir aussi

Fichiers du moteur de stockage extensibles
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JetAttachDatabase2
JetCreateDatabase
JetDetachDatabase
JetDetachDatabase2
JetOpenDatabase
JetSetSystemParameter