Acces front-end / SQL-Server als back-end

Status
Niet open voor verdere reacties.

linkav

Gebruiker
Lid geworden
13 jun 2007
Berichten
465
Beste,

Ik heb jaren terug een acces-applicatie geschreven om facturen te beheren. Als front-end gebruik ik Acces 2010 en de data staat in een SQL-server database.
Omdat niet alle data direct toegankelijk en zichtbaar moet blijven, had ik gedacht om alles vanaf 01/01/2010 in de huidige database te laten staan en de 'oude' data naar een nieuwe 'archief' database te verplaatsen.

Slechts enkele gebruikers mogen 'oude' data raadplegen en daarom wou ik de database op een externe HDD zetten.

Mijn vragen:
- Kan ik een sql-database op een externe hdd zetten?
- Hoe kan ik in acces makkelijk 'switchen' tussen de huidige database en de 'archief' database?

Alvast bedankt.
 
Vraag 1: geen idee, maar dat is een kwestie van uitproberen denk ik. Het is vermoed ik wel mogelijk, als ik deze tekst lees op een forum:
Moving as simple database to an external drive should be easy:

detach the database with exec sp_detach_db '<db_name>'
copy the files to the new location on the external drive
reattach the database with exec sp_attach_db '<db_name>', '<full_path_to_new_location_of_mdf>', '<full_path_to_ldf>'

(you can do this through the GUI tools too, attach and detach are usually found under the all tasks" heading on relevant right-click menus). My experience of this is on SQL7, 2000 and 2005 only, using internal drives in USB enclosures, but I assume it is not something that will have changed in 2008 (and it should work with other USB mass-storage devices like flash sticks). The drive must be locally mounted - SQL Server will not allow you to attach to a database on network storage.

Before unplugging the drive ensure that either the database is detached, or SQL Server is shut down (or the machine is fully powered off, of course). If you release the disk for removable by powering off the machine or shutting down SQL server, the drive needs to be plugged in before SQL server next starts.
.
De vraag + antwoord staat hier.
Switchen zal niet gaan; hooguit kun je beide databases koppelen en de verschillende gebruikers verschillende rechten geven. Ook kun je met niet-gebonden formulieren werken die je m.b.v. knoppen steeds opnieuw aan de juiste bron koppelt.
 
Hey Octafish,

Bedankt voor de info al.

Kan ik de gekoppelde tabellen niet her-koppelen in code (door middel van een knop die alleen zichtbaar is voor een bepaalde gebruiker en als deze gebruiker op die knop klikt dat de (nodige) tabellen her-linkt worden van de 'actuele' database naar de 'archief' database en omgekeerd)?

Groeten,
Ariane
 
Dat zou je ook kunnen doen, maar ik weet niet hoe groot je database is, maar dat kost de gebruiker vermoed ik best wel wat tijd. Maar je kunt daar wel een functie voor gebruiken, vermoed ik. Ik gebruik deze routine om een database te koppelen met een Access backend. Wellicht kun je hem ombouwen naar je eigen systeem.
Code:
Public Function RefreshTableLinks() As String
On Error GoTo ErrHandle

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim strCon As String
Dim strBackEnd As String
Dim strMsg As String
Dim intErrorCount As Integer
Dim tmp As Variant
Set db = CurrentDb

'Door alle tabellen in de TableDefs Collectie lussen.
For Each tdf In db.TableDefs
    If Left$(tdf.Connect, 10) = ";DATABASE=" Then       'Tabel is een gelinkte tabel.
        strCon = Nz(tdf.Connect, "")                    'Lees de Connection String uit.
        'Gebruik de SPLIT opdracht om de back-end database naam te splitsen.
        tmp = Split(strCon, "\")
        'Checken of we een Access database te pakken hebben
        If InStr(1, tmp(UBound(tmp)), "mdb") > 0 Or InStr(1, tmp(UBound(tmp)), "accdb") > 0 Then
            'De nieuwe Connection String opbouwen en verversen.
            Set tdf = db.TableDefs(tdf.Name)
            tdf.Connect = ";DATABASE=" & CurrentProject.Path & "\" & tmp(UBound(tmp))
            tdf.RefreshLink
        Else
            'Als er een foutje is: de foutmelding toevoegen aan de foutmeldingsboodschap.
            intErrorCount = intErrorCount + 1
            strMsg = strMsg & "Niet gelukt om de back-end database naam uit te lezen." & vbNewLine
            strMsg = strMsg & "Tabel Naam: " & tdf.Name & vbNewLine
            strMsg = strMsg & "Connect = " & strCon & vbNewLine
        End If
    End If
Next tdf

ExitHere:
    On Error Resume Next
    If intErrorCount > 0 Then
        strMsg = "Er waren problemen met het verversen van de tabel links: """ _
        & vbNewLine & strMsg & "In Procedure RefreshTableLinks"""
        RefreshTableLinks = strMsg
    End If
    Set tdf = Nothing
    Set db = Nothing
    Exit Function
    
ErrHandle:
    intErrorCount = intErrorCount + 1
    strMsg = strMsg & "Error " & Err.Number & " " & Err.Description
    strMsg = strMsg & vbNewLine & "Table Name: " & tdf.Name & vbNewLine
    strMsg = strMsg & "Connect = " & strCon & vbNewLine
    Resume ExitHere

End Function
 
Zijn er nog zaken die je op een specifieke manier hebt moeten oplossen? Zo ja: kun je die dan nog even melden? Dan help je toekomstige lezers ook weer verder :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan