2010-07-19 15 views
5

पर सभी खुले कनेक्शन डिस्कनेक्ट करें मुझे एक्सेस डेटाबेस पर कॉम्पैक्ट और मरम्मत ऑपरेशन करने की आवश्यकता है। ऐसा करने के लिए, डेटाबेस के सभी खुले कनेक्शन बंद होने की आवश्यकता है। दुर्भाग्यवश ऐसे खुले कनेक्शन हैं जिन्हें मैं हमेशा जरूरी नहीं कर सकता और ठीक से बंद नहीं कर सकता। कोड के माध्यम से सभी खुले कनेक्शन डिस्कनेक्ट करने का कोई तरीका है?एमएस एक्सेस डेटाबेस

उत्तर

3

वहाँ एक पहुँच फाइल के बारे में विशेष रूप से कुछ भी नहीं कहना है के रूप में एक पाठ फ़ाइल, या एक साधारण पावर प्वाइंट फ़ाइल डिस्क पर बैठे की तुलना में। हम यहां एक विमान जेन विंडोज फाइल के बारे में बात कर रहे हैं।

तो, आपका वास्तविक प्रश्न यह है कि क्या आप एक ऐसी प्रक्रिया को डिस्कनेक्ट कर सकते हैं जिसमें एक शब्द फ़ाइल खुलती है या कोई पुरानी फ़ाइल जो हार्ड ड्राइव पर बस बैठती है?

आप प्रक्रिया और कनेक्शन को मारने में सक्षम हो सकते हैं, लेकिन फिर आप यह सुनिश्चित करने में सक्षम नहीं होंगे कि लंबित डेटा उस शब्द फ़ाइल (या एमडीबी फ़ाइल तक पहुंच) को लिखता है।

तो, मेरे ज्ञान के लिए, भले ही आप यह निर्धारित कर सकें कि पावर-पॉइंट फ़ाइल किस प्रक्रिया में खुलती है, मुझे नहीं लगता कि आप उस प्रक्रिया को विश्वसनीय रूप से मार सकते हैं और उस फ़ाइल से कनेक्ट हो सकते हैं जो खुला है और सुनिश्चित करें कि लिखित डेटा लंबित रूप से लिखा जाएगा। डिस्क पर लिखे जाने वाले प्रतीक्षाों के संदर्भ में आप यह नहीं जान सकते कि कोड और प्रक्रिया लंबित है।

जबकि पावर प्वाइंट फ़ाइल में लंबित डेटा लिखने में विफलता इतनी बड़ी सौदा नहीं हो सकती है, लेकिन डेटा के मामले में, आप वास्तविक परेशानी के लिए पूछ रहे हैं।

यहां एकमात्र वास्तविक दृष्टिकोण एप्लिकेशन/प्रक्रिया का एक सुंदर और उचित बंद है जिसमें विंडोज़ फ़ाइल खुलती है।

आपके सभी कोड का प्रयास फ़ाइल के अनन्य उपयोग को प्राप्त करने का प्रयास कर सकता है, और यदि आप ऐसा नहीं कर सकते हैं, तो आपको उपयोगकर्ता को सूचित करना होगा कि फाइल के अनन्य उपयोग के समय तक कॉम्पैक्ट संभव नहीं है प्राप्त किया जा सकता है।

आप निश्चित रूप से कंप्यूटर पर व्यवस्थापक उपकरण खोल सकते हैं, और उन उपयोगकर्ताओं को जांच सकते हैं जिनके पास फ़ाइल खुलती है, लेकिन उन उपयोगकर्ता कनेक्शन को मारना आपके जोखिम पर किया जाता है।

0

मैं जानता हूँ कि यह एक देर से जवाब है, लेकिन यहाँ मैं जाना ...

हालांकि अगर डेटा सहेज लिया गया है एक और चिंता का विषय पूरी तरह है, अगर है कि कोई मुद्दा नहीं है का निर्धारण करने, देखते हैं कई विकल्प उपलब्ध पर निर्भर करता है आपका सेटअप एमएस एक्सेस डेटाबेस मान लिया जाये और आप एक खिड़कियों नेटवर्क पर हैं, और आप कंप्यूटर का नाम (ओं) के लिए उपयोगकर्ता की प्रवेश किया था, यह एक विकल्प हो सकता है पता है:

Public Function StopProcess(PC As String) As Boolean 

    On Error GoTo Errhandler 

    Dim strComputer As String 
    Dim objWMIService As Variant 
    Dim colProcessList As Variant 
    Dim objProcess As Variant 

    ' Add the user domain 
    strComputer = PC & ".yourdomain.com" 
    Set objWMIService = GetObject(_ 
     "winmgmts:{impersonationLevel=impersonate}!\\" & _ 
     strComputer & "\root\cimv2") 
    Set colProcessList = objWMIService.ExecQuery(_ 
     "SELECT * FROM Win32_Process WHERE Name = 'msaccess.exe'") 

    ' Note: authority to do this must be provided prior for this function working 
    ' Also, note this kills all open MS Access database the user has open 
    For Each objProcess In colProcessList 
     Call objProcess.Terminate 
    Next 

Errhandler: 
    On Error Resume Next 
End Function 

और फिर देखने के लिए उपयोगकर्ताओं को अब भी लॉग ऑन हैं जो आप निम्न प्रक्रिया outlined by Microsoft in a KB की तरह कुछ करने से जेट डेटाबेस क्वेरी सकता है:

Dim cn As New ADODB.Connection 
Dim rs As New ADODB.Recordset 

cn.Provider = "Microsoft.Jet.OLEDB.4.0" 
cn.Open "Data Source=" & Path 

Set rs = cn.OpenSchema(adSchemaProviderSpecific, , _ 
         "{947bb102-5d43-11d1-bdbf-00c04fb92675}") 
If not rs.EOF Then 
    ' Note: Fields 0 = COMPUTER_NAME, 1 = LOGIN_NAME, _ 
    '    2 = CONNECTED, 3 = SUSPECT_STATE 
    Debug.Print rs.Fields(0) & " - " & _ 
       rs.Fields(1) & " - " & _ 
       rs.Fields(2) & " - " & _ 
       rs.Fields(3) 
End If 

मैं आप इस उपयोगी पाते उम्मीद है।

संबंधित मुद्दे