Artigo: 891176 - Última revisão: sábado, 1 de Dezembro de 2007 - Revisão: 4.3
Um desempenho mais lento em Jet ou baseada no Access baseado na base de dados programas depois de actualizar a partir do Windows NT 4.0 para o Windows 2000 ou Windows XP
Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Depois de actualizar o computador a partir do Microsoft Windows NT 4.0 para o Microsoft Windows 2000 ou para o Microsoft Windows XP Professional, é poderão um desempenho mais lento no Microsoft Access - baseado ou programas baseados na base de dados Jet.
Este problema poderá ocorrer se um ou mais das seguintes condições se verificar:
Está a trabalhar com uma base de dados dividida, e o ficheiro de base de dados back-end reside numa pasta com um nome com mais de 8 caracteres. Por exemplo, o ficheiro de base de dados back-end reside numa pasta com um nome semelhante à seguinte:
BigFolderName
Está a trabalhar com uma base de dados dividida, e o nome do ficheiro de base de dados back-end tem mais do que 8 caracteres, excluindo a extensão do ficheiro .mdb de três caracteres. Por exemplo, o ficheiro de base de dados back-end tem um nome semelhante à seguinte:
BigDatabaseFileName.mdb
Está a trabalhar com uma base de dados que não é dividida e o nome do ficheiro da base de dados não segue a convenção de nomenclatura 8.3. Ou a base de dados é armazenado numa pasta que tem um nome longo.
A estrutura de colocação em cache do serviço Estação de trabalho no Windows 2000 e em versões posteriores do Windows é diferente da estrutura do cache do serviço Estação de trabalho em versões anteriores do Windows.
No Windows 2000 e versões posteriores do Windows, a estrutura colocação em cache do serviço de estação de trabalho foi alterada para preferir da base de dados integridade num ambiente multi-utilizador. Esta alteração de estrutura faz com que um atraso quando Jet efectua chamadas à API para obter informações sobre o nome de pasta longas ou sobre o nome de ficheiro longo. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
889588
(http://support.microsoft.com/kb/889588/
)
Como optimizar o Office Access e o Jet base de dados do motor de desempenho de rede com clientes baseados no Windows 2000 e baseado no Windows XP
A Microsoft fornece exemplos de programação apenas, para fins sem garantia expressa ou implícita. Isto inclui, mas não está limitado a, as garantias implícitas de comercialização ou adequação a um fim específico. Este artigo pressupõe que está familiarizado com a linguagem de programação apresentada e as ferramentas que são utilizadas para criar e depurar procedimentos. Os técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas do utilizador.
Se estiver a trabalhar com uma base de dados dividida, pode resolver este problema por ligar as tabelas Jet existentes. Para efectuar este procedimento, crie um código para enviar uma representação abreviada do nome de pasta longas para a API do Windows. Esta resolução requer a base de dados back-end para ter um nome de ficheiro que se segue a convenção de nomenclatura 8.3. Para criar este código, siga estes passos na base de dados front-end:
Defina uma referência para Microsoft ADO Ext 2.5 (ou para uma versão posterior do ADO).
Adicione o seguinte código a um módulo novo.
Declare Function GetShortPathName Lib "kernel32" _
Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _
ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
Function RefreshLinks()
On Error GoTo ErrorHandler
'Define the ADOX Catalog object.
Dim objCat As New ADOX.Catalog
'Define the ADOX Table object.
Dim objTbl As ADOX.Table
'Database name of the linked table.
Dim strFilename As String
'Path and database name of the linked table.
Dim strFullName As String
Dim blnIsMapi As Boolean
Dim blnIsImex As Boolean
Dim blnIsTemp As Boolean
Dim blnLongFileName As Boolean
Dim blnFailedLink As Boolean
Const srtImex = "IMEX"
Const strMapi = "MAPILEVEL="
'Open the catalog.
objCat.ActiveConnection = CurrentProject.Connection
'Loop through the table collection and update the linked tables.
For Each objTbl In objCat.Tables
'Verify that the table is a linked table.
If objTbl.Type = "LINK" = True Then
blnIsTemp = objTbl.Properties("Temporary Table") Or Left(objTbl.Name, 1) = "~"
blnIsImex = (InStr(1, objTbl.Properties("Jet OLEDB:Link Provider String"), srtImex, vbTextCompare) > 0)
blnIsMapi = (InStr(1, objTbl.Properties("Jet OLEDB:Link Provider String"), strMapi, vbTextCompare) > 0)
If Not blnIsTemp And Not blnIsImex And Not blnIsMapi Then
'Verify that the table is a Jet table.
strFullName = objTbl.Properties("Jet OLEDB:Link Datasource")
strFilename = Mid(strFullName, InStrRev(strFullName, "\", _
Len(strFullName)) + 1, Len(strFullName))
'Determine whether the database exists.
If DoesFileExist(strFullName) = True Then
objTbl.Properties("Jet OLEDB:Link Datasource") = GetShortName(strFullName)
'Update the link by using the short path name.
Else
MsgBox "Cannot update: '" & objTbl.Name & "'" & String(2, vbCrLf) & "File not found: " & vbCrLf & strFullName
blnFailedLink = True
End If
If InStr(strFilename, ".") > 9 Then blnLongFileName = True
End If
End If
Next
If blnFailedLink = False Then
If blnLongFileName = True Then
MsgBox "The table links were successfully updated, but the name of the backend database file does not follow 8.3" & _
vbCrLf & "Please rename the file, relink the tables, and then run the procedure again.", vbExclamation
Else
MsgBox "The links were successfully updated!!! ", vbInformation
End If
Else
MsgBox "The links were not successfully updated." & vbCrLf & "Please verify you table links.", vbExclamation
End If
ExitHandler:
Exit Function
ErrorHandler:
MsgBox Err.Description & " " & Err.Number
Resume ExitHandler
End Function
Function GetShortName(ByVal sLongFileName As String) As String
Dim lRetVal As Long, sShortPathName As String, iLen As Integer
'Set up a buffer area for the API function call return.
sShortPathName = Space(255)
iLen = Len(sShortPathName)
'Call the function.
lRetVal = GetShortPathName(sLongFileName, sShortPathName, iLen)
'Remove unwanted characters.
GetShortName = Left(sShortPathName, lRetVal)
End Function
Function DoesFileExist(strFileSpec As String) As Boolean
'Return True if the file that is specified in the
'strFilespec argument exists.
'Return False if strFileSpec is not a valid
'file or if strFileSpec is a directory.
Const INVALID_ARGUMENT As Long = 53
On Error GoTo DoesfileExist_Err
If (GetAttr(strFileSpec) And vbDirectory) <> vbDirectory Then
DoesFileExist = CBool(Len(Dir(strFileSpec)) > 0)
Else
DoesFileExist = False
End If
DoesfileExist_End:
Exit Function
DoesfileExist_Err:
DoesFileExist = False
Resume DoesfileExist_End
End Function
Execute a função RefreshLinks . Para o fazer, siga estes passos:
No Editor do Visual Basic, clique em Immediate Window no menu Ver .
Na janela Immediate, escreva RefreshLinks . Em seguida, prima ENTER.
A função RefreshLinks ciclos Embora as tabelas Jet ligadas numa base de dados e verifica se a ligação é válida. Se a ligação for válida, este código utiliza a API do Windows funciona GetShortPathName para criar um nome curto que se segue a convenção de nomenclatura 8.3. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
142982
(http://support.microsoft.com/kb/142982/
)
Como o Windows gera nomes de ficheiro 8.3 de nomes de ficheiro longos
Este código, em seguida, actualiza a ligação utilizando um caminho que inclui o novo nome abreviado. Se a hiperligação aponta para um ficheiro de base de dados back-end que não segue a convenção de nomenclatura 8.3, este código gera uma mensagem a sugerir que mude o nome o ficheiro de base de dados back-end.
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 891176
(http://support.microsoft.com/kb/891176/en-us/
)
Qual foi o esforço que despendeu pessoalmente para utilizar este artigo?
Muito baixo
Baixo
Moderado
Elevado
Muito elevado
Diga-nos porquê e o que podemos fazer para melhorar estas informações
Obrigado! Os seus comentários são utilizados para ajudar-nos a melhorar o conteúdo do nosso suporte. Para obter mais opções de assistência, visite a Home Page de Ajuda e Suporte.