Postup nasazení projektu aplikace Access 2002, která zahrnuje Microsoft SQL Server 2000 Desktop Engine

Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.

Projděte si také anglickou verzi článku:299297
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Tento článek se vztahuje pouze na projektu Microsoft Access (.adp).

Upřesnit: Vyžaduje poradce kódování, spolupráce a víceuživatelském dovednosti.

Microsoft Office 2000 Developer verzi tohoto článku naleznete 240293.

Obsah úlohy

Souhrn
Microsoft SQL Server 2000 Desktop Engine (MSDE 2000) je kompatibilní se systémem SQL Server 2000 server úložiště dat, která je součástí Microsoft Office XP Developer právy dále distribuovat. Průvodce Office XP Developer balení má možnost pro včetně při balení projektu Microsoft Access SQL Server 2000 Desktop Engine (* .adp) řešení. Řešení je nainstalována v počítači uživatele, SQL Server 2000 Desktop Engine je nainstalována společně s řešením. SQL Server 2000 Desktop Engine není spuštěna a databáze není připojena k SQL Server 2000 Desktop Engine.

Poznámka: předchozí verze Microsoft SQL Server 2000 Desktop Engine je s názvem Microsoft Data Engine (MSDE).

Tento článek poskytuje kód musíte použít server ke spuštění serveru, pokud jej není spuštěna, již k serveru připojit databázi a připojte projekt k nově připojené databázi najít. Kód je specifický pro použití v projektu. Však mnohem kód lze pomocí libovolného jazyka pro aplikaci (VBA).

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci, bez žádné záruky výslovně uvedené nebo odvozené,. včetně, bez omezení, odvozených záruk vztahujících se k obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že uživatel je obeznámen s programovacím jazykem, který je předmětem ukázky, a s nástroji použitými pro vytvoření a ladění skriptu. Pracovníci technické podpory společnosti Microsoft mohou vysvětlit funkce určitého postupu, nemohou však následující příklady rozšířit o další funkce nebo konstrukce podle konkrétních požadavků uživatele. back to the top

Kroky upravit existující projekt aplikace pro nasazení

Následující postup předpokládá, že již máte správně práci projektu aplikace je připravena k nasazení. Kroky telefonickou jak přidat další kód projektu VBA, jak proveďte požadované úpravy spouštěcí formulář a jak vytvořit balíček nasazení pro existující projekt Microsoft Access (* .adp), který obsahuje Microsoft SQL Server 2000 Desktop Engine.
  1. Otevřete projekt aplikace Access, který chcete nasadit a vytvořte nový modul.

    Protože kód, který bude zahrnovat používá SQLDMO kód a skriptování, ujistěte se, zda je požadována odkazy jsou přítomny.
  2. V nabídce Nástroje Editor jazyka klepněte na odkazy.
  3. V dialogovém okně References klepnutím vyberte Pokud již nejsou zaškrtnuta následující:
    • Knihovna objektů Microsoft SQLDMO
    • Microsoft Scripting Runtime
  4. Klepněte na tlačítko OK zavřete dialogové okno odkazy.
  5. Zkopírujte následující kód nový modul:
    Option Compare DatabaseOption ExplicitDim adp_UseIntegratedSecurity As BooleanPublic Function fStartUp(strDBName As String, strMDFName As String, _        Optional strUN As String, Optional strPW As String)'------------------------------------------------------------'The code in this project connects the MDF file'to a local MSDE, then establishes the connection between'the Access Project and MSDE.'------------------------------------------------------------    Dim strSQLInstances As String    Dim strServername As String    Dim intInst As Integer    Dim strMachineName As String    Dim spaceLocation As Long    'If no username is supplied, and you cannot 'use integrated security, the function requires that you provide a valid SQL Server user account and password.        If Not fCheckForCompatibleOS Then        strMachineName = "(local)"            If strUN = "" Then               MsgBox "Provide a valid SQL Server user account and password to log on to SQL Server because the current operating system does not support integrated security."               Exit Function            End If           adp_UseIntegratedSecurity = False    Else        strMachineName = ComputerName        If strUN = "" Then            adp_UseIntegratedSecurity = True        Else            adp_UseIntegratedSecurity = False        End If    End If    'Find the available instances of SQL 2000 on the computer.    intInst = GetValidSQLInstances(strSQLInstances)    If intInst < 1 Then        Dim strErrorMsg As String        strErrorMsg = "This application requires SQL Server 2000 " & _            "to be installed on the local computer."        MsgBox strErrorMsg, vbCritical, "SQL Server 2000 not installed!"        Exit Function    End If    'At this point, it has been determined that there is at    'least one valid SQL Server 2000 instance on the computer.    'The code below picks the default or first instance if more than    'one is available. You may want to add code to prompt the user for    'a choice when there is more than one instance on the computer.        If InStr(1, strSQLInstances, "MSSQLSERVER") Then        strServername = strMachineName    Else        spaceLocation = InStr(1, strSQLInstances, " ")        If spaceLocation = 0 Then            strServername = strMachineName & "\" & strSQLInstances        Else            strServername = strMachineName & "\" & Mid(strSQLInstances, 1, spaceLocation)        End If    End If        'Call fstartMSDE to connect to SQL Server    fStartMSDE strServername, strUN, strPW        'Call sCopyMDF to move the data file to the data folder    'of SQL Server, and then attach it to the server.    fCopyMDF strServername, strUN, strPW, strDBName, strMDFName        'Connect the ADP to the new database    fChangeADPConnection strServername, strDBName, strUN, strPWEnd FunctionPublic Function fStartMSDE(strServername As String, _                Optional strUN As String, Optional strPW As String)'------------------------------------------------------------'This subroutine will turn on MSDE. If the server has been'started, the error trap will exit the function leaving the'server running.''Note that it will not put the SQL Service Manager on'the start bar.''Input:'   strServername    The server to be started'   strUN        The user used to start server'   strPW        The password of user''Output:'   Resolution of start''References:'   SQLDMO'------------------------------------------------------------    Dim osvr As SQLDMO.SQLServer    Set osvr = CreateObject("SQLDMO.SQLServer")            On Error GoTo StartError 'Error Trap    osvr.LoginTimeout = 60    osvr.LoginSecure = adp_UseIntegratedSecurity    osvr.Start True, strServername, strUN, strPWExitSub:    Set osvr = Nothing    Exit FunctionStartError:    If Err.Number = -2147023840 Then    'This error is thrown when the server is already running,    'and Server.Start is executed on Windows NT, 2000, or XP.               osvr.Connect strServername, strUN, strPW  'Connect to Server                Else 'Unknown Error        MsgBox Err.Number & ": " & Err.Description    End If    Resume ExitSubEnd FunctionPublic Function fCopyMDF(strServername As String, _                strUN As String, strPW As String, _                strDBName As String, _                sMDFName As String)'------------------------------------------------------------'This Function determines whether the database is already on'the MSDE Server. If the database does not exist, this'function copies the MDF file from the same location as the'ADP to MSDE's Data directory and then attaches the database.''Input:'   strServername 	The server to be started'   strUN        	The user used to start server'   strPW 		The password of user'   strDBName 		The Name of the SQL Database'   sMDFName 		The Name of the MSDE Database to be copied''Output:'   Resolution of copy''References:'   SQLDMO'   Scripting Runtime'------------------------------------------------------------Dim FSO As Scripting.FileSystemObjectDim osvr As SQLDMO.SQLServerDim strMessage As StringDim db As VariantDim fDataBaseFlag As BooleanDim dbCount As IntegerOn Error GoTo sCopyMDFTrap    'The drive names used in FSO.Copyfile and    'oSvr.AttachDBWithSingleFile must match the    'locations for Program Files and MSDE on the    'computer of the end user.    fCopyMDF = ""    fDataBaseFlag = False    Set FSO = CreateObject("Scripting.FileSystemObject")    Set osvr = CreateObject("SQLDMO.SQLServer")    osvr.LoginSecure = adp_UseIntegratedSecurity    osvr.Connect strServername, strUN, strPW    dbCount = osvr.Databases.Count        'Look for database existence on Local MSDE Server    'by looping through all database names on the local    'MSDE Server.    For Each db In osvr.Databases            If db.Name = strDBName Then 'The database exists            fDataBaseFlag = True            Exit For 'Get out of loop        End If      Next        If Not fDataBaseFlag Then 'There is no database                              'matching sDBName        'Copy File to data folder.        FSO.CopyFile Application.CurrentProject.Path _        & "\" & sMDFName, _        osvr.Databases("master").PrimaryFilePath & _        sMDFName, True        'Attach to database.        strMessage = osvr.AttachDBWithSingleFile(strDBName, _            osvr.Databases("master").PrimaryFilePath _            & sMDFName)    End If     ExitCopyMDF:    osvr.Disconnect    Set osvr = NothingExit Function    sCopyMDFTrap:    If Err.Number = -2147216399 Then 'DMO must be initialized        Resume Next    Else        MsgBox Err.Description    End If        Resume ExitCopyMDFExit Function    End FunctionFunction MakeADPConnectionless()'------------------------------------------------------------'This code removes the connection properties from the'Access Project for troubleshooting purposes.'The ADP will open in a disconnected state until new connection'properties are supplied.'------------------------------------------------------------    Application.CurrentProject.OpenConnection ""End Function Function fChangeADPConnection(strServername, strDBName As String, Optional strUN As String, _        Optional strPW As String) As Boolean'------------------------------------------------------------'This Function resets the connection for an ADP by using the'input parameters to create a new connection string. If no username'is supplied, it tries to connect by using integrated security.''Input:'   strServerName    The server to be started'   strDBName   The Name of the MSDE Database'   strUN        The user used to start server'   strPW        The password of user'------------------------------------------------------------    Dim strConnect As String    On Error GoTo EH:    strConnect = "Provider=SQLOLEDB.1" & _    ";Data Source=" & strServername & _    ";Initial Catalog=" & strDBName    If adp_UseIntegratedSecurity Then        strConnect = strConnect & ";integrated security=SSPI"    Else        strConnect = strConnect & ";user id=" & strUN        strConnect = strConnect & ";password=" & strPW    End If    Application.CurrentProject.OpenConnection strConnect    fChangeADPConnection = True    Exit FunctionEH:    MsgBox Err.Number & ": " & Err.Description, vbCritical, "Connection Error"    fChangeADPConnection = FalseEnd Function					
  6. Uložit tento modul jako modCopyConnect.
  7. Vytvořte druhý modul a potom zkopírujte následující kód druhý modulu:
    Option Compare DatabaseOption Explicit'This module provides functions that work together to'find existing computers running SQL Servers, and also the computer name.      Public Type OSVERSIONINFO    dwOSVersionInfoSize As Long    dwMajorVersion As Long    dwMinorVersion As Long    dwBuildNumber As Long    dwPlatformId As Long    szCSDVersion As String * 128End TypeDeclare Function GetVersionExA Lib "kernel32" _         (lpVersionInformation As OSVERSIONINFO) As IntegerPrivate Declare Function OSRegOpenKey Lib "advapi32" Alias _"RegOpenKeyA" (ByVal hKey As Long, ByVal lpszSubKey As String, _phkResult As Long) As LongPrivate Declare Function OSRegQueryValueEx Lib "advapi32" _Alias "RegQueryValueExA" (ByVal hKey As Long, _ByVal lpszValueName As String, ByVal dwReserved As Long, _lpdwType As Long, lpbData As Any, cbData As Long) As LongPrivate Declare Function GetComputerName _Lib "kernel32" Alias _"GetComputerNameA" (ByVal lpBuffer As String, _nSize As Long) As LongPrivate Declare Function OSRegCloseKey Lib "advapi32" _Alias "RegCloseKey" (ByVal hKey As Long) As LongPrivate Const MAX_COMPUTERNAME_LENGTH As Long = 15&Public Const HKEY_CLASSES_ROOT = &H80000000Public Const HKEY_CURRENT_USER = &H80000001Public Const HKEY_LOCAL_MACHINE = &H80000002Public Const HKEY_USERS = &H80000003Private Const ERROR_SUCCESS = 0&Private Const VER_PLATFORM_WIN32s = 0  'Win32s on Windows 3.1Private Const VER_PLATFORM_WIN32_WINDOWS = 1  'Windows 95/98/ME.Private Const VER_PLATFORM_WIN32_NT = 2  'Windows NT/2000/XPPrivate Const REG_SZ = 1Private Const REG_BINARY = 3Private Const REG_DWORD = 4Private Const REG_MULTI_SZ = 7Public Function GetValidSQLInstances(ByRef strSQLInstances _                As String) As Integer'-----------------------------------------------------------' This returns number of valid SQL instances and a space' delimited string that lists the instances.'-----------------------------------------------------------    Dim hKey As Long, i As Integer    Dim strVersionInfo As String    strSQLInstances = ""    GetValidSQLInstances = 0        If RegOpenKey(HKEY_LOCAL_MACHINE, _    "Software\Microsoft\Microsoft SQL Server", hKey) Then        RegQueryStringValue hKey, "InstalledInstances", strSQLInstances        RegCloseKey hKey        StrConv strSQLInstances, vbUpperCase        If InStr(1, strSQLInstances, "MSSQLSERVER") Then           If RegOpenKey(HKEY_LOCAL_MACHINE, _           "Software\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion", _           hKey) Then                RegQueryStringValue hKey, "CurrentVersion", strVersionInfo                RegCloseKey hKey                If Mid(strVersionInfo, 1, 1) <> 8 Then                    Replace strSQLInstances, "MSSQLSERVER", ""                End If            End If        End If        Trim strSQLInstances        If Len(strSQLInstances) > 0 Then            GetValidSQLInstances = GetValidSQLInstances + 1        Else            Exit Function        End If        For i = 1 To Len(strSQLInstances)            If Mid$(strSQLInstances, i, 1) = " " Then                GetValidSQLInstances = GetValidSQLInstances + 1            End If        Next i    End IfEnd FunctionPublic Function RegOpenKey(ByVal hKey As Long, _ByVal lpszSubKey As String, phkResult As Long) As Boolean'-----------------------------------------------------------' FUNCTION: RegOpenKey' Opens an existing key in the system registry.' Returns: True, if the key opened successfully. False' otherwise.' Upon success, phkResult is set to the handle of the key.'-----------------------------------------------------------    Dim lResult As Long    Dim strHkey As String    strHkey = strGetHKEYString(hKey)    lResult = OSRegOpenKey(hKey, lpszSubKey, phkResult)    If lResult = ERROR_SUCCESS Then        RegOpenKey = True    End IfEnd FunctionPublic Function RegCloseKey(ByVal hKey As Long) As Boolean    Dim lResult As Long'-----------------------------------------------------------' FUNCTION: RegCloseKey' Closes an open registry key.' Returns: True on success, else False.'-----------------------------------------------------------    lResult = OSRegCloseKey(hKey)    RegCloseKey = (lResult = ERROR_SUCCESS)End FunctionPrivate Function strGetHKEYString(ByVal hKey As Long) As String'-----------------------------------------------------------'Given an HKEY, return the text string representing that key.'-----------------------------------------------------------    Dim strKey As String    Dim intIdx As Integer    strKey = strGetPredefinedHKEYString(hKey)    If Len(strKey) > 0 Then        strGetHKEYString = strKey        Exit Function    End If End FunctionPrivate Function strGetPredefinedHKEYString(ByVal _hKey As Long) As String'-----------------------------------------------------------'Given a predefined HKEY, return the text string representing'that key, or else return vbNullString.'-----------------------------------------------------------    Select Case hKey        Case HKEY_CLASSES_ROOT            strGetPredefinedHKEYString = "HKEY_CLASSES_ROOT"        Case HKEY_CURRENT_USER            strGetPredefinedHKEYString = "HKEY_CURRENT_USER"        Case HKEY_LOCAL_MACHINE            strGetPredefinedHKEYString = "HKEY_LOCAL_MACHINE"        Case HKEY_USERS            strGetPredefinedHKEYString = "HKEY_USERS"    End SelectEnd FunctionPublic Function RegQueryStringValue(ByVal hKey As Long, _ByVal strValueName As String, strData As String) As Boolean'-----------------------------------------------------------' Retrieves the string data for a named' (strValueName = name) or unnamed (Len(strValueName) = 0)' value in a registry key. If the named value' exists, but its data is not a string, this function' fails.'' Returns: True on success, else False.'   On success, strData is set to the string data value.'-----------------------------------------------------------    Dim lResult As Long    Dim lValueType As Long    Dim strBuf As String    Dim lDataBufSize As Long    lResult = OSRegQueryValueEx(hKey, strValueName, 0&, _              lValueType, _        ByVal 0&, lDataBufSize)    If lResult = ERROR_SUCCESS Then        If lValueType = REG_SZ Then            strBuf = space$(lDataBufSize)            lResult = OSRegQueryValueEx(hKey, strValueName, 0&, _                 0&, ByVal strBuf, lDataBufSize)            If lResult = ERROR_SUCCESS Then                RegQueryStringValue = True                strData = StringFromBuffer(strBuf)            End If                ElseIf lValueType = REG_MULTI_SZ Then            strBuf = space$(lDataBufSize)            lResult = OSRegQueryValueEx(hKey, strValueName, 0&, _                      0&, _                ByVal strBuf, lDataBufSize)            If lResult = ERROR_SUCCESS Then                RegQueryStringValue = True                strData = ReplaceNullsWithSpaces(strBuf)            End If        End If    End IfEnd FunctionPublic Function StringFromBuffer(Buffer As String) As String    Dim nPos As Long    nPos = InStr(Buffer, vbNullChar)    If nPos > 0 Then        StringFromBuffer = Left$(Buffer, nPos - 1)    Else        StringFromBuffer = Buffer    End IfEnd FunctionPublic Function ReplaceNullsWithSpaces(str As String) As String'-----------------------------------------------------------' Replace all null characters with spaces.'-----------------------------------------------------------    Dim i As Integer    If Len(str) > 0 Then        For i = 1 To Len(str)            If Mid$(str, i, 1) = vbNullChar Then                Mid$(str, i, 1) = " "            End If        Next i        ReplaceNullsWithSpaces = Left$(str, Len(str) - 2)    Else        ReplaceNullsWithSpaces = str    End IfEnd FunctionPublic Function ComputerName() As String'-----------------------------------------------------------'  Returns the local computer name.'-----------------------------------------------------------    Dim nLen As Long    Dim strComputerName As String    nLen = MAX_COMPUTERNAME_LENGTH    strComputerName = String$(nLen, 0)    GetComputerName strComputerName, nLen    strComputerName = Left$(strComputerName, nLen)    ComputerName = strComputerNameEnd Function  Public Function fCheckForCompatibleOS() As Boolean'-----------------------------------------------------------'  Checks to see if the OS can use integrated security.'-----------------------------------------------------------    Dim osinfo As OSVERSIONINFO    Dim retvalue As Integer    osinfo.dwOSVersionInfoSize = 148    osinfo.szCSDVersion = space$(128)    retvalue = GetVersionExA(osinfo)    If osinfo.dwPlatformId >= VER_PLATFORM_WIN32_NT Then        fCheckForCompatibleOS = True    Else        fCheckForCompatibleOS = False    End IfEnd Function
  8. Uložte modul druhé jako GetSQLInstances.
  9. Otevřete existující spouštěcí formulář v návrhovém zobrazení nebo pokud máte spouštěcí formulář vytvořit nový formulář spuštění.
  10. Přidat příkaz OnOpen událostní vlastnost spouštěcí formulář volání funkce fStartUp.

    Musíte zadat název databáze, kterou chcete vytvořit na serveru SQL a stávající název souboru dat serveru SQL. Můžete také určit požadované přihlašovací název serveru SQL a heslo jako volitelné argumenty třetí a čtvrtý Pokud nepoužíváte integrované zabezpečení. Například pokud chcete vytvořit databázi Northwind se nazývá pomocí datový soubor označovaný jako NorthwindSQL.mdf funkce zobrazen následujícím způsobem:
    =fStartUp("Northwind","NorthwindSQL.mdf","","")
    Poznámka tato poznámka se týká zabezpečení serveru SQL. Přihlašovací jméno ve volání funkce je zmíněných nezadáte, pokusí se kód v tomto článku použít integrované zabezpečení, pokud podkladové operačního systému můžete podporují (Microsoft Windows NT 4.0, Microsoft Windows 2000 a Microsoft Windows XP). Pokud je základní operační systém Microsoft Windows 98 nebo Microsoft Windows ME, máte platný uživatelský účet SQL Server a heslo. Bez ohledu na operační systém Pokud zadáte název alespoň přihlašovací kód pokusí připojit pomocí zabezpečení SQL s zadané přihlašovací jméno a heslo. Pokud máte kopii souboru dat SQL Server, musíte provést kopii tohoto souboru dat zahrnout balíčku nasazení.
  11. V nabídce Nástroje přejděte na položku Správa databáze a klepněte na příkaz Kopírovat databázový soubor.
  12. Ve výsledném dialogovém okně Otevřít zadejte název a umístění, kam chcete uložit soubor databáze, klepněte na tlačítko Uložit k dokončení procesu a zavřete dialogové okno. Při prvním spuštění projektu v cílovém počítači Access se pokusí připojit k serveru SQL Server zadaný v připojení vlastnosti souboru. Přestože stále spustí kód v tomto článku a stále aktualizuje informace o připojení, je vhodné odebrat existující informace o připojení před nasazením.

    Chcete-li odebrat existující informace o připojení, můžete spustit funkci MakeADPConnectionless(), která je součástí modulu modCopyConnect.

  13. Spustit funkci, zadejte do Okna Immediate následující a stiskněte klávesu ENTER:
    ?MakeADPConnectionless
  14. Uložte provedené změny.
  15. V nabídce Doplňky Pokud balení Průvodce uveden, přejděte ke kroku 19.
  16. Příkaz nabídky DoplňkySprávce doplňků.
  17. V seznamu Dostupné doplňky klepněte na tlačítko Průvodce balení.
  18. Pro zatížení chování Loaded/Unloaded klepněte a potom klepněte na tlačítko OK.
  19. V nabídce Doplňky klepněte na tlačítko Průvodce balení.
  20. Postupujte podle kroků v Průvodci, dokud nedosáhnete obrazovky závislosti.
  21. Na obrazovce závislosti klepněte na Přidat... soubor přidat soubor MDF zazálohovanou dříve.
  22. Dokud obrazovka Runtime vlastnosti připojení, klepněte na tlačítko Další. Na této obrazovce klepněte na políčko Microsoft_SQL_Server 2000 Desktop Engine (MSDE) zahrnout stroj MSDE.
  23. Postupujte podle pokynů průvodce dokončete balíček nebo můžete klepnutím na tlačítko Dokončit kdykoli chcete.
Po vytvoření balíčku jste připraveni k instalaci balíčku v počítačích koncových uživatelů.

back to the top

Odkazy
Další informace o včetně SQL 2000 Desktop Engine balíčky pro ostatní počítače klepněte na následující čísla následujících článcích databáze Microsoft Knowledge Base:
290623Jak připojit existující databázi SQL Server 2000 SQL Server 2000 Desktop Engine
322228Vkládání instalaci MSDE 2000 do instalace vlastních aplikací (bílý papír)
274199MSDE 2000 nelze nainstalovat na Windows 95
299351Chyba: Instalace MSDE nezdaří systémů používajících SQL Server 2000 Service Pack 1 nebo 2 nainstalován
Další informace o přenesení databáze SQL 2000 Desktop Engine, klepněte na následující číslo článku databáze Microsoft Knowledge Base:
325023Přenesení SQL Server 2000 Desktop Engine na SQL Server
back to the top
OFFXPDEV ACC2002 ACCXP

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 299297 - Poslední kontrola: 02/05/2014 21:41:12 - Revize: 5.1

Microsoft Office XP Developer Edition, Microsoft Access 2002 Standard Edition

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbhowto kbadp kbfaq KB299297 KbMtcs
Váš názor