Published: Sep 25, 2015 by Maarten Vroegindeweij
Revit ODBC en Microsoft Access
Bijgaand weer eens een blog. Deze keer over de mogelijkheden van Revit en de export naar een database.
Vanuit Revit kun je via een ODBC-driver exporteren naar verschillende databaseformaten. Afhankelijk van welke op je PC geinstalleerd zijn. In deze blog gebruiken we een MS Access-driver. Microsoft Access is een vrij toegankelijk programma voor het lezen van databases, maken van query’s, rapporten en formulieren.
Het resultaat is hier te downloaden. Let op dit is een niet een afgeronde versie, maar meer wat ideeën in een programma gestopt.
Het voordeel van rapporten in MS Access ten opzichte van ‘sheets’ in Revit is dat je:
a) Meer parameters tot je beschikking hebt dan in Revit.
b) Rapporten kun je dusdanig inrichten dat deze over meerdere pagina’s lopen. Als je in Revit grote schedules hebt kun je die niet makkelijk over meerdere pagina’s laten lopen.
c) Belangrijkste: Middels queries kun je veel meer dataverbanden leggen dan je in schedules in Revit kunt doen.
Achtereenvolgens:
1) Database algemeen
2) Exporteren vanuit Revit.
3) Linken van tabellen naar aparte ‘beheer database’
4) Formulier projectinformatie en het maken van een tekeninglijst.
5) Maken van daglichtrapportage
6) Programmatje maken: RevitDataHandler 0.1beta
1) Database algemeen.
Even kort iets over databases. In een database zijn gegevens op een gestructureerde manier opgeslagen.
Er zijn allerlei database-ontwerpen en systemen. Hier betreft het een relationele database.
Enkele typen databases zijn:
-SQL-server
-MySQL
-MariaDB
-Access
In deze blog gebruik ik Microsoft Access omdat dat programma tevens een databasemanagementsysteem is.
-Verder kun je op met Microsoft Access formulieren en rapporten maken zonder al te veel programmeerwerk.
-Ook kun je een van een Access-Database eenvoudig een applicatie maken die je met meerdere gebruikers tegelijk kunt gebruiken binnen een lokaal netwerk.
-Verder werkt Access goed samen met SQL-server.(en Azure-sql-servers)
-Je kunt een accessdatabase opsplitsen in een front-end(formulieren, rapporten, interface, queries) en een backend(tabellen).
-Een nadeel is dat access niet slim met zijn netwerkgebruik omgaat. Als je dus op afstand met meerdere mensen in 1 database werkt, is het heel erg traag. In dat geval kun je beter andere software gebruiken.
Wat zijn tabellen, queries, formulieren en rapporten?
In een tabel ligt de feitelijke data vast. Kolommen zijn ‘velden’. Rijen zijn ‘records’. Een record is een verzameling van ingevulde velden met een unieke ‘ID’. Dit kunnen bijvoorbeeld ruimten zijn(i.g.v. een revit-database export).
Een query vraagt data op uit een databasetabel en kan meerdere tabellen combineren. In access kun je grafisch queries maken maar ook met SQL. SQL staat voor Structured Query Language.
Een voorbeeld van SQL-taal:
SELECT * FROM Rooms WHERE Area < 15;
Dit geeft een query met alle ruimten waar de oppervlakte kleiner is dan 15 m2.
Een formulier kan gebruikt worden om data in te vullen. Dit zijn velden, vinkjes, waarden enz.
Een rapport geeft vervolgens een uitdraai van bepaalde data(een brief, factuur, tekeninglijst e.d.)
2) Export vanuit Revit
Dit kan op 2 manieren.
1) Via ‘file’ ODBC
2) Via import/export database addin.
Hierbij kan gemanipuleerde data dus terug je revit-model ingelezen worden.
Na wat doorklikken e.d. kun je een ‘mdb-bestand’ aanmaken. Dit is een bestand met alle tabellen vanuit Revit. Onderstaand zie je tabel ‘Walls’. Hierin staan alle wanden uit het model met de eigenschappen en shared parameters uit het Revit-model.
3) Aparte beheerdatabase
Omdat je natuurlijk elke keer een nieuwe export maakt voor andere modellen is het niet handig om queries e.d. in de geexporteerde database te maken. Dat ben je namelijk de volgende keer kwijt.
Maak een nieuwe access-database aan. Link hierin de tabellen uit de database die je uit Revit hebt geexporteerd.
Je kunt even een leuk startup formulier maken met knoppen.
Achter de knop ‘Choose Database’ hangt een stukje VBA-code die ervoor zorgt dat je een schermpje krijgt waar je een database kunt kiezen.
Vervolgens krijg je een venster waar je het pad van je revit-database kiest. Na het klikken van OK worden alle tabellen vernieuwd.
De gelinkte tabellen zijn voor Revit2016. Er zitten wat veranderingen in de tabellen tussen Revit2015 en Revit2016. Dit zorgt voor problemen bij het ‘herlinken’ van tabellen.
4) Tekeninglijst en projectinformatie
Met behulp van een ‘form’ in access kun je eenvoudig een formulier maken waar alle projectinformatie op weergegeven staat.
De projectinformatie staat in de tabel ‘ProjectInformation’ bestaand uit 1 record.
Vervolgens maak je een formulier waar je alle parameters aan een veld kunt koppelen. Deze kun je vervolgens invullen.
Idee 2: Tekeninglijst
Maak een query van sheets.
Zie hierboven het resultaat van de query.
Je kunt met de knop ‘Report’ in access op de ‘grote-stappen-snel-thuis’-methode een eenvoudig rapport maken. Hierover de werkopmaak met koptekst, detailgedeelte(hier herhalen de records zich) en voetttekst.
Hierboven het resultaat. De opmaak is uiteraard nog te verbeteren. Dit kun je eenvoudig afstemmen op de bedrijfsstandaard.
5) Daglichtrapportage
We gaan nu een daglichtrapportage maken vanuit de revit-database. Bovenstaand heb ik eerst een algemene tabel gemaakt met de verschillende gebruiksfuncties en hun daglichteisen. Onder RevtiGGDescription staat de naam die gebruikt wordt volgens de RevitGG-standaard bij ruimten.
Vervolgens maken we een query die eigenlijk het volgende doet:
-Maakt een lijst van de verblijfsruimten in het revitmodel en berekend hoeveel daglichtoppervlakte er nodig is:
Onderstaande SQL-instructie(de WHERE van DesignOptions.Name is projectspecifiek en normaal gesproken niet nodig).
SELECT Rooms.Id, Rooms.Name, Rooms.Area, Rooms.BouwbesluitRuimtefunctie, S02_gebruiksfuncties_RK.KeyName, tblBbGebruikfunctieTypes.DaylightAreaMinimum, tblBbGebruikfunctieTypes.DaylightPercentage, [Area]*[DaylightPercentage] AS MinDayLightArea, Levels.Name FROM (tblBbGebruikfunctieTypes INNER JOIN S02_gebruiksfuncties_RK ON tblBbGebruikfunctieTypes.Description2 = S02_gebruiksfuncties_RK.KeyName) INNER JOIN (Levels RIGHT JOIN (DesignOptions RIGHT JOIN Rooms ON DesignOptions.Id = Rooms.DesignOption) ON Levels.Id = Rooms.Level) ON S02_gebruiksfuncties_RK.Id = Rooms.Gebruiksfunctie WHERE (((Rooms.Area)>0) AND ((Rooms.BouwbesluitRuimtefunctie)=”verblijfsruimte”) AND ((DesignOptions.Name) Is Null)) OR (((Rooms.BouwbesluitRuimtefunctie)=”verblijfsruimte “) AND ((DesignOptions.Name)=”Optie 2”));
De 2e query kijkt via ‘RoomFromToAssocations’ welke Windows in welke ruimten aanwezig zijn. Hij filter de ‘glas-window-family’s’ eruit. Dit kan per tekenstandaard verschillen. De oppervlakte van het glas wordt berekend vanaf 600 mm boven het desbetreffende vloerniveau.
Dit geeft het volgende resultaat.
De 3e query combineerd de eerste 2 queries
En geeft een lijst per ruimte die laat zien of de daglichtseis voldoet.
Vervolgens maken we een rapport. De 1e pagina komt uit de tabel ‘ProjectInformation’
De 2e pagina laat de laatste query zien met wat algemene tekst ervoor.
Dat ziet er vervolgens zo uit.
De 3e pagina laat de kozijnen per ruimte zien met hun afmetingen.
Deze 3 zijn als subreport gekoppeld in een report.
6) Programmaatje maken: RevitDataHandler 0.1beta
In MS Access kun je de Ribbon met opmaak werkbalken verwijderen en vervangen door een eigen ‘Ribbon’. Dat kan door een nieuwe tabel te maken en daar met ‘xml’ een nieuwe ribbon te beschrijven.
Dit deze stuur je aan via een VBA-Module BasButton.
In de options zet je deze Ribbon aan.
En vervolgens zie het volgende resultaat als je het programmaatje opent. Je kunt het hier downloaden.
Misschien is het een idee om hier een opensource project van te maken waar meerdere mensen hun kennis en expertise instoppen.
Waarschuwing: Het is absoluut geen stabiel draaiend programma momenteel. Het is echt een snel opzetje wat ik nu gemaakt heb om te laten zien wat de mogelijkheden zijn.