Prestazioni basate su Access o Microsoft Jet database programmi dopo l'aggiornamento da Windows NT 4.0 a Windows 2000 o a Windows XP

Traduzione articoli Traduzione articoli
Identificativo articolo: 891176 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sintomi

Dopo l'aggiornamento del computer da Microsoft Windows NT 4.0 per Microsoft Windows 2000 e Microsoft Windows XP Professional, non Ŕ possibile prestazioni pi¨ lente in Microsoft Access - base o programmi basati su database di Jet.

Cause

Questo problema pu˛ verificarsi se uno o pi¨ delle seguenti condizioni:
  • Lavora con un database di divisione e il file di database back-end risiede in una cartella con un nome pi¨ lungo di 8 caratteri. Ad esempio, il file di database back-end risiede in una cartella con un nome simile al seguente:
    BigFolderName
  • Si sta utilizzando un database di divisione, e il nome del file di database back-end Ŕ pi¨ lungo di 8 caratteri, esclusa l'estensione nome del file mdb di tre caratteri. Ad esempio, il file di database di back-end Ŕ un nome simile al seguente:
    BigDatabaseFileName.mdb
  • Si lavora con un database che non Ŕ divisa, e non Ŕ seguita la convenzione di denominazione 8.3 per il nome del file di database. O il database viene memorizzato in una cartella ha un nome lungo.
La struttura di memorizzazione nella cache del servizio workstation in Windows 2000 e versioni successive di Windows Ŕ diversa dalla struttura di memorizzazione nella cache di servizio workstation di versioni precedenti di Windows.

In Windows 2000 e versioni successive di Windows, la struttura di memorizzazione nella cache del servizio workstation Ŕ stata modificata Ottimizza per database di integritÓ in un ambiente multiutente. Questa modifica di progettazione, un ritardo quando Jet esegue chiamate di API per recuperare le informazioni sul nome della cartella lungo o sul nome file lungo. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
889588Come ottimizzare Office Access e Jet database modulo di gestione di prestazioni della rete con client basati su Windows 2000 e basato su Windows XP

Risoluzione

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia espressa o implicita. Questo include, ma non Ŕ limitato a, le garanzie implicite di commerciabilitÓ o idoneitÓ per uno scopo specifico. Questo articolo si presuppone che conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug di procedure. Tecnici del supporto Microsoft possono spiegare la funzionalitÓ di una particolare procedura, ma in nessun sono caso a modificare questi esempi per fornire funzionalitÓ aggiuntive o creare procedure per soddisfare specifiche esigenze.

Se si lavora con un database di divisione, Ŕ possibile risolvere il problema da ricollegamento delle tabelle Jet esistenti. A tale scopo, Ŕ necessario creare codice per inviare una rappresentazione in forma breve del nome lungo l'API di Windows. Questa soluzione richiede il database di backend abbia un nome di file che segue la convenzione di denominazione 8.3. Per creare questo codice, attenersi alla seguente procedura nel database interno:
  1. Impostare un riferimento a Microsoft ADO Ext 2.5 (oppure a una versione successiva di ADO).
  2. Aggiungere il codice riportato di seguito un nuovo modulo.
    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
    
  3. Eseguire la funzione RefreshLinks . Per effettuare questa operazione, attenersi alla seguente procedura:
    1. In Visual Basic Editor scegliere finestra immediata dal menu Visualizza .
    2. Nella finestra immediata, digitare RefreshLinks . Quindi premere INVIO.
La funzione RefreshLinks eseguito un ciclo tuttavia la tabelle Jet collegate in un database e viene verificato se il collegamento Ŕ valido. Se il collegamento Ŕ valido, questo codice si utilizza l'API di Windows di funzionare GetShortPathName per creare un nome breve che segue la convenzione di denominazione 8.3. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
142982Come Windows genera nomi di file 8.3 da nomi di file lunghi
Questo codice viene quindi aggiorna il collegamento utilizzando un percorso che include il nuovo nome breve. Se il collegamento punta a un file di database di back-end che non seguita la convenzione di denominazione 8.3, questo codice genera un messaggio per suggerire di rinominare il file di database backend.

Status

Microsoft ha confermato che questo problema riguarda i prodotti sono elencati nella sezione "Si applica a".

Nota Se si utilizza Windows XP, Ŕ possibile migliorare le prestazioni mediante l'applicazione di Microsoft Windows XP Service Pack 2 (SP2).

Informazioni

Per ulteriori informazioni, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportato di seguito:
209862Come ricollegare le tabelle back-end con il controllo finestra di dialogo comuni in Access 2000
175512Come ottenere un nome di file brevi da un nome di file lungo

ProprietÓ

Identificativo articolo: 891176 - Ultima modifica: sabato 1 dicembre 2007 - Revisione: 4.3
Le informazioni in questo articolo si applicano a:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Access 97 Standard Editionáalle seguenti piattaforme
    • Microsoft Windows 2000 Professional Edition
    • Microsoft Windows XP Professional x64 Edition
    • Microsoft Windows XP Professional
    • Microsoft Windows XP Tablet PC Edition
Chiavi:á
kbmt kbfilesystems kbenv kbtshoot kbhowto kbinfo KB891176 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 891176
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com