Access teopassing delen met drie personen.

Status
Niet open voor verdere reacties.

gcjvanbeek

Gebruiker
Lid geworden
27 nov 2006
Berichten
164
In een gezamenlijk netwerk is het mogelijk om om met meerdere personen gelijktijdig een toepassing in Access te benaderen en gegeven toe te voegen en te muteren.
Wat is er voor nodig om dit voor elkaar te krijgen als de gebruikers niet in een zelfde netwerk zitten?

Kan ik een server inrichten met Windows 7 die mij de functionatiteit biedt om op afstand in te loggen en gelijktijdig meerde personen de Access toepassing te laten gebruiken?

Hoe doe ik dat?

apestaart
 
Als je niet op hetzelfde netwerk zit dan kan je niet in dezelfde database werken. De gebruikers moeten toegang hebben tot de database. Als je echter gebruik maakt van replication dan kunnen de gebruikers thuiswerken en synchroniseren met de database als ze weer op het werk zijn. Replication toepassen is niet eenvoudig maar er is een wizard die je verder helpt. Zorg dat je een backup maakt van je bestanden voordat je eraan begint!

Replication is al beschikbaar sinds versie 2.0

HTH:D
 
Ik zoek toch een oplossing

Hallo Guus,
Al vier jaar gebruik ik naar redelijke tevredenheid replica's bij drie personen. Om de 14 dagen worden de databases gesynchroniseerd.
De laatse tijd onderinden we problemen doordat de versies vande gebruikers niet hetzelfde waren. Access 2003 met Access 2000 bestandcode. Dit gaf op een gegeven moment plotseling problemen, waarbij de database corrupt werdt. We hebben alles weer weten te hestellen, maar toch. Hierover heb ik ook 2 weken geleden vragen gesteld op het forum.
Access 2007 ondersteunt replica's niet, dus zoeken we naar een andere methode om gelijktijdig in een (virtueel) netwerk de toepassing te kunnen draaien.

Zou het niet kunnen lukken met een virtueel netwerk? Moet ik de vraag wellicht voorleggen aan een ander forum?

groet,
apestaart
 
Ik wist niet dat replica's niet werden ondersteund door 2007.:confused:

Als je in een virtueel netwerk met live data werkt dan zou het geen verschil uitmaken met een echt netwerk. Dat durf ik niet te zeggen. Proberen dus.

Koppel je het antwoord terug want ik ben wel benieuwd.
 
ik hoopte dat iemand dat al gedaan had

Hallo Guus,
Ik hoopte dat iemand dat al gedaan had en mij zou kunnen uitleggen wat daar allemaal voor nodig is.
Ik acht nog even reacties af.
apestaart
 
Verder geen reacties.

Hellas zijn er verder geen reacties binnengekomen. Het ziet er naar uit dat ik zelf een server zal moeten inrichten en het proberen om remote desktop of ander protocol ACCES te draaien.

Ik had overigens verwacht dat er wel iemand met deze kennis in het forum aanwezig was.

Wellicht moet ik de vraag stellen bij een enader forum onderdeel?

Apestaart
 
Netwerk gevaarlijk

Hallo Guus,
Bij FAQ op dat forum vind ik niets dan waarschuwingen om niet remote met meerdere personen te werken. Er zijn teveel factoren die de database kunnen ophangen. Ik denk dat ik in VB mijn eigen synchronisatie voor de toepassing onder 2007 ga schrijven. Aangezien het hier om een uitgebreide kaartenbak met medische gegeven per patient en de gevoerde correspondentie met hen gaat zou dat moeten lukken.
Ik sluit nu deze vraag maar af.
Apestaart
 
In dat geval moet je eens zoeken op consolidatie van databases. In plaats van Autonummer velden moet je dan GUIDs gebruiken.

succes!
 
De weg wijzen

Hallo Guus,
Kun je me nog een beetje de weg wijzen? Heb je voor mij een link?
Apestaart
 
http://www.access-programmers.co.uk/forums/showthread.php?t=186697&highlight=guid

Het probleem met consolidatie is dat je PK velden in beide databases voor kunnen komen zodat je eerst in die tabel een uniek veld moet toevoegen zodat de twee tabellen uit elkaar gehouden kunnen worden. Het GUID veld zou je naderhand weer kunnen verwijderen. Als je vaker denkt te gaan consolideren kun je overwegen een GUID in plaats van een Autonummer veld te gebruiken.

Enjoy!
 
Nog enkele vragen

Ik heb de site met jouw antwoord bezocht. Ik heb nog een paar vragen.
Split in FE en BE : betekent dat gesplits in forms en datagedeelte?
PK is Primary key?
"We will add an extra field (named GUID)" Wat voor gegevenstype moet daarvoor worden gekozen?

Als ik het verder goed begrijp komen de gegevens uit de ene database te staan achter de de andere gevevens van de andere database. Het overzicht van welke gegevens als eerste werden ingevuld raak je daardoor kwijt. Of zie ik dat fout.?


Apestaart
 
Ik heb de site met jouw antwoord bezocht. Ik heb nog een paar vragen.
Split in FE en BE : betekent dat gesplits in forms en datagedeelte?
Ja
PK is Primary key?
Ja
"We will add an extra field (named GUID)" Wat voor gegevenstype moet daarvoor worden gekozen?
String

Als ik het verder goed begrijp komen de gegevens uit de ene database te staan achter de de andere gevevens van de andere database. Het overzicht van welke gegevens als eerste werden ingevuld raak je daardoor kwijt. Of zie ik dat fout.?
Ja

Apestaart

Stel je hebt een database1, een tabel1 en een PK1 voeg daaraan een string veld GUID1 toe. In alle tabellen die een relatie hebben met tabel1, alle FKs, moet een GUID veld worden toegevoegd. Zorg er nu voor dat de PK(FK) en GUID velden dusdanig overeenkomen dat je als het ware de PK kan verwijderen. Doe dit ook in database2. Als je nu de tabellen van database2 toe voegt aan database1 dan hou je de relatie van alle records in stand.
Je kan er nu voor kiezen de FK in alle tabellen te updaten aan de hand van de relatie die je gelegd heb door de GUIDs en daarna de GUIDs verwijderen óf je kiest ervoor alle PKs en FKs te verwijderen.

Als je eenmaal de GUID velden hebt toegevoegd aan de tabel1 dan je de velden vullen met een GUID.

HTH:D

Code voor het maken van een GUID:
Code:
Option Compare Database
Option Explicit

' Samples:
'   {3201047B-FA1C-11D0-B3F9-004445535400}
'   {0547C3D5-FA24-11D0-B3F9-004445535400}

    DefLng A-Z

    ' The following is from Topic: Windows Conferencing API, GUID, MSDN April 1997
    ' typedef struct _GUID {
    '    unsigned long Data1;
    '    unsigned short Data2;
    '    unsigned short Data3;
    '    unsigned char Data4[8];
    '} GUID;
    '
    'Holds a globally unique identifier (GUID), which identifies a particular _
     object class and interface. This identifier is a 128-bit value.
    '
    'For more information about GUIDs, see the Remote Procedure Call (RPC) _
     documentation or the OLE Programmer's Reference.
    '

    Private Type GUID
        Data1 As Long
        Data2 As Integer
        Data3 As Integer
        Data4(0 To 7) As String * 1
    End Type
    
    Declare Function CoCreateGuid Lib "ole32.dll" (tGUIDStructure As GUID) As Long
    
    Const mciLen As Integer = 4     'each part's length

Public Function CreateGUID() As String
    Dim sGUID   As String       'store result here
    Dim tGUID   As GUID         'get into this structure
    If CoCreateGuid(tGUID) = 0 Then 'use API to get the GUID
        With tGUID              'build return string
            sGUID = "{" & PadLeft(Hex(.Data1), mciLen * 2) & "-"
            sGUID = sGUID & PadLeft(Hex(.Data2), mciLen) & "-"
            sGUID = sGUID & PadLeft(Hex(.Data3), mciLen) & "-"
            sGUID = sGUID & FormatGUIDData4(.Data4())
        End With
        sGUID = sGUID & "}"     'ending brace
        CreateGUID = sGUID
    End If
End Function

Private Function FormatGUIDData4(aryData4() As String * 1) As String
    Dim i       As Integer      'loop thru the array
    Dim sGUID   As String       'store result here
    Dim sTemp1  As String       'first part here
    Dim sTemp2  As String       'second part here
    For i = LBound(aryData4()) To UBound(aryData4())   'process string array
        If i < 2 Then           'first part
            sTemp1 = sTemp1 & Hex(Asc(aryData4(i)))
        Else                    'second part
            sTemp2 = sTemp2 & Hex(Asc(aryData4(i)))
        End If
    Next
    sGUID = PadLeft(sTemp1, mciLen) & "-" & PadLeft(sTemp2, mciLen * 3) 'pad left with zeros
    FormatGUIDData4 = sGUID                     'return what we created
End Function

Private Function PadLeft(sString As String, iLen As Integer) As String
' Pad with left zreos if needed
    Dim sTemp As String
    sTemp = Right$(String$(iLen, "0") & sString, iLen)
    PadLeft = sTemp
End Function
 
Laatst bewerkt:
Guids

Hallo Guus,
Ziet er ingewikkeld uit. Een vraag die meteen oppopt is : Welke waarde wordt aan de functie meegegeven, zodat ik telkens een andere waarde krijg?

Zou je zelf ook een soort GUID kunnen bouwen met als uitgangspunt dat het aantal records nooit boven de 2 tot de 16de komt (longinteger)?
Bijv. : Definieer een string, begin met een kenmerk van de database1(A) en database 2(B) en zetverder de waarde van de PK,s in die string. Hierdoor zou je ook altijd kunnen zien in welke database het gegeven is ingebracht.
Dit is zomaar een gedachte.
apestaart
 
hallo guus,
ziet er ingewikkeld uit.
maar dat is nhet niet. Neem de code op in een module en noem die bijvoorbeeld modguid
een vraag die meteen oppopt is : Welke waarde wordt aan de functie meegegeven, zodat ik telkens een andere waarde krijg? geen

zou je zelf ook een soort guid kunnen bouwen met als uitgangspunt dat het aantal records nooit boven de 2 tot de 16de komt (longinteger)?
ja hoor dat kan, maar waarom zou je?
bijv. : Definieer een string, begin met een kenmerk van de database1(a) en database 2(b) en zetverder de waarde van de pk,s in die string. Hierdoor zou je ook altijd kunnen zien in welke database het gegeven is ingebracht.
Dit is zomaar een gedachte.
als je alleen al een veld opneemt met de naam van de database of eenvoudig een volgnummer. Dan moet je alleen een gecombineerde sleutel als pk nemen. Je oorspronkelijke pk komt dan meerdere keren voor voor iedere database. Je moet de rest van je applicatie daarop aanpassen.
apestaart
hth:d
 
Een en ander proberen

Hallo Guus,
Ik ga beide proberen. Ik meld me over enige tijd weer of het gelukt is en hoe.
Groet,
Apestaart
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan