check, maak en koppel tabel in BE?

Status
Niet open voor verdere reacties.

Frits1969

Gebruiker
Lid geworden
29 nov 2009
Berichten
64
Hallo allemaal,

Ik gebruik MS Access 2016.
Ik heb een BE en een FE. Dus de database staat in de BE en de formulieren staan in de FE.

Ik wil vanuit een formulier met VBA checken of in de BE een formulier bestaat.
Als deze niet bestaat, wil ik hem met VBA aanmaken en vervolgens koppelen.

Ik heb echter geen idee hoe ik dit kan doen.

Ik verneem dit graag van de ervare Access gebruikers.

Vriendelijk bedankt alvast,
Frits van Leeuwen
 
Weet je zeker dat je dat wilt? De logische werkwijze is dat je in de Backend alleen je tabellen hebt (desnoods wat queries), en in de Frontend de formulieren, rapporten en eigen queries van de gebruikers. Als je al een keer een formulier in de backend zet is dat doorgaans een beheerders formulier dat je in de frontend toch niet nodig hebt. En heb je dat wél een keer nodig, dan kun je hem simpel importeren. De importstappen daarvoor kun je ook nog eens opslaan zodat je ze makkelijk kunt herhalen.

Bovendien is dit:
Als deze niet bestaat, wil ik hem met VBA aanmaken en vervolgens koppelen.
volgens mij onmogelijk. Je kunt alleen tabellen koppelen.
 
Weet je zeker dat je dat wilt? De logische werkwijze is dat je in de Backend alleen je tabellen hebt (desnoods wat queries), en in de Frontend de formulieren, rapporten en eigen queries van de gebruikers. Als je al een keer een formulier in de backend zet is dat doorgaans een beheerders formulier dat je in de frontend toch niet nodig hebt. En heb je dat wél een keer nodig, dan kun je hem simpel importeren. De importstappen daarvoor kun je ook nog eens opslaan zodat je ze makkelijk kunt herhalen.

Zoals je de omgang met de BE en FE omschrijft, is het logisch en zo heb ik het ook. Maar ik denk dat ik niet duidelijk genoeg geweest ben.
Ik wil per jaartal een tabel maken, als die er nog niet is. Deze worden gelimiteerd in hoeveelheid tabellen.
Ik wil dat jaartal eerst checken, dus of er al een tabel in de BE staat. Als deze tabel niet daar bestaat, wil ik de tabel in de BE maken. Daarna moet deze natuurlijk ook met de FE gekoppeld worden, want anders kan ik de tabel niet gebruiken in de FE.
Dit alles moet in de VBA van een button op een formulier gebeuren.

Ik hoop dat ik hiermee duidelijk omschreven heb, wat ik wil.
 
Kan ik dezelfde quote gebruiken:
Weet je zeker dat je dat wilt?
... Ik wil per jaartal een tabel maken, als die er nog niet is.
Niet om het een of het ander, maar waarom zou je dat doen? Lijkt mij een erg zinloze onderneming. En vrij kansloos als het gaat om data-integriteit. Ik snap nog wel dat je oude data uit een productietabel wilt hebben om de productie hanteerbaar te houden. Een grote tabel wil immers ook wel wat trager worden met de jaren. Maar deze oplossing is, van alle oplossingen die je kan bedenken, denk ik wel zo'n beetje de rotste die je kunt bedenken :).

Mijn oplossing voor grote tabellen is althans anders, en werkt m.i. dus vele malen beter. Ik maak, al dan niet in de productie backend, soms gebruik ik er een aparte backend voor, een Historie tabel. Deze koppel ik dan op de normale manier aan de FE. M.b.v. een toevoegquery en een verwijderquery verplaats ik de records die niet meer nodig zijn naar de historietabel, et presto, de klus is geklaard: een schone productietabel en een altijd raadpleegbare historietabel. Ik maak er zelfs geen nieuwe formulieren voor, want de layout ervan is natuurlijk identiek aan de productietabellen. Gewoon met een knop de Recordsource aanpassen als je de historie wilt zien. Dat een historietabel dan groot kan worden, en dus wat trager, vind ik niet echt boeiend. Als het goed is wordt die historie toch maar zelden geraadpleegd. Snelheid daarop is dus absoluut geen prioriteit. Functionaliteit van het systeem daarentegen des te meer :D.
 
Bedankt voor het meedenken, maar ik stel de vraag niet voor niets. Ik heb een structuur bedacht waarbij de door mijn bedachte oplossing het beste past. Het enige dat ik niet weet, is hoe ik dit technisch zou moeten ingeven.
Dit wat ik voorstel, is slechts een begin van een uitgebreid proces. De rest van het proces weet ik wel op te lossen. Nu dit probleem. Laten we de koe bij de horens vatten en gewoon een antwoord op mijn vraag bedenken. Want meedenken is leuk, maar ik wil niet het forum vervuilen met het waarom of waarom niet een bepaalde oplossing.
 
Laten we dan beginnen met constateren dat het antwoord op jouw vraag
Ik wil vanuit een formulier met VBA checken of in de BE een formulier bestaat.
Als deze niet bestaat, wil ik hem met VBA aanmaken en vervolgens koppelen.
luidt: dat kan niet. Om de eenvoudige reden dat je formulieren niet kunt koppelen.
 
Ik schrijf ook niet dat ik een formulier wil koppelen. Misschien moet je mijn vraag nog eens lezen. :-(
Ik wil in FE een VBA programma starten. Daarin wil ik in de BE een tabel maken. Maar eerst moet ik checken of dat die tabel al bestaat.
Vanuit die zelfde situatie wil ik daarna de tabel koppelen. Dit is dus de koppeling tussen BE en FE. Het gaat hier over een tabel die ik vlak daarvoor aanmaak.
 
Lees mijn citaat eens: dat is letterlijk uit jouw vraag gehaald. Het woord deze in de tweede zin slaat taaltechnisch gezien op formulier. Al was het maar omdat je nergens over een tabel rept. Tabellen aanmaken is overigens goed te doen met VBA.
 
Oke, nu je weet wat ik bedoel, blijft de vraag. Het gaat niet over of het kan of niet, maar hoe. Laten we de vraag splitsen.
Het eerste wat ik wil doen, is het checken of een tabel in de BE bestaat.
 
Ik kan momenteel niet bij mijn voorbeelden, maar in essentie is de die je nodig hebt hetzelfde als de code voor het herlinken van een backend. En dat is een onderwerp dat ik regelmatig heb behandeld als vraag. De code moet dus wel ergens in dit forum te vinden zijn. Anders moet je tot vanavond wachten of even googelen op "Relink backend database".
 
Dat geeft niet, ik heb nu ook even nog niet de gelegenheid om verder te gaan. Maar als ik vanavond thuis ben, zal ik ook met de door jou verstrekte informatie verder zoeken.
 
Met deze code kun je controleren of een tabel bestaat of niet.
Code:
Function ifExternalTableExists(TableName As String, sPath As String) As Boolean
Dim rs As DAO.Recordset, Db As DAO.Database ' DAO Vars
Dim strSQL As String
   'Accepts
   'sPath: Complete File Path to external MS Access Database
   'TableName: Name of Table to Look for
   'USAGE: ifExternalTableExists "TABLENAME", "sPath"
   On Error GoTo NoTable 'If there is no table capture the error.

   Set Db = CurrentDb()
   'If Table is there open it
   strSQL = "SELECT * FROM " & TableName & " IN """ & sPath & """[MS ACCESS;];"
   Set rs = Db.OpenRecordset(strSQL)
   ifExternalTableExists = True
   rs.Close
   Db.Close
   Exit Function

NoTable:
   'If table is not there close out and set function to false
   Set rs = Nothing
   Db.Close
   Set Db = Nothing
   ifExternalTableExists = False
End Function

Er zijn uiteraard ook andere methodes, maar wellicht heb je hier al genoeg aan.
 
Sorry dat het zo lang duurde, maar er kwam het een en ander tussen.
Hiermee lukt het me inderdaad om te testen of een tabel in een extern bestand bestaat.

geweldig en dank je wel OctaFish.

De volgende stap werd aanmaken van die tabel als hij niet bestaat. En ook dat is me gelukt.
De derde stap wordt het kopieeren vanuit een sql opdracht naar dat bestand.
Maar ik denk dat dat verder wel zal lukken.

Heel erg bedankt.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan