Função JetAttachDatabase

Aplica-se a: Windows | Windows Server

Função JetAttachDatabase

A função JetAttachDatabase anexa um arquivo de banco de dados para uso com uma instância de banco de dados. Para usar o banco de dados, ele precisará ser aberto posteriormente com JetOpenDatabase.

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

Parâmetros

sesid

O contexto de sessão do banco de dados a ser usado para a chamada à API.

szFilename

O nome do banco de dados a ser anexado.

grbit

Um grupo de bits que especificam zero ou mais das opções a seguir.

Valor

Significado

JET_bitDbDeleteCorruptIndexes

Se JET_paramEnableIndexChecking tiver sido definido, todos os índices sobre dados Unicode serão excluídos. Para obter mais detalhes, consulte a seção Comentários.

JET_bitDbDeleteUnicodeIndexes

Todos os índices sobre dados Unicode serão excluídos, independentemente da configuração de JET_paramEnableIndexChecking. Para obter mais detalhes, consulte a seção Comentários.

JET_bitDbUpgrade

Obsoleto. Não use.

JET_bitDbReadOnly

Impede modificações no banco de dados.

Valor Retornado

Essa função retorna o tipo de dados JET_ERR com um dos seguintes códigos de retorno. Para obter mais informações sobre os possíveis erros de ESE, consulte Erros extensíveis do mecanismo de armazenamento e parâmetros de tratamento de erros.

Código de retorno

Descrição

JET_errSuccess

A operação foi concluída com sucesso.

JET_errBackupInProgress

A anexação de um banco de dados não é permitida durante um backup.

JET_errDatabaseFileReadOnly

O arquivo de banco de dados especificado por szFilename deve ser gravável. O atributo Read-Only não deve ser definido e o processo em execução deve ter privilégios suficientes para gravar no arquivo.

JET_errDatabaseInUse

O arquivo de banco de dados já está aberto por outro processo.

JET_errDatabaseInvalidPath

Um caminho inválido foi fornecido em szFilename. szFilename deve ser não NULL e fazer referência a um caminho válido.

JET_errDatabaseSharingViolation

O arquivo de banco de dados já foi anexado por uma sessão diferente.

Jet_errfileaccessdenied

O mecanismo de banco de dados não pode abrir o arquivo de banco de dados. O arquivo pode estar em uso por outro processo ou o chamador pode não ter privilégios suficientes para abrir o arquivo.

JET_errFileNotFound

O arquivo fornecido em szFilename não existe.

JET_errPrimaryIndexCorrupted

Há um erro com o índice primário. Isso pode ser de corrupção física (como corrupção de disco ou memória). Ele também pode ser retornado ao anexar um banco de dados modificado pela última vez em um sistema operacional mais antigo e o índice primário é sobre uma coluna com dados Unicode. Consulte os comentários para obter mais informações sobre índices sobre dados Unicode.

JET_errSecondaryIndexCorrupted

Há um erro com um índice secundário. Isso pode ser de corrupção física (como corrupção de disco ou memória). Ele também pode ser retornado ao anexar um banco de dados modificado pela última vez em um sistema operacional mais antigo e um índice secundário é sobre uma coluna com dados Unicode. Consulte os comentários para obter mais informações sobre índices sobre dados Unicode. Os índices secundários são completamente recriados quando um banco de dados é desfragmentado com um utilitário offline usando o seguinte comando: esentutl -d.

JET_errTooManyAttachedDatabases

Somente um número finito de bancos de dados pode ser anexado por instância. Atualmente, o limite é de sete bancos de dados por instância.

JET_wrnDatabaseAttached

Um aviso não fatal que indica que o arquivo de banco de dados já foi anexado por esta sessão.

Comentários

Chamar JetAttachDatabase é equivalente a chamar JetAttachDatabase2 e passar um valor igual a zero, o que significa que não há limite para o parâmetro cpgDatabaseSizeMax .

Anexar um banco de dados gravável (ou seja, se JET_bitDbReadOnly não tiver sido especificado no parâmetro grbit ) abrirá o arquivo exclusivamente no nível do sistema operacional. Nenhum outro processo poderá abrir o arquivo. É possível que vários processos anexem um banco de dados individual abrindo-os no modo somente leitura.

O arquivo de banco de dados é desanexado usando JetDetachDatabase ou JetDetachDatabase2.

Parâmetros de verificação de índice

Versões diferentes do Windows normalizam o texto Unicode de maneiras diferentes. Isso significa que os índices criados em uma versão do Windows podem não funcionar em outras versões.

Antes do Windows Server 2003, quando a versão do sistema operacional era alterada (incluindo a instalação de um Service Pack), cada índice sobre dados Unicode estava em um estado potencialmente corrompido.

Os índices criados no Windows Server 2003 e posteriores são sinalizados com a versão da normalização Unicode com a qual foram criados. Índices mais antigos não contêm informações de versão. A maioria das alterações de normalização Unicode consiste na adição de novos caracteres, os pontos de código que antes eram indefinidos agora são definidos e normalizados de forma diferente. Portanto, se os dados binários forem armazenados em uma coluna Unicode, eles serão normalizados de forma diferente à medida que novos pontos de código forem definidos.

A partir do Windows Server 2003, o mecanismo de banco de dados do ESE rastreia entradas de índice Unicode que contêm pontos de código indefinidos. Eles podem ser usados para corrigir um índice quando o conjunto de caracteres Unicode definido é alterado.

Esses parâmetros controlam o que acontece quando o mecanismo de banco de dados do ESE é anexado a um banco de dados que foi usado pela última vez em um build diferente do sistema operacional. A versão do sistema operacional é carimbada no cabeçalho do banco de dados.

Se JET_paramEnableIndexChecking estiver definido como TRUE e o banco de dados contiver índices potencialmente corrompidos:

  • JetAttachDatabase excluirá os índices potencialmente corrompidos se grbit contiver JET_bitDbDeleteCorruptIndexes

  • JetAttachDatabaseretornará um erro se grbit não contiver JET_bitDbDeleteCorruptIndexes e houver índices que precisam de exclusão.

Se JET_paramEnableIndexChecking estiver definido como FALSE:

  • JetAttachDatabase ignorará índices potencialmente corrompidos e retornará JET_errSuccess (supondo que não houve outros erros).

Windows Server 2003 e posterior: se JET_paramEnableIndexChecking não tiver sido redefinido, a tabela de correção interna será usada para corrigir entradas de índice. Isso pode não corrigir todos os índices corrompidos, mas será transparente para o aplicativo.

Se o banco de dados foi anexado como somente leitura, o índice não pode ser corrigido ou excluído. Nesse caso, a API retornará um erro, como JET_errSecondaryIndexCorrupted ou JET_errPrimaryIndexCorrupted.

Requisitos

Requisito Valor

Cliente

Requer Windows Vista, Windows XP ou Windows 2000 Professional.

Servidor

Requer o Windows Server 2008, o Windows Server 2003 ou o Windows 2000 Server.

Cabeçalho

Declarado em Esent.h.

Biblioteca

Use ESENT.lib.

DLL

Requer ESENT.dll.

Unicode

Implementado como JetAddColumnW (Unicode) e JetAddColumnA (ANSI).

Consulte Também

Arquivos extensíveis do mecanismo de armazenamento
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JetAttachDatabase2
JetCreateDatabase
JetDetachDatabase
JetDetachDatabase2
JetOpenDatabase
JetSetSystemParameter