Session D-DBCX

DBC-Extensibility

Alf Borrmann
Wizards & Builders GmbH


Agenda

Demo

Speicherarten

Inhalt des DBC

Erweiterung des DBC

Klasse für Zugriffe

DBC-Manager: Methoden

Aufteilung der Funktionalität

Zusammenfassung

http://www.wizards-builders.com

Abhängigkeiten

Der DBC-Manager setzt das Vorhandensein von folgenden Libraries voraus: Foxtools und EnvLib. EnvLib ist eine Klassenbibliothek von Tom Rettig.

Sind diese bereits mit set library bzw. set classlibrary geladen, werden sie nicht erneut geladen und nach Beendigung des DBC-Managers auch nicht wieder entfernt. Ist eine der beiden Libraries nicht verfügbar, wird bei der Instanziierung des DBC-Managers eine entsprechende Fehlermeldung ausgegeben. Der DBC-Manager läßt sich dann nicht starten.

Objektspezifische Punkte

Aufruf

Der DBC-Manager wird mit Hilfe des Befehls createobject( „DBCMGR“ [,<DBC-Datei>]) als Objekt Instanziiert. Als Parameter kann mit übergeben werden, welcher Datenbankcontainer geöffnet werden soll. Die Angabe der .DBC-Datei muß mit kompletter Pfadangabe erfolgen, wenn der Datenbankcontainer nicht im aktuellen Verzeichnis liegt.

Die Init-Methode ruft die OpenDatabase-Methode auf. Diese öffnet den Datenbankcontainer, falls er nicht exklusiv von einer anderen Instanz von FoxPro geöffnet ist, als normale FoxPro-Tabelle.

Danach wird überprüft, ob die Tabellenstruktur des Datenbankcontainers bereits vorbereitet wurde, oder ob sich die Struktur der Tabelle geändert hat.

Zu einer Zeit können mehrere DBC-Manager unabhängig voneinander aktiv sein. Das Öffnen der .DBC-Tabelle geschieht in der default-DataSession mit einem zur Startzeit des DBC-Managers generierten Alias-Namen.

Beendigung

Durch Löschen der Variable, die die Referenz auf das DBC-Manager-Objekt beinhaltet, wir der DBC-Manager wieder aus dem Speicher gelöscht. Dabei wird versucht, die Umgebung, die vor der Instanziierung bestand, soweit wie möglich wiederherzustellen. Sollte ein Datenbankcontainer vor Aufruf des DBC-Managers exklusiv geöffnet, danach aber shared benutzt worden sein, kann der Zustand vor dem Aufruf nicht wiederhergestellt werden, wenn die .DBC-Datei inzwischen von einem weiteren User geöffnet wurde. Der DBC-Manager wird in einem solchen Fall ohne Fehlermeldung und mit shared geöffnetem Datenbankcontainer beendet.

Beim Beenden des DBC-Managers wird der Arbeitsbereich, in dem bei der Instanziierung die .DBC-Datei als Tabelle geöfnet wurde, automatisch wieder geschlossen.

Eigenschaften

Interface-Eigenschaften

Keine

Geschützte Eigenschaften

lGoodDBC

Enthält das Flag, das angibt, ob die aktuelle .DBC-Datei für den Gebrauch durch den DBC-Manager vorbereitet ist.

lIsExclusive

Ein Flag, das anzeigt, ob der aktuell geöffnete Datenbankcontainer exklusiv geöffnet ist.

lErrorOccurred

Ein Flag, das in der Error-Methode gesetzt wird, um ggf. auftretende Fehler an die Methode zu signalisieren, in der der Fehler auftrat.

Methoden

Interface-Methoden

OpenDatabase( )

Öffnet die als Parameter übergebene .DBC-Datei. Wenn kein Parameter übergeben wurde, wird die aktuell angewählte Datenbank geöffnet. Wurde ein Parameter übergeben, wird der hier übergebene Datenbankcontainer geöffnet. War bereits vorher eine .DBC-Datei geöffnet, wird diese vom DBC-Manager wieder freigegeben, allerdings nicht geschlossen, wenn sie vorher bereits geöffnet war. Als zweiter Parameter kann angegeben werden, ob der Datenbankcontainer exklusiv geöffnet werden soll. Ist der übergebene Datenbankcontainer noch nicht für den Gebrauch mit dem DBC-Manager vorbereitet, wird ein entsprechender Auswahldialog angezeigt.

DBCUpdateStructure( )

Prüft die Integrität des Datenbankcontainer unter Aspekten des DBC-Managers und legt ggf. die benötigten Felder und Indizes an.

DBCRemoveManager( )

Löscht die für den DBC-Manager angelegten Felder und Indizes aus der .DBC-Datei.

DBCLoadMetaData( )

Lädt die in den .DBF- und .CDX-Dateien gespeicherten Daten, die zum Erzeugen der Datenbankstruktur benötigt werden, in den Datenbankcontainer.

DBCRemoveMetaData( )

Löscht die für die Erzeugung der .DBF- und .CDX-Dateien benötigten Properties aus dem Datenbakcontainer.

DBCIsOK( )

Prüft, ob die Struktur, der Index und der TimeStamp des Datenbankcontainers in Ordnung sind. Sind alle 3 auf dem aktuellen Stand, wird .T. zurückgegeben, wenn eine der drei Prüfungen nicht erfolgreich verläuft, gibt DBCIsOK( ) .F. zurück.

Geschützte Methoden

Copyright

DBCBadStructure( )

Überprüft, ob die vom DBC-Manager benötigten Felder in im Datenbankcontainer vorhanden sind. Wenn die Felder angelegt sind und von richtigen Typ sind, wird .T., andernfalls .F. zurückgegeben.

DBCBadIndex( )

Prüft, ob ein Index für das Feld WKEY existiert. Wenn der Index existiert, wird .T., andernfalls .F. zurückgegeben.

DBCBadTimeStamp( )

Prüft, ob sich seit dem letzten Update Einträge innerhalb der DBC-Tabelle geändert haben. Gibt .F.zurück, wenn eine Änderung an einer Tabelle, einem Index, einer View, einem Feld usw. gemacht wurden. Sind die Inhalte des Datenbakcontainers aktuell, wird .T. zurückgegeben.

DBCFillWKey( )

Füllt das Feld WKEY

DBCCalcIndexFldLen( )

Errechnet die

DBCFixStructure( )

DBCFixIndex( )

DBCFixTimeStamp( )

Init( )

An die Init-Methode kann ein Parameter übergeben werden. Dieser muß eine vorhandene .DBC-Datei sein. Wurde kein Parameter übergeben, wird die aktuell geöffnete Datenbank vom DBC-Manager geöffnet. Ist keine .DBC-Datei geöffnet und wurde kein Parameter übergeben, gib Init( ) .F. zurück.

OpenBothShared

Öffnet den aktuellen Datenbankcontainer als Database und als Tabelle.

OpenDatabaseExclusive

Öffnet den Datenbankcontainer exklusiv, nachdem die Tabelle geschlossen wurde.

OpenDBFExclusive

Öffnet die .DBC-Datei exklusiv als Tabelle, nachdem sie als Datenbankcontainer geschlossen wurde.

Technische Übersicht

cdbcalias

needupdate

cdbc atables
ctitle closeallfullpath
lisexclusive clearcdx
nindexfldlen

setsuppresserrors

lerroroccurred

dbcsetprop
lsuppresserrors decimal2hex
ltalking definetalkwindow
lfoxtools

createuniquealias

lenvlib activatetalkwindow

ldbused

getdbfstructure

cinitialselecteddbc

dbcgettablestructure
ldatabaseexclusive acodepage
dbaddprop readvfpint
dbdelprop word2numeric

dbgetfields

acollate
dbgetindeces arrayscan
dbgetprop istableoutofsync
dbgettables howtosynctable
dbgetviews

writebacklink

dbsetprop

tempfile

dbcfillwkey

getcodepage

dbcsetup

writecodepage

dbgetallprops

releasetalkwindow

opendatabase dbcupdatestructure
release dbctimestamp

copyright

dbcbadstructure
dbccalcindexfldlen dbcbadindex
opendbcfile dbcbadtimestamp
dbcstructurechanged dbcfixindex
getmemoline dbcfixstructure

update

 
reindex  
reindexonetable  
updateonetable  
needreindex