Werken met meerdere backends vanwege jaarovergang

Status
Niet open voor verdere reacties.

Robert971

Gebruiker
Lid geworden
6 jul 2012
Berichten
171
Voor een softwareapplicatie gebouwd in Access zijn dmv een Front-end formulier in 2015 behoorlijk wat Records ingevoerd door verschillende werknemers.
Het gaat hier om documentnrs. van 1 t/m ...........1000, uiteraard ieder DocumentRecord automatisch gegenereerd o.b.v. aanmaken nieuw document door gebruiker (Autonummering in onderliggende tabel).

In 2016 moet opnieuw deze actie worden gestart en moet uiteraard weer gestart worden met nummer 1 (niet met 1001). De oude records van 2015 moeten in dezelfde Front-end (vanuit hetzelfde Navigatieformulier) behouden blijven en op te vragen/+te bewerken vanuit hetzelfde Front-end door de gebruiker.

Dit is technisch op verschillende manieren op te lossen. Mijn vraag, welke de beste is? zeker i.v.m. de performance (snelheid van Front-end) en dataopslag.

-Mogelijkheid 1 (voor jaartal 2015 & 2016 werken vanuit 1 backend database): Kopie van alle tabellen maken in de orginele Backend (database), en voor 2016 deze tabellen leegmaken. Hiermee staan dus alle tabellen van jaar 2015 & 2016 in 1 Backend. Front-end spreekt vanuit formulieren betreffende tabellen 2015 & 2016 aan.

-Mogelijkheid 2 (Database 2015 & 2016 opsplitsen over 2 aparte backends): Tabellen voor 2015 importeren in nieuwe database voor 2016 en deze tabellen leeg maken (voor 2016). De Frond-end werkt nu met 2 databases, 1 voor 2015 (apart bestand/database) en 1 voor 2016 (apart bestand/database).


Graag hoor ik advies hoe jullie denken wat de beste oplossing is.
Of misschien een heel ander scenario.

Bvd
Robert
 
Je bent nogal zeker van je zaak (ik tel heel wat 'uiteraard's). Maar ik zou je toch optie 3 willen voorstellen: alles bij het oude houden, en je nummerverld DocumentNummer vervangen door een 'normaal' veld (ben je gelijk van het probleem af dat je autonummers gaten opleveren) en het jaartall opnemen in het nummer. Dus de nummers voor 2015 worden dan: 20150001, 20150002 etc (of 2015-0001, 2015-0002). En in 2016 start je dan met: 20160001, 20160002 etc (of 2016-0001, 2016-0002).
Het aantal records dat je nu lijkt op te slaan in je db is, databasetechnisch gezien, een lachertje tegenwoordig. Daar mag geen enkele db een probleem mee hebben qua snelheid. Om records te zien van het huidige jaar filter je gewoon de tabel op jaartal, en je bent klaar.
 
Dank voor je reactie.

en het jaartal opnemen in het nummer

Het jaartal heb ik al toegevoegd aan het nummer. Het documentnummer wordt bij mij bepaald o.b.v. samenvoeging jaartal+autonummer in een tekstveld,
Als volgt:
Code:
Tekstveld=[jaartal]&""&[DocumentID]

Maar je adviseert dus de autonummering uit te schakelen..? Kun je hier iets duidelijker schetsen wat je bedoeld, of een voorbeeld geven? er moet namelijk wel automatisch geteld worden.

Het aantal records dat je nu lijkt op te slaan in je db is, databasetechnisch gezien, een lachertje tegenwoordig. Daar mag geen enkele db een probleem mee hebben qua snelheid
Het gaat hier niet alleen om de Documenttabel. Aan de tabel zijn wel vijftig andere tabellen gekoppeld met onderlinge relaties (Klanten, Medewerkers, Prijzen, Autorisatie..etc.) waar gegevens uitgehaald worden om tot het juiste document te komen. De database is dus heel wat groter dan 1000 records. (1000 records geldt uiteraard alleen voor de documenttabel).

Om records te zien van het huidige jaar filter je gewoon de tabel op jaartal, en je bent klaar.
Deze oplossing is inderdaad de eenvoudigste maar die wil ik nou juist niet.
De documenten per jaartal wil ik echt in een aparte onderliggende tabel hebben om te voorkomen dat het een enorme waslijst wordt, waardoor je door de bomen het bos niet meer ziet. Overzicht is enorm belangrijk merk ik tegenwoordig aan gebruikerservaringen.

Dus graag hoor ik de beste oplossing o.b.v. een nieuwe tabel in 2016, adviseer je dan om een wel 1 backend te behouden? of twee backends, gezien alle andere bijbehorende tabellen etc.?
 
Laatst bewerkt:
Ik ga het inderdaad toch allemaal maar bij het oude houden. Zoals je aangeeft, het wordt anders een enorm gedoe met nieuwe formulieren etc. Een onnodige uitbreiding van de database.
Ik blijf dus bij 1 tabel voor de Documenten van 2015 & 2016. Ik wil graag alleen in 2016 wel bij nummer 1 beginnen 2016-01, als de gebruiker een nieuw record aanmaakt moet automatisch 2016-02 worden gegenereerd. Hoe dit te realiseren zonder de autofunctie daar ga ik dan maar even op puzzelen...
 
Een oplossing is zie ik om het aantal vorige id's(automatisch genereerd in 2015) in 2016 in mindering te brengen op de laatst gegenereerde id. En vervolgens dit hele zaakje in combinatie met het tekstveld als nummer te laten genereren.
Je krijgt dan:

1 veld: Autonum: automatisch genereerd documentnummerID ( laatste nummer was 1000 )--> voor gebruikers--> 2015-1000--->eerste autonum 2016 is 1001
1 veld: Jaartal 2016 (tekstveld):
Code:
=Year(Now())
1 veld: Tekstveld: -
1 veld(Tekst): DocumentID bepalen 2016:
Code:
[Autonum]-1000
1 veld: Documentnummer (zoals de gebruikers dit te zien krijgen op het document en in gegevensblad/documentlijst):
Code:
[Jaartal]&""&[-]&""&[DocumentID]

Geeft bij eerste nummer 2016 (na samenvoeging van velden): 2016 - (1001-1000) --> 2016-1


Mocht je een betere oplossing weten, hoor ik graag.
 
Die is er uiteraard ;). Zoek maar eens in dit forum op het woord 'volgnummer' en je komt zat voorbeeldjes tegen van een functie die ik vaak promoot. Die kent 2 smaken: met en zonder koppelteken. Hier zijn ze:

Code:
Function VolgNummer() As String
Dim strSQL As String, Num As Integer
Dim tmp As Variant
     strSQL = "SELECT Top 1 [Volgnummer] FROM [Tabelnaam] WHERE Left([Volgnummer], 4)= Year(Date) & " ORDER BY [Volgnummer] DESC"
     With CurrentDb.OpenRecordset(strSQL)
          If .RecordCount > 0 Then
               Num = CInt(Right(.Fields(0), 4)) + 1
               sNum = Year(Date) & Right("0000" & Num, 4)
               VolgNummer = sNum
          Else
               VolgNummer = Year(Date)) & "0001"
          End If
     End With
End Function

en
Code:
Function NieuwVolgNummer() As String
Dim strSQL As String, sNum As String
Dim tmp As Variant

strSQL = "SELECT Top 1 [Volgnummer] FROM [Tabelnaam] WHERE Left([Volgnummer],4)= =" & Year(Date) & " Order By [Volgnummer] Desc"

With CurrentDb.OpenRecordset(strSQL)
    If .RecordCount > 0 Then
        tmp = Split(.Fields(0), "-")
        sNum = Right("0000" & CInt(tmp(UBound(tmp))) + 1, 4)
        NieuwVolgNummer = tmp(LBound(tmp)) & "-" & sNum
    Else
        NieuwVolgNummer = tmp(LBound(tmp)) & "-0001"
    End If
End With
    
End Function

Beide varianten werken prima, en je gebruikt ze alletwee op dezelfde manier: zet de functieaanroep in de eigenschap van het volgnummerveld als Standaardwaarde.
Daar zet je dan dus ofwel =VolgNummer(), ofwel =NieuwVolgNummer().
 
Thanks, bovenstaand zijn fraaiere oplossingen. Er is inderdaad heel wat gepost over dit onderwerp, ga dat nog even rustig doorlezen.
Vraag is i.i.g. opgelost.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan