User Tools

Site Tools


vba:access:classes:temptabledef

[VBA][Access] TempTableDef

Eine Klasse um mit TempTables zu arbeiten

Version 1.2.2 15.08.2017
Das Modul hat versteckte Attribute. Damit diese aktiv übernommen werden reicht es nicht aus, den Code in ein neues Modul zu kopieren. Man muss das Modul aus der Datei nach VBA importieren.
Bild zum Import

Download temptabledef.cls (V-1.2.2)

Die Klasse erstellt eine Tabelle und verwaltet sie selbständig. Die Tabellen können Userabhängig sein, sich nur halten während die Klasseninstanz existiert. Müssen aber nicht. Zudem muss man sich nicht um den Namen kümmern. DieKlasse kann SQLs parsen um den Namen zu ersetzen.

Wichtig! Bevor man diese oder eine ähnliche Klasse/Methode einsetzt sollte man sich Gedanken machen, ob man das wirklich braucht. Wenn nicht wirklich ein Sonderspezialfall vorliegt, dann hat man in seinem Datenbankmodel einen Fehler wenn man Temporäre Tabellen braucht….

Hier mal schnell ein kleines Beispiel

Public Sub temp()
    Dim tmp As TempTableDef
    'Die TempTable anlegen, der name ist t_1
    Set tmp = TempTableDef("t_1").createBySqlSelect("select * from ADDON_SEQUENZ where start_nr = 1")
 
    'Den wirklichen Namen anzeigen
    '-> #TMP_Yaslaw_t_1
    Debug.Print tmp.tempName
 
    'Einen Update auf die TempTable absetzen
    tmp.execute "update t_1 set seq_name = 'N/A' where seq_name = ''"
 
    'Ein Select absetzen und anzeigen
    'http://wiki.yaslaw.info/doku.php/vba/access/functions/printrs
    printRs tmp.openRecordset("select t.* from [t_1] t inner join [dual] d on t.start_nr = d.id")
 
    'Die Tabelle #TMP_Yaslaw_t_1 wird automatisch gelöscht, weil hier die Instanz abgebaut wird und ttdScopeClass gesetzt ist
    'Es wird nicht nachgefragt
End Sub
#TMP_Yaslaw_t_1                                                                                    
SEQ_NAME   | START_NR | LAST_NR | LAST_TIMESTAMP     
-----------|----------|---------|--------------------
N/A        | 1        | 4       | 15.03.2017 14:13:48
e          | 1        | 3       | 15.01.2016 08:50:45
test       | 1        | 4       | 01.07.2016 09:55:38
Test 1     | 1        | 3       | 01.03.2016 10:11:00

Definitionen

Für die Ausgabe der Resultate verwendete ich die Funktion print_r() bzw. d() und printRs().

Enums

Enum Beschreibung
TempTableDefEnum Settings zur TempTableDef

Creatoren

Es gibt verschiedene Möglichkeiten eine TempTableDef zu initialisieren

Methode Rückgabetyp Beschreibung
instance TempTableDef Erstellt eine neue Instance
construct TempTableDef Initialisiert ein bestehendes Objekt neu

Auslöser

Die folgenden Funktion werden verwendet um eine Tabelle anzulegen

Methode Rückgabetyp Beschreibung
create TempTableDef Erstellt eine Tabelle aus dem Resultat eines SQLs

Public Methodes

Methode Rückgabetyp Beschreibung
execute Long Führt ein execute() durch und parst dabei den Tabellenname
openRecordset DAO.Recordset öffnet ein Recordset auf die TempTable
queryDef QueryDef Gibt ein QueryDef zurück
showQuery öffnet und zeigt ein SQL als Abfrage
convertSql Konvertiert in einem SQL den Name durch den tatsächlichen Tabellennamen
drop Löscht die physiche Tabelle
dropAllTempTables Löscht alle physiche Temp-Tabellen

Public Properties

Property Rückgabetyp Getter/Setter Beschreibung
exists Boolean Get Prüft ob die physische Tabelle exisitiert
tempName String Get Der physiche Name der Tabelle, wie sie in der DB angelegt wird
tempNameSql String Get Dito zu tempName aber mit [] umgeben um in einem SQL zu verwenden
tableDef TableDef Get
name String Get & Let Name der TempTable
user String Get & Let Name des Anwenders für Userabhängige TempTables
db DAO.Database Get & Set Datenbank, auf der sich die TempTable befindet
paramter Variant Get & Let Setzt eine SQL-Paramter
paramters Dictionary Get & Set Setzt eine SQL-Paramters
settings TempTableDefEnum Get & Let Alle Settings auf einmal setzen
forceDrop Boolean Get & Let Setting: Beim löschen nicht nachfragen
scopeUser Boolean Get & Let Setting: Dem physischen Tabellenname wird der User angehängt. Somit ist die TempTable Userabhängig
scopeClass Boolean Get & Let Setting: Die TempTable wird nur solange gehalten, solange die Klasse exisitiert

Beispiele

Für die Beispiele verwende ich die folgenden 3 Tabellen

TBL_DEMO_TMPTBL_USER
UID | VORNAME | NACHNAME | CODE
----|---------|----------|-----
  1 | Hans    | Müller   | BQ  
  2 | Doris   | Andres   | HG  
  3 | Fränzi  | Muster   | BQ  

TBL_DEMO_TMPTBL_EVENT
EID | ENAME              
----|--------------------
  1 | Bierfestival Zürich
  2 | brasserie publique 
  3 | Wortspiele         

TBL_DEMO_TMPTBL_LINK
UID | EID
----|----
  1 |   2
  1 |   3
  2 |   1
  3 |   1
  3 |   2
  3 |   3

Fortsetzung folgt….

vba/access/classes/temptabledef.txt · Last modified: 01.12.2017 10:32:12 by yaslaw