Μειωμένη απόδοση των προγραμμάτων που βασίζονται στην Access ή τον μηχανισμό βάσης δεδομένων Jet μετά την αναβάθμιση από Windows NT 4.0 σε Windows 2000 ή Windows XP

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 891176 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Συμπτώματα

Μετά την αναβάθμιση του υπολογιστή σας από Microsoft Windows NT 4.0 σε Microsoft Windows 2000 ή Microsoft Windows XP Professional, ενδέχεται να αντιμετωπίσετε χαμηλότερες επιδόσεις στη Microsoft Access - βάση ή μηχανισμό Jet σε προγράμματα που βασίζονται σε βάση δεδομένων.

Αιτία

Αυτό το ζήτημα μπορεί να προκύψει εάν ισχύει μία ή περισσότερες από τις ακόλουθες συνθήκες:
  • Εργάζεστε με μια βάση δεδομένων της διαίρεσης και βρίσκεται στο αρχείο της βάσης δεδομένων υποστήριξης σε ένα φάκελο που έχει ένα όνομα που είναι μεγαλύτερο από 8 χαρακτήρες. Για παράδειγμα, το αρχείο της βάσης δεδομένων υποστήριξης βρίσκεται σε ένα φάκελο που έχει ένα όνομα παρόμοιο με το ακόλουθο:
    BigFolderName
  • Εργάζεστε με Διαίρεση βάσης δεδομένων και το όνομα του αρχείου της βάσης δεδομένων υποστήριξης είναι μεγαλύτερο από 8 χαρακτήρες, εκτός από την επέκταση ονόματος αρχείου .mdb τριών χαρακτήρων. Για παράδειγμα, το αρχείο της βάσης δεδομένων υποστήριξης έχει ένα όνομα παρόμοιο με το ακόλουθο:
    BigDatabaseFileName.mdb
  • Εργάζεστε με μια βάση δεδομένων που δεν διαιρείται και το όνομα του αρχείου της βάσης δεδομένων δεν ακολουθεί την ονομασία σύμβαση 8.3. Ή της βάσης δεδομένων είναι αποθηκευμένο σε ένα φάκελο που έχει μακροσκελές όνομα.
Το σχέδιο προσωρινής αποθήκευσης της υπηρεσίας σταθμού εργασίας στα Windows 2000 και σε νεότερες εκδόσεις των Windows είναι διαφορετική από τη σχεδίαση προσωρινής αποθήκευσης της υπηρεσίας σταθμού εργασίας σε προηγούμενες εκδόσεις των Windows.

Στα Windows 2000 και νεότερες εκδόσεις των Windows, το σχέδιο προσωρινής αποθήκευσης της υπηρεσίας σταθμού εργασίας άλλαξε για να προτιμήσει ακεραιότητας σε περιβάλλον πολλών χρηστών της βάσης δεδομένων. Αυτή η αλλαγή σχεδίασης προκαλεί καθυστέρηση όταν Jet κάνει κλήσεις API για την ανάκτηση πληροφοριών σχετικά με το όνομα του φακέλου μεγάλο ή σχετικά με το μεγάλο όνομα αρχείου.Για περισσότερες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
889588Τρόπος βελτιστοποίησης των επιδόσεων δικτύου της Office Access και του μηχανισμού βάσης δεδομένων Jet σε υπολογιστές-πελάτες με Windows 2000 και Windows XP

Προτεινόμενη αντιμετώπιση

Η Microsoft παρέχει παραδείγματα προγραμματισμού μόνο για λόγους επεξήγησης, χωρίς να παρέχει καμία εγγύηση, σιωπηρή ή ρητή. Σε αυτά περιλαμβάνονται, ενδεικτικά, οι σιωπηρές εγγυήσεις εμπορευσιμότητας ή/και καταλληλότητας για συγκεκριμένο σκοπό. Αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με τη γλώσσα προγραμματισμού που παρουσιάζεται, καθώς και με τα εργαλεία που χρησιμοποιούνται για τη δημιουργία και τον εντοπισμό σφαλμάτων κώδικα διαδικασιών. Οι μηχανικοί υποστήριξης της Microsoft μπορούν να σας εξηγήσουν τη λειτουργικότητα μιας συγκεκριμένης διαδικασίας, αλλά δεν θα τροποποιήσουν αυτά τα παραδείγματα, για να παράσχουν πρόσθετες λειτουργίες, ούτε θα δημιουργήσουν διαδικασίες, για να καλύψουν τις συγκεκριμένες απαιτήσεις σας.

Εάν εργάζεστε με μια βάση δεδομένων της διαίρεσης, μπορείτε να επιλύσετε αυτό το ζήτημα κατά την επανασύνδεση των υπαρχόντων πινάκων Jet. Για να γίνει αυτό, να δημιουργήσετε κώδικα για να στείλετε μια μικρή απεικόνιση του ονόματος του φακέλου μεγάλη για το API των Windows. Αυτή η ανάλυση απαιτεί τη βάση δεδομένων υποστήριξης σας να έχει ένα όνομα αρχείου που ακολουθεί την ονομασία σύμβαση 8.3. Για να δημιουργήσετε αυτόν τον κώδικα, ακολουθήστε τα παρακάτω βήματα με τη βάση δεδομένων προσκηνίου:
  1. Ορίστε μια αναφορά σε Microsoft ADO επέκταση 2.5 (ή νεότερη έκδοση του ADO).
  2. Προσθέστε τον ακόλουθο κώδικα για μια νέα λειτουργική μονάδα.
    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. Εκτέλεση τηςRefreshLinksFunction. Για να το κάνετε αυτό, ακολουθήστε τα εξής βήματα: (Use the tools in the Windows Recovery Environment to repair Windows Vista. To do this, follow these steps:):
    1. Στην επεξεργασία της Visual Basic, κάντε κλικ στο κουμπίΠαράθυρο "Άμεση"Στο διακομιστήViewΜενού (Menu).
    2. Στο παράθυρο εντολών, πληκτρολογήστεRefreshLinks. Στη συνέχεια, πιέστε το πλήκτρο ENTER.
Για ναRefreshLinksσυνάρτηση διακλαδώνεται παρόλο που το Jet συνδεδεμένων πινάκων σε μια βάση δεδομένων και επαληθεύει εάν η σύνδεση είναι έγκυρη. Εάν η σύνδεση είναι έγκυρη, ο κωδικός αυτός χρησιμοποιεί το Windows API συνάρτησηςGetShortPathNameΓια να δημιουργήσετε ένα πιο σύντομο όνομα που ακολουθεί την ονομασία σύμβαση 8.3.Για πρόσθετες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
142982Τρόπος δημιουργίας ονομάτων αρχείων 8.3 από μεγάλα ονόματα αρχείων
Αυτός ο κώδικας στη συνέχεια ενημερώνει τη σύνδεση χρησιμοποιώντας μια διαδρομή που περιλαμβάνει το νέο σύντομο όνομα. Εάν η σύνδεση οδηγεί σε ένα αρχείο βάσης δεδομένων υποστήριξης που δεν ακολουθεί την ονομασία σύμβαση 8.3, αυτός ο κώδικας δημιουργεί ένα μήνυμα για να προτείνει να μετονομάσετε το αρχείο της βάσης δεδομένων υποστήριξης.

Κατάσταση

Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα θέμα το οποίο παρουσιάζεται στα προϊόντα της που αναφέρονται στην ενότητα "Ισχύει για".

ΣΗΜΕΙΩΣΗΕάν χρησιμοποιείτε τα Windows XP, μπορείτε να βελτιώσετε την απόδοση από την εφαρμογή Microsoft Windows XP Service Pack 2 (SP2).

Περισσότερες πληροφορίες

Για περισσότερες πληροφορίες, κάντε κλικ στους αριθμούς των άρθρων παρακάτω για να προβάλετε τα άρθρα της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
209862How to relink backend tables with the common dialog control in Access 2000
175512How to get a short file name from a long file name

Ιδιότητες

Αναγν. άρθρου: 891176 - Τελευταία αναθεώρηση: Σάββατο, 17 Σεπτεμβρίου 2011 - Αναθεώρηση: 4.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Access 97 Standard Edition στις ακόλουθες πλατφόρμες
    • Microsoft Windows 2000 Professional Edition
    • Microsoft Windows XP Professional x64 Edition
    • Microsoft Windows XP Professional
    • Microsoft Windows XP Tablet PC Edition
Λέξεις-κλειδιά: 
kbfilesystems kbenv kbtshoot kbhowto kbinfo kbmt KB891176 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:891176

Αποστολή σχολίων

 

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