Copyright: Database Hilfe © 1994 Asymetrix Corp.


Inhalt
Sie erhalten weitere Unterstützung, wenn Sie sich mit dem Technischen Support in Verbindung setzen.

	Paradox-Übersicht DLL-Referenz


Paradox-Übersicht
Die folgenden Themen enthalten schrittweise Anleitungen zum Arbeiten mit der Paradox-DLL.

Allgemein

Tabellen

Datensätze und Felder

Indizieren und Suchen

BLOBs

Mehrbenutzerunterstützung


Paradox-Übersicht
Die folgenden Themen enthalten schrittweise Anleitungen zum Arbeiten mit der Paradox-DLL.

Allgemein

Verwenden des Paradox-Moduls

Spezifikationen

Regeln zur Benennung

Datentypen

Initialisierung

Maximale Tabellen- und Blockgröße

Tabellen

Datensätze und Felder

Indizieren und Suchen

BLOBs

Mehrbenutzerunterstützung


Paradox-Übersicht
Die folgenden Themen enthalten schrittweise Anleitungen zum Arbeiten mit der Paradox-DLL.

Allgemein

Tabellen

Arbeiten mit Tabellen

Öffnen einer Tabelle

Schließen einer Tabelle

Löschen einer Tabelle

Andere Tabellenoperationen

Operationen zum Abrufen von Tabelleninformationen

Datensätze und Felder

Indizieren und Suchen

BLOBs

Mehrbenutzerunterstützung


Paradox-Übersicht
Die folgenden Themen enthalten schrittweise Anleitungen zum Arbeiten mit der Paradox-DLL.

Allgemein

Tabellen

Datensätze und Felder

Arbeiten mit Datensätzen

Hinzufügen eines Datensatzes

Löschen von Datensätzen

Abrufen der Nummer des aktuellen Datensatzes

Löschen des Datensatzinhalts

Arbeiten mit Feldern

Lesen von Feldwerten

Schreiben von Feldwerten

Indizieren und Suchen

BLOBs

Mehrbenutzerunterstützung


Paradox-Übersicht
Die folgenden Themen enthalten schrittweise Anleitungen zum Arbeiten mit der Paradox-DLL.

Allgemein

Tabellen

Datensätze und Felder

Indizieren und Suchen

Indizieren und Suchen

Arten von Indizes

Erstellen von Indizes

Verwalten von Indizes

Löschen von Indizes

Sortierreihenfolge

Arten von Suchvorgängen

Durchführen einer Suche

BLOBs

Mehrbenutzerunterstützung


Paradox-Übersicht
Die folgenden Themen enthalten schrittweise Anleitungen zum Arbeiten mit der Paradox-DLL.

Allgemein

Tabellen

Datensätze und Felder

Indizieren und Suchen

BLOBs

Arbeiten mit BLOBs

Anzeigen eines grafischen BLOBs

Öffentliche und private BLOBs

Lesen eines Memo-BLOBs

Lesen eines binären BLOBs

Lesen eines grafischen BLOBs

Schreiben eines Memo-BLOBs

Schreiben eines grafischen BLOBs

Schreiben eines binären BLOBs

Schreiben eines binären BLOBs aus einer Datei

Schreiben eines binären BLOBs in eine Datei

Schreiben und Lesen der BLOB-Anfangsdaten

Mehrbenutzerunterstützung


Paradox-Übersicht
Die folgenden Themen enthalten schrittweise Anleitungen zum Arbeiten mit der Paradox-DLL.

Allgemein

Tabellen

Datensätze und Felder

Indizieren und Suchen

BLOBs

Mehrbenutzerunterstützung

Gemeinsamer Zugriff auf Tabellen durch mehrere Benutzer

Sperren

Arten von Sperren

Automatische Sperren

Manuelle Sperren

Überprüfen des Sperrzustands

Wechseln zu einem gesperrten Datensatz

Verwalten paralleler Operationen

Verwalten der Sicherheitsmechanismen


Datenbank-DLL-Referenz

TB30PDX.DLL

TB30DB3.DLL


Datenbank-DLL-Referenz

TB30PDX.DLL

Initialisierungs- und Endfunktionen

Tabellenfunktionen

Datensatzfunktionen

Feldfunktionen

BLOB-Funktionen

Schlüssel- und Indexfunktionen

Suchfunktionen

Kennwort- und Zugriffsschutzfunktionen

Funktionen für Mehrbenutzerzugriff und parallele Operationen

Fehlermeldungen

TB30DB3.DLL


Datenbank-DLL-Referenz

TB30PDX.DLL

TB30DB3.DLL

checkDBIndex() closeAllDBFiles() closeDBFile() closeDBIndexFile() createDBFieldTag() createDBFile() createDBIndexFile() deleteDBFile() deselectDBIndexFile() findDBKey() firstDBKey() firstDBRecord() freeDBFieldTag() getDBDateFormat() getDBErrorString() getDBFieldCount() getDBFieldName() getDBFieldPrecision() getDBFieldType() getDBFieldValue() getDBFieldWidth() getDBFileName() getDBIndexExpression() getDBIndexFileName() getDBKeyType()	getDBKeyValue() getDBNavigateToDeleted() getDBRecordCount() getDBRecordDeleted() getDBRecordNumber() gotoDBRecord() lastDBKey() lastDBRecord() nextDBKey() nextDBRecord() openDBFile() openDBIndexFile() packDBFile() previousDBKey() previousDBRecord() reindexDBFile() removeDBRecords() selectDBFile() selectDBIndexFile() setDBDateFormat() setDBFieldTag() setDBFieldValue() setDBNavigateToDeleted() setDBRecordDeleted() writeDBRecord()


Informationen zur Kontaktaufnahme mit dem technischen Support

Telefonischer Support

Setzen Sie sich mit Asymetrix unter Verwendung der Telefonnummern in Verbindung, die nachfolgend aufgeführt sind, um Informationen zu Verträgen für telefonischen Support zu erhalten.

Australien/Asien	(61+3) 5255471
Europa (außer Frankreich und Deutschland), Naher Osten, Afrika, Rußland	44-923-208-433
Großbritannien	0800-716-957 (kostenlos)
Frankreich	05-90-83-19 (kostenlos)
Deutschland	0130-81-27-07 (kostenlos)
USA und übrige Staaten	206-637-1600
Online-Dienste

Asymetrix stellt kostenlosen Support über Fax, das Asymetrix BBS, CompuServe, America Online und Internet für registrierte Benutzer zur Verfügung. Der technische Support reagiert auf Online-Anfragen innerhalb von 48 Stunden (Montag bis Freitag).

Technischer Support per Fax

Australien/Asien	(61+3) 5255-482

Europa	44-923-208-419

USA	206-454-0672

CompuServe

Windows Third Party Developer A-Forum, Section 1	go asymetrix oder go winapa

Multimedia Vendors-Forum, Section 15	go multiven

IBM Ultimedia Tools A-Forum, Section 5	go ultiatools

Internet

techsup@asymetrix.com

support@asymetrix.com


Initialisierungs- und Endfunktionen
TB30PDX.DLL

exitPX()	Schließt die Paradox-Umgebung
getPXMaxFiles()	Bestimmt die maximale Anzahl von Datei-Zugriffsnummern, die vom Modul verwendet werden können
getPXMaxFilesFromINI()	Bestimmt die maximale Anzahl von Dateien aus der Datei WIN.INI
getPXMaxLocks()	Bestimmt die maximale Anzahl von Datensatzsperren, die vom Modul verwendet werden können
getPXMaxLocksFromINI()	Bestimmt die maximale Anzahl von Sperren aus der Datei WIN.INI
getPXMaxTables()	Bestimmt die maximale Anzahl von Tabellen-Zugriffsnummern, die vom Modul verwendet werden können
getPXMaxTablesFromINI()	Bestimmt die maximale Anzahl der Tabellen aus der Datei WIN.INI
getPXSwapSize()	Bestimmt die Größe des internen Auslagerungspuffers
getPXSwapSizeFromINI()	Bestimmt die Größe des Auslagerungspuffers aus der Datei WIN.INI
getPXUserInfo()	Ruft Benutzerinformationen aus der Datei WIN.INI ab
initializePX()	Initialisiert das Paradox-Modul für parallele Operationen
savePX()	Speichert den Auslagerungspuffer auf dem Datenträger
setPXINIMaxFiles()	Setzt den MaxFiles-Eintrag im Abschnitt [Paradox Engine] der Datei WIN.INI.
setPXINIMaxLocks()	Setzt den MaxLocks-Eintrag im Abschnitt [Paradox Engine] der Datei WIN.INI.
setPXINIMaxTables()	Setzt den MaxTables-Eintrag im Abschnitt [Paradox Engine] der Datei WIN.INI.
setPXINISwapSize()	Setzt den SwapSize-Eintrag im Abschnitt [Paradox Engine] der Datei WIN.INI.
setPXSortOrder()	Legt die Sortierreihenfolge fest
setPXTableCreateMode()	Setzt den Modus zum Erstellen von Tabellen
setPXTableMaxSize()	Setzt die maximale Blockgröße für neue Tabellen
setPXUserInfo()	Setzt Benutzerinformationen in der Datei WIN.INI


Tabellenfunktionen
TB30PDX.DLL

addPXTable()	Kopiert Datensätze aus einer Tabelle in eine andere
closePXTable()	Schließt eine Tabelle
copyPXTable()	Kopiert eine Tabellenfamilie in eine andere
createPXTable()	Erstellt eine Tabelle
decryptPXTable()	Entschlüsselt eine Tabelle
deletePXTable()	Löscht eine Tabellenfamilie
doesPXTableExist()	Testet, ob eine Tabelle existiert
emptyPXTable()	Entfernt alle Datensätze aus einer Tabelle. Liefert einen Fehler, wenn die Tabelle geöffnet ist oder präemptive Sperren existieren, die eine vollständige Sperrung verhindern
encryptPXTable()	Verschlüsselt eine Tabelle. Liefert einen Fehler, wenn die Tabelle geöffnet ist oder präemptive Sperren existieren, die eine vollständige Sperrung verhindern
getPXErrorString()	Bestimmt die Fehlermeldung für eine Fehlernummer
getPXFieldCount()	Gibt die Anzahl der Felder in einer Tabelle zurück
getPXKeyFieldCount()	Gibt die Anzahl der Schlüsselfelder in einer Tabelle zurück
getPXMaxLocks()	Bestimmt die maximale Anzahl an Datensatzsperren pro Tabelle
getPXMaxTables()	Bestimmt die maximale Anzahl der Tabellen, die gleichzeitig geöffnet sein können
getPXRecordCount()	Bestimmt die Anzahl der Datensätze in einer Tabelle
openPXTable()	Öffnet eine Tabelle
packPXTable()	Komprimiert die Datenbank und entfernt Speicher, der durch gelöschte Datensätze belegt ist.
renamePXTable()	Ändert den Basisnamen einer Tabellenfamilie
setPXTableCreateMode()	Setzt den Modus zum Erstellen von Tabellen
setPXTableMaxSize()	Setzt die maximale Blockgröße für neue Tabellen
upgradePXTable()	Aktualisiert eine ältere Paradox-Tabelle (Paradox 3.5 oder später) auf das neueste Tabellenformat


Datensatzfunktionen
TB30PDX.DLL

appendPXRecord()	Fügt einen leeren Datensatz zu einer Tabelle hinzu
deletePXRecord()	Löscht den aktuellen Datensatz aus einer Tabelle
emptyPXRecord()	Löscht den Inhalt des aktuellen Datensatzes einer Tabelle
firstPXRecord()	Wechselt zum ersten Datensatz einer Tabelle
getPXRaw()	Ruft unformatierte Daten vom aktuellen Datensatz einer Tabelle ab
getPXRawDataSize()	Bestimmt die Größe der unformatierten Daten in einem Datensatz
getPXRecordNumber()	Bestimmt die Nummer des aktuellen Datensatzes einer Tabelle
gotoPXRecord()	Wechselt zum angegebenen Datensatz in einer Tabelle
insertPXRecord()	Fügt einen leeren Datensatz in eine Tabelle ein
lastPXRecord()	Wechselt zum letzten Datensatz in einer Tabelle
nextPXRecord()	Wechselt zum nächsten Datensatz in einer Tabelle
previousPXRecord()	Wechselt zum vorhergehenden Datensatz in einer Tabelle
setPXRaw()	Schreibt unformatierte Daten in den aktuellen Datensatz einer Tabelle
updatePXRecord()	Aktualisiert den aktuellen Datensatz in einer Tabelle


Feldfunktionen
TB30PDX.DLL

emptyPXField()	Löscht den Inhalt des aktuellen Datensatzes einer Tabelle
getPXFieldNames()	Ruft eine Liste der Feldnamen in einer Tabelle ab
getPXFieldType()	Bestimmt den Feldtyp eines Feldes
getPXFieldValue()	Bestimmt den Inhalt eines Feldes im aktuellen Datensatz einer Tabelle
setPXFieldValue()	Setzt den Inhalt eines Feldes im aktuellen Datensatz einer Tabelle


BLOB-Funktionen
TB30PDX.DLL

clonePXBlob()	Erstellt private BLOBs aus öffentlichen BLOBs im aktuellen Datensatz
closePXBitmapWindow()	Schließt ein Bitmap-Fenster
closePXBlob()	Schließt ein BLOB
dropPXBlob()	Entfernt (löscht) ein BLOB vom aktuellen Datensatz einer Tabelle
freePXBlobMemory()	Gibt den globalen Speicher frei, auf den durch eine BLOB-Zugriffsnummer verwiesen wird
freePXGraphicBlob()	Gibt den GDI-Speicher frei, auf den durch eine Bitmap-Zugriffsnummer verwiesen wird
freePXGraphicBlobPalette()	Gibt den GDI-Speicher frei, auf den durch die Windows-Farbpalette verwiesen wird
getPXBitmapSize()	Bestimmt die Größe einer Bitmap
getPXBlob()	Liest Daten aus einem BLOB
getPXBlobQuick()	Liest BLOB-Anfangsdaten direkt vom aktuellen Datensatz einer Tabelle
getPXBlobSize()	Bestimmt die Größe eines BLOBs
getPXFileSize()	Bestimmt die Größe einer Datei für BLOB-Operationen
getPXGraphicBlob()	Gibt eine Zugriffsnummer auf eine Windows-Bitmap zurück
getPXGraphicBlobPalette()	Gibt eine Zugriffsnummer auf die Windows-Standardfarbpalette zurück
getPXMemoBlob()	Gibt ein Memo-BLOB als ToolBook-Zeichenfolge zurück
openPXBitmapWindow()	Öffnet ein untergeordnetes Fenster zum Anzeigen einer Bitmap
openPXBlobRead()	Öffnet ein BLOB für Leseoperationen
openPXBlobWrite()	Öffnet ein BLOB für Schreiboperationen
setPXBitmapWindowInfo()	Setzt Anzeigeattribute für ein Bitmap-Fenster
setPXBlob()	Schreibt Daten in ein BLOB
setPXBlobFromFile()	Konvertiert eine Datei in das BLOB-Format
setPXGraphicBlob()	Kopiert a Zugriffsnummer auf eine Windows-Bitmap in ein grafisches BLOB
setPXGraphicBlobFromFile()	Konvertiert eine Bitmap-Datei in das BLOB-Format
setPXMemoBlob()	Kopiert eine Zeichenfolge in ein Memo-BLOB
writePXBlobToFile()	Schreibt ein BLOB in eine Datei
writePXGraphicBlobToFile()	Schreibt ein grafisches BLOB als Bitmap-Datei


Schlüssel- und Indexfunktionen
TB30PDX.DLL

addPXKey()	Erstellt einen Primär- oder Sekundärindex auf einer Tabelle
dropPXKey()	Löscht einen Primär- oder Sekundärindex
mapPXKey()	Ruft eine Feld-Zugriffsnummer für einen zusammengesetzten oder einen (von der Groß-/Kleinschreibung unabhängigen) Einzelfeldindex ab
queryPXKey()	Ruft Informationen zu einem Index ab
searchPXField()	Durchsucht eine Tabelle nach einem bestimmten Feld
searchPXKey()	Durchsucht eine Tabelle nach einem passenden Schlüssel


Suchfunktionen
TB30PDX.DLL

searchPXField()	Durchsucht eine Tabelle nach einem bestimmten Feld
searchPXKey()	Durchsucht eine Tabelle nach einem passenden Schlüssel


Kennwort- und Zugriffsschutzfunktionen
TB30PDX.DLL

addPXPassword()	Trägt ein Kennwort ein
decryptPXTable()	Entschlüsselt eine Tabelle
deletePXPassword()	Entfernt ein Kennwort
encryptPXTable()	Verschlüsselt eine Tabelle. Liefert einen Fehler, wenn die Tabelle geöffnet ist oder präemptive Sperren existieren, die eine vollständige Sperrung verhindern
isPXTableProtected()	Testet, ob eine Tabelle verschlüsselt ist


Funktionen für Mehrbenutzerzugriff und parallele Operationen
TB30PDX.DLL

getPXNetErrorUser()	Gibt den Namen des Benutzers an, der einen Sperrungsfehler verursacht
getPXNetUserName()	Ruft den Namen eines Benutzers ab
gotoPXNetRecordLock()	Kehrt zu einem zuvor gesperrten Datensatz zurück
isPXNetRecordLocked()	Bestimmt, ob der aktuelle Datensatz gesperrt wurde
isPXNetTableChanged()	Testet, ob eine Tabelle geändert wurde
lockPXNetFile()	Sperrt eine Datei
lockPXNetRecord()	Sperrt den aktuellen Datensatz einer Tabelle
lockPXNetTable()	Sperrt eine Tabelle
refreshPXNetTable()	Synchronisiert eine gemeinsam genutzte Tabelle neu
unlockPXNetFile()	Hebt die Sperre auf einer Datei auf
unlockPXNetRecord()	Hebt die Sperre auf dem aktuellen Datensatz einer Tabelle auf
unlockPXNetTable()	Hebt die Sperre auf einer Tabelle auf


Fehlermeldungen
TB30PDX.DLL

1 Laufwerk nicht bereit 2 Verzeichnis nicht gefunden 3 Datei wird bereits verwendet 4 Datei ist gesperrt 5 Datei nicht gefunden 6 Tabelle ist beschädigt 7 Primärindex ist beschädigt 8 Primärindex ist nicht mehr aktuell 9 Datensatz ist gesperrt 10 Konflikt beim gemeinsamen Zugriff 11 Konflikt beim gemeinsamen Zugriff 12 Kein Zugriff auf Verzeichnis 13 Sortierung für Index anders als für Tabelle 14 Einzelbenutzer, aber Verzeichnis für mehrere Benutzer 15 Mehrere Paradox-Netzdateien gefunden 16 Verzeichnis bereits von Paradox 3.5 verwendet 21 Nicht ausreichende Kennwortberechtigungen 22 Tabelle ist schreibgeschützt 30 Datentypen unverträglich 31 Argument außerhalb des zulässigen Bereichs 33 Ungültiges Argument 40 Nicht genügend Speicher zum Beenden der Operation 41 Datenträgerplatz reicht nicht zum Beenden der Operation 50 Anderer Benutzer hat Datensatz gelöscht 51 Operationen bei geöffneten BLOBs nicht möglich 52 BLOB bereits geöffnet 53 Ungültiger Offset in BLOB 54 Ungültige Größe für BLOB 55 Anderer Benutzer hat BLOB verändert 56 BLOB-Datei beschädigt 57 Indizieren auf BLOB nicht möglich 59 Ungültige BLOB-Zugriffsnummer 60 Suche über BLOB-Feld nicht möglich 70 Keine Datei-Zugriffsnummern mehr verfügbar 72 Keine Tabellen-Zugriffsnummern mehr verfügbar 73 Ungültiges Datum angegeben 74 Ungültiger Feldname 75 Ungültige Feld-Zugriffsnummer 76 Ungültige Tabellen-Zugriffsnummer 78 Modul nicht initialisiert 79 Fataler Fehler zuvor aufgetreten, Fortfahren nicht möglich 81 Tabellenstrukturen sind unterschiedlich 82 Modul bereits initialisiert 83 Operation auf geöffneter Tabelle nicht ausführbar 86 Keine weiteren temporären Namen verfügbar 89 Datensatz nicht gefunden 92 Tabelle kann nicht aktualisiert werden 93 Funktion für Tabellen vor Paradox 4.0 nicht verfügbar 94 Tabelle ist indiziert 95 Tabelle ist nicht indiziert 96 Sekundärindex ist nicht mehr aktuell 97 Schlüsselkonflikt 98 Anmelden an Netzwerk nicht möglich	99 Tabellenname ist ungültig 101 Ende der Tabelle 102 Anfang der Tabelle 103 Keine weiteren Datensatz-Zugriffsnummern verfügbar 104 Ungültige Datensatz-Zugriffsnummer 105 Operation auf leerer Tabelle 106 Ungültiger Sperrcode 107 Modul nicht mit PXNetInit initialisiert 108 Ungültiger Dateiname 109 Ungültiges Aufheben einer Sperre 110 Ungültige Sperr-Zugriffsnummer 111 Zu viele Sperren auf Tabelle 112 Ungültige Sortierreihenfolge-Tabelle 113 Ungültiger Netzwerktyp 114 Ungültiger Verzeichnisname 115 Zu viele Kennwörter angegeben 116 Ungültiges Kennwort 117 Puffer zu klein für Ergebnis 118 Tabelle wird bereits verwendet 119 Tabelle ist gesperrt 120 Tabelle nicht gefunden 121 Sekundärindex nicht gefunden 122 Sekundärindex ist beschädigt 124 Datenträger ist schreibgeschützt 125 Datensatz zu groß 126 Allgemeiner Systemfehler 127 Nicht genügend Stapelspeicher zum Beenden der Operation 128 Tabelle ist voll 129 Nicht genügend Auslagerungspuffer zum Beenden der Operation 130 Tabelle ist SQL-Kopie 131 Zu viele Clients für Modul-DLL 132 Grenzwerte aus WIN.INI überschritten 133 Zuordnen von Datei-Zugriffsnummern nicht mehr möglich 134 Kein Zugriff auf Paradox-Netzdatei, SHARE.EXE geladen? 135 Modul kann nicht im Real-Modus von Windows laufen 136 Tabelle auf temp. Sekundärindex kann nicht geändert werden 137 Zeitüberschreitung beim Anlegen einer Sperre 251 Anlegen oder Aufheben einer Speichersperre nicht möglich 252 Undefinierter Fehlercode 253 Zu viele Elemente in Listenparameter 254 Fehlende Elemente in Listenparameter 255 Interne Fehlernummer: 256 Fehler bei Datei-Ein-/Ausgabe 257 Ungültiges Format für grafisches BLOB 258 Windows GDI-Fehler 259 Ungültige Fenster-Zugriffsnummer 260 Ungültige Bitmap-Zugriffsnummer 261 BLOB-Fensterregistrierung fehlgeschlagen 262 Erstellen eines BLOB-Fensters fehlgeschlagen 263 Ungültige Farbe für BLOB-Fenster 264 Ungültiger Anzeigemodus für BLOB-Fenster 265 Ungültige Position/Größe für BLOB-Fenster 266 Tabelle kann nach dropPXKey nicht mehr geöffnet werden 267 Ungültiger Eintrag im Abschnitt [Paradox Engine] von WIN.INI


addPXKey
addPXKey( )
TB30PDX.DLL

Modulfunktion	PXKeyAdd()

Beschreibung	Erstellt einen Primär- oder Sekundärindex auf einer Tabelle

Syntax	addPXKey(<TabAlias>,<Feldnamen>,<Modus>)

Deklaration	INT addPXKey(STRING,STRING,INT)

Parameter	<TabAlias>	Alias für Tabelle, für die ein Schlüssel hinzugefügt werden soll.

Tabelle muß geöffnet sein.

<Feldnamen>	Liste mit durch Kommas getrennten Namen von Feldern, die zum Erstellen

des Schlüssels verwendet werden

<Modus>	Modus zum Erstellen des Indexes
0	Primärindex (Schlüssel)
1	Sekundärindex (bleibt bei geöffneten Tabellen erhalten)
2	Gewarteter Sekundärindex (bleibt auch bei geschlossenen Tabellen erhalten)

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Index zu einer Tabelle hinzufügen und Tabelle mit neuem Index öffnen
fieldNumber = mapPXKey("TestDatenbank", "Nachname, Vorname", "Letzter Name zuerst", 1)
get addPXKey("TestDatenbank", "Letzter Name zuerst", 2)
get closePXTable("TestDatenbank")	-- mit altem Index schließen
get openPXTable("TestDatenbank", "c:\data\mydata.db", fieldNumber,savemode)


addPXPassword
addPXPassword( )
TB30PDX.DLL

Modulfunktion	PXPswAdd()

Beschreibung	Trägt ein Kennwort ein

Syntax	addPXPassword(<Kennwort>)

Deklaration	INT addPXPassword(STRING)

Parameter	<Kennwort>	Zu verwendendes Kennwort

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Kennwort zum Verschlüsseln einer Tabelle eintragen
get addPXPassword(text of field "Kennwort")
if it >= 0
get openPXTable("TestDatenbank", "C:\data\mydb", 0, 0)
else
request "Falsches Kennwort"
end


addPXTable
addPXTable( )
TB30PDX.DLL

Modulfunktion	PXTblAdd()

Beschreibung	Fügt Datensätze aus einer Tabelle zu einer anderen hinzu

Syntax	addPXTable(<Quelltabelle>,<Zieltabelle>)

Deklaration	INT addPXTable(STRING,STRING)

Parameter	<Quelltabelle>	Dateiname der Quelltabelle, die Datensätze bereitstellt

<Zieltabelle>	Dateiname der Zieltabelle

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Im Feld "Quelltabelle" angegebene Tabelle mit aktueller Datenbank verbinden
get addPXTable("c:\data\newData.db", "c:\data\currData.db")
if it = 0
request "Verbindung erfolgreich"
else
request getPXErrorString(it)
end


appendPXRecord
appendPXRecord( )
TB30PDX.DLL

Modulfunktion	PXRecAppend()

Beschreibung	Fügt einen Datensatz zu einer Tabelle hinzu

Syntax	appendPXRecord(<TabAlias>)

Deklaration	INT appendPXRecord(STRING)

Parameter	<TabAlias>	Alias der Tabelle, der der Datensatz hinzugefügt werden soll

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Neuen Datensatz mit dem Inhalt des Datensatzpuffers zur Datenbank hinzufügen
if name of target = "add"
get appendPXRecord("TestDatenbank")
end


clonePXBlob
clonePXBlob( )
TB30PDX.DLL

Modulfunktion	PXBlobClone()

Beschreibung	Erstellt private BLOBs aus öffentlichen BLOBs im aktuellen Datensatz

Syntax	clonePXBlob(<TabAlias>,<Feldname>)

Deklaration	INT clonePXBlob(STRING,STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

<Feldname>	Name des Feldes, aus dem BLOB erstellt werden soll

NULL	Private BLOBs aus allen BLOBs im Datensatz erstellen

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Private Kopie des BLOBs erstellen, um es verändern zu können;
--andere Benutzer können auf das öffentliche BLOB lesend zugreifen.

lockHandle = lockPXNetRecord("TestDatenbank")
if lockHandle >= 0
hBlobClone = clonePXBlob("TestDatenbank", "Grafik")
if it < 0
request getPXErrorString(it)
break
end
get unlockPXNetRecord("TestDatenbank", lockHandle)
else
request getPXErrorString(lockHandle)
end


closePXBitmapWindow
closePXBitmapWindow( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Schließt ein Bitmap-Fenster und zerstört die zugehörige Bitmap

Syntax	closePXBitmapWindow(<Fenster-ZugrNr>)

Deklaration	INT closePXBitmapWindow(WORD)

Parameter	<Fenster-ZugrNr>	Fenster-Zugriffsnummer, die von openPXBitmapWindow() zurückgegeben wird

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

to handle closeBitmap

system hBMP,hPal,hWndBMP

-- Bitmap und Fenster werden nicht mehr benötigt:

-- Fenster schließen

get closePXBitmapWindow(hWndBMP)

-- Fenster-Zugriffsnummer für die Bitmap...

get freePXGraphicBlob(hBMP)

-- ... und die Palette freigeben

get freePXGraphicBlobPalette(hPal)

end closeBitmap


closePXBlob
closePXBlob( )
TB30PDX.DLL

Modulfunktion	PXBlobClose()

Beschreibung	Schließt ein BLOB

Syntax	closePXBlob(<BLOB-ZugrNr>,<Übernehmen>)

Deklaration	INT closePXBlob(INT,INT)

Parameter	<BLOB-ZugrNr>	Zugriffsnummer auf zu schließendes BLOB

<Übernehmen>	Übernehmen oder Abweisen von Änderungen
0	Abweisen
1	Übernehmen

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Privates BLOB schließen und Änderungen in der Datenbank speichern
lockHandle = lockPXNetRecord("TestDatenbank")
if lockHandle >= 0
get closePXBlob(hModifiedBlob, 1)
get unlockPXNetRecord("TestDatenbank", lockHandle)
else
request getPXErrorString(lockHandle)
end


closePXTable
closePXTable( )
TB30PDX.DLL

Modulfunktion	PXTblClose()

Beschreibung	Schließt eine Tabelle

Syntax	closePXTable(<TabAlias>)

Deklaration	INT closePXTable(STRING)

Parameter	<TabAlias>	Alias der zu schließenden Tabelle

Rückgabewert	0	Erfolgreiche Operation

< 0	Fehlernummer

Beispiel

get closePXTable("TestTabelle")

if it < 0

request getPXErrorString(it)

end if


copyPXTable
copyPXTable( )
TB30PDX.DLL

Modulfunktion	PXTblCopy()

Beschreibung	Kopiert eine Tabellenfamilie in eine andere

Syntax	copyPXTable(<Quelltabelle>,<Zieltabelle>)

Deklaration	INT copyPXTable(STRING,STRING)

Parameter	<Quelltabelle>	Basisname der Quelltabellenfamilie

<Zieltabelle>	Basisname der Zieltabellenfamilie

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Einem Benutzer ermöglichen, eine lokale Kopie der Datenbank zu installieren
ask "Geben Sie den Pfad für die Datenbank ein"
if it <> null
get copyPXTable("d:\data\netDB", it)
if it < 0
request getPXErrorString(it)
end
end


createPXTable
createPXTable( )
TB30PDX.DLL

Modulfunktion	PXTblCreate()

Beschreibung	Erstellt eine Tabelle

Syntax	createPXTable(<Tabellenname>,<Feldnamen>,<Feldtypen>)

Deklaration	INT createPXTable(STRING,STRING,STRING)

Parameter	<Tabellenname>	Name der Tabelle (Modul nimmt .DB-Erweiterung an.)

<Feldnamen>	Liste von Feldnamen

<Feldtypen>	Liste von Feldtypen

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Datenbank mit Namen von CDs, Künstlern, Liedern und Plattencovern erstellen
get createPXTable("c:\data\CDbase", "Titel, Künstler, Lieder, Cover", \
   "A25, A25, M40, G10")


decryptPXTable
decryptPXTable( )
TB30PDX.DLL

Modulfunktion	PXTblDecrypt()

Beschreibung	Entschlüsselt eine Tabelle

Syntax	decryptPXTable(<Tabellendateiname>)

Deklaration	INT decryptPXTable(STRING)

Parameter	<Tabellendateiname>	Name der zu entschlüsselnden Tabellendatei

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Kennwortschutz von Datei entfernen
get isPXTableProtected("c:\data\mydb")
if it = 1
get addPXPassword("rosebud")	-- Kennwort für Tabelle an Modul senden
get decryptPXPassword("c:\data\mydb")
end


deletePXPassword
deletePXPassword( )
TB30PDX.DLL

Modulfunktion	PXPswDel()

Beschreibung	Entfernt ein Kennwort

Syntax	deletePXPassword(<Kennwort>)

Deklaration	INT deletePXPassword(STRING)

Parameter	<Kennwort>	Zu löschendes Kennwort

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Kennwort aus Systemliste entfernen
get deletePXPassword("Banane")
if it < 0
request "Ungültiges Kennwort"
end


deletePXRecord
deletePXRecord( )
TB30PDX.DLL

Modulfunktion	PXRecDelete()

Beschreibung	Löscht den aktuellen Datensatz aus einer Tabelle

Syntax	deletePXRecord(<TabAlias>)

Deklaration	INT deletePXRecord(STRING)

Parameter	<TabAlias>	Alias der Tabelle, aus der der aktuelle Datensatz gelöscht werden soll

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Benutzerbestätigung  zum Löschen des aktuellen Datensatzes anfordern
request "Möchten Sie den aktuellen Datensatz löschen?" with "OK" or "Abbrechen"
if it = "OK"
get deletePXRecord("TestDatenbank")
end


deletePXTable
deletePXTable( )
TB30PDX.DLL

Modulfunktion	PXTblDelete()

Beschreibung	Löscht eine Tabellenfamilie

Syntax	deletePXTable(<Tabellendateiname>)

Deklaration	INT deletePXTable(STRING)

Parameter	<Tabellendateiname>	Dateiname der zu löschenden Tabellenfamilie*

*Das Modul überprüft nicht, ob die Datei eine gültige Paradox-Datei ist, bevor sie gelöscht wird.

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Datenbank löschen
request "Möchten Sie wirklich die gesamte Datenbank löschen?" with "OK" or\
   "Abbrechen"
if it = OK
get deletePXTable("c:\data\CDBase")
end


doesPXTableExist
doesPXTableExist( )
TB30PDX.DLL

Modulfunktion	PXTblExist()

Beschreibung	Testet, ob eine Tabelle existiert

Syntax	doesPXTableExist(<Tabellenname>)

Deklaration	INT doesPXTableExist(STRING)

Parameter	<Tabellenname>	Dateiname der zu suchenden Tabelle

Rückgabewert	1	Tabelle existiert
0	Tabelle existiert nicht
< 0	Fehlernummer

Beispiel

--Überprüfen, ob eine Tabelle existiert, bevor Name zum Kopieren verwendet wird
get doesPXTableExist("c:\data\myData")
if it = 1
request "Tabelle existiert bereits"
else
copyPXTable("n:\data\shared", "c:\data\myData")
end


dropPXBlob
dropPXBlob( )
TB30PDX.DLL

Modulfunktion	PXBlobDrop()

Beschreibung	Entfernt (löscht) ein BLOB aus dem aktuellen Datensatz einer Tabelle

Syntax	dropPXBlob(<TabAlias>,<Feldname>)

Deklaration	INT dropPXBlob(STRING,STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

<Feldname>	Name des zu entfernenden BLOB-Feldes

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Memo-BLOB "Zusammenfassung" aus dem aktuellen Datensatz löschen
get dropPXBlob("TestDatenbank", "Zusammenfassung")
if it < 0
request PXErrorString(it)
end


dropPXKey
dropPXKey( )
TB30PDX.DLL

Modulfunktion	PXKeyDrop()

Beschreibung	Löscht einen Primär- oder Sekundärindex

Syntax	dropPXKey(<TabAlias>,<Feldname>,<Index-ID>)

Deklaration	INT dropPXKey(STRING,STRING,WORD)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

<Feldname>	Feldname eines Schlüssels ausschließlich für von der Groß-/Kleinschreibung abhängigen Einzelfeld-Sekundärindex; bleibt andernfalls Null

<Index-ID>	Zugriffsnummer für den zu löschenden Index (wenn kein Feldname angegeben wird)

Wenn Sie den Primärindex löschen, werden alle Sekundärindizes ebenfalls gelöscht.

Rückgabewert	1	Gelöschter Primärindex, Tabelle ohne Index neu geöffnet
2	Aktuellen Index der Tabelle gelöscht; Tabelle mit Primärindex neu geöffnet
< 0	Fehlernummer


emptyPXField
emptyPXField( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Löscht den Inhalt eines Feldes des aktuellen Datensatzes einer Tabelle. Änderungen in der Tabelle werden erst wirksam, wenn updatePXRecord() verwendet wird.

Syntax	emptyPXField(<TabAlias>,<Feldname>)

Deklaration	INT emptyPXField(STRING,STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

<Feldname>	Name des Feldes, dessen Inhalt gelöscht werden soll

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Daten aus dem Feld "Datum" für alle Datensätze in der Datenbank löschen
get firstPXRecord("TestDatenbank")
get emptyPXfield("TestDatenbank", "Datum")
while nextPXRecord("TestDatenbank") >= 0
get emptyPXField("TestDatenbank", "Datum")
end


emptyPXRecord
emptyPXRecord( )
TB30PDX.DLL

Modulfunktion	PXRecBufEmpty()

Beschreibung	Löscht den Puffer für den aktuellen Datensatz einer Tabelle. Der Datensatz in der Tabelle wird geändert, wenn updatePXRecord(), insertPXRecord() oder appendPXRecord() verwendet wird.

Syntax	emptyPXRecord(<TabAlias>)

Deklaration	INT emptyPXRecord(STRING)

Parameter	<TabAlias>	Alias der Tabelle, die den Datensatz enthält

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Leeren Datensatz in der Datenbank erstellen
get emptyPXRecord("TestDatenbank")
get appendPXRecord("TestDatenbank")


emptyPXTable
emptyPXTable( )
TB30PDX.DLL

Modulfunktion	PXTblEmpty()

Beschreibung	Entfernt alle Datensätze aus einer Tabelle. Liefert einen Fehler, wenn die Tabelle geöffnet ist oder präemptive Sperren existieren, die eine vollständige Sperrung verhindern.

Syntax	emptyPXTable(<Tabellendateiname>)

Deklaration	INT emptyPXTable(STRING)

Parameter	<Tabellendateiname>	Dateiname der Tabelle, aus der Datensätze entfernt werden sollen

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Mit dieser Tabelle von vorne beginnen
get emptyPXTable("c:\data\myData")
if it = 0
request "Kann von vorne begonnen werden?"
else
request getPXErrorString(it)
end


encryptPXTable
encryptPXTable( )
TB30PDX.DLL

Modulfunktion	PXTblEncrypt()

Beschreibung	Verschlüsselt eine Tabelle. Liefert einen Fehler, wenn die Tabelle geöffnet ist oder präemptive Sperren existieren, die eine vollständige Sperrung verhindern.

Syntax	encryptPXTable(<Tabellendateiname>,<Kennwort>)

Deklaration	INT encryptPXTable(STRING,STRING)

Parameter	<Tabellendateiname>	Dateiname der zu verschlüsselnden Tabelle

<Kennwort>	Zu verwendendes Kennwort

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

-- Hauptkennwort für Datei festlegen
get encryptPXTable("c:\data\mydb", "Banane")
-- Kennwort an Tabelle übergeben und dann Tabelle öffnen

if it >= 0
get addPXPassword("Banane")
get openPXTable("TestDatenbank", "c:\data\mydb", 0,0)
else
request getPXErrorString(it)
end


exitPX
exitPX( )
TB30PDX.DLL

Modulfunktion	PXExit()

Beschreibung	Schließt die Paradox-Umgebung

Syntax	exitPX()

Deklaration	INT exitPX()

Parameter	Keine

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Tabelle schließen and Paradox-Umgebung verlassen
get closePXTable("TestDatenbank")
get exitPX()


firstPXRecord
firstPXRecord( )
TB30PDX.DLL

Modulfunktion	PXRecFirst()

Beschreibung	Wechselt zum ersten Datensatz einer Tabelle

Syntax	firstPXRecord(<TabAlias>)

Deklaration	INT firstPXRecord(STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Wechseln zum ersten Datensatz in der Datenbank und Vergleich mit dem Text\

--im Feld "Nachname"
get firstPXRecord("TestDatenbank")
if getPXFieldValue("TestDatenbank", "Nachname") = text of field "Nachname"
request "stimmt mit dem ersten Datensatz überein"
else
request "Werte stimmen nicht überein"
end


freePXBlobMemory
freePXBlobMemory( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Gibt den globalen Speicher frei, der durch eine BLOB-Zugriffsnummer referenziert wird

Syntax	freePXBlobMemory(<ZugrNr>)

Deklaration	INT freePXBlobMemory(WORD)

Parameter	<ZugrNr>	Zugriffsnummer auf globalen Windows-Speicher, der von getPXBlob() zurückgegeben wird

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--4 Bytes eines BLOBs bei Offset 1024 abrufen und freigeben, wenn der Wert
--falsch ist
hBinaryData = getPXBlob(hBlob, 4, 1024)
pBinaryData = globalLock(hBinaryData) -- globalLock wurde aus KERNEL eingebunden
if pointerDWORD(0, pBinaryData) <> 97825378	-- Beispielwert
get globalUnlock(hBinaryData)  -- globalUnlock wurde aus KERNEL eingebunden
get freePXBlobMemory(hBinaryData)
else ...


freePXGraphicBlob
freePXGraphicBlob( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Gibt den GDI-Speicher frei, der durch eine Bitmap-Zugriffsnummer referenziert wurde

Syntax	freePXGraphicBlob(<hBitmap>)

Deklaration	INT freePXGraphicBlob(WORD)

Parameter	<hBitmap>	Bitmap-Zugriffsnummer, die von getPXGraphicBlob() zurückgegeben wird

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--GDI-Systemressourcen freigeben, die von der Bitmap-Zugriffsnummer \

--referenziert werden, nachdem das Fenster geschlossen ist
get closePXBitmapWindow(hWND)	--hWND ist Zugriffsnummer, die von

--openPXBitmapWindow() zurückgegeben wird
get freePXGraphicBlob(hBitmap)	--hBitmap ist Zugriffsnummer, die von

--getPXGraphicBlob() zurückgegeben wird
if it < 0
request getPXErrorString(it)
end


freePXGraphicBlobPalette
freePXGraphicBlobPalette( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Gibt den GDI-Speicher frei, der durch die Windows-Farbpalette referenziert wird

Syntax	freePXGraphicBlobPalette(<hPalette>)

Deklaration	INT freePXGraphicBlob(WORD)

Parameter	<hPalette>	Zugriffsnummer, die von getPXGraphicBlobPalette() zurückgegeben wird

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--GDI-Systemressourcen freigeben, die von der Palette verwendet werden
--hPal ist die Paletten-Zugriffsnummer, die von der Funktion \

--getPXGraphicBlobPalette() zurückgegeben wird
get freePXGraphicBlobPalette(hPal)
if it < 0
request "Interner Fehler ohne Bedeutung"
end


getPXBitmapSize
getPXBitmapSize( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Bestimmt die Größe einer Bitmap für Operationen auf grafischen BLOBs

Syntax	getPXBitmapSize(<Bitmap-ZugrNr>)

Deklaration	LONG getPXBitmapSize(INT)

Parameter	<Bitmap-ZugrNr>	Zugriffsnummer für Bitmap

Rückgabewert	>= 0	Größe des grafischen BLOBs in Bytes
0	Fehler

Beispiel

BMPSize = getPXBitmapSize(hBitmap)

hPXBMP = openPXBlobWrite("TestTabelle","Picture",BMPSize,0)

if hPXBMP < 0

request getPXErrorString(it)

-- Windows-Aufräumarbeiten

break

end if

get setPXGraphicBlob(hPXBMP,hBitmap)


getPXBlob
getPXBlob( )
TB30PDX.DLL

Modulfunktion	PXBlobGet()

Beschreibung	Liest Daten aus einem BLOB

Syntax	getPXBlob(<BLOB-ZugrNr>,<Größe>,<Offset>)

Deklaration	LONG getPXBlob(INT,WORD,LONG)

Parameter	<BLOB-ZugrNr>	Zugriffsnummer auf BLOB, aus dem Daten gelesen werden sollen

<Größe>	Größe des BLOBs in Bytes (1 - 256 MB)

<Offset>	Offset vom BLOB-Anfang, an dem mit dem Lesen begonnen werden soll

Rückgabewert	>= 0	Zugriffsnummer auf globalen Windows-Speicher
< 0	Fehlernummer

Beispiel

--In WMF lesen, die als BLOB gespeichert ist, und benutzerdefinierte Funktion \

--zum Ablegen in der Zwischenablage aufrufen
hBlob = openPXBlobRead("TestDatenbank", "metafile")
if it >= 0
hMeta = getPXBlob(hBlob, getPXBlobSize(hBlob), 0)
if hMeta > 0
get placeOnClipboard(hMeta)
end
get closePXBlob(hBlob, 0)
end


getPXBlobQuick
getPXBlobQuick( )
TB30PDX.DLL

Modulfunktion	PXBlobQuickGet()

Beschreibung	Liest BLOB-Anfangsdaten direkt aus dem aktuellen Datensatz einer Tabelle

Syntax	getPXBlobQuick(<TabAlias>,<Feldname>,<Größe>)

Deklaration	LONG getPXBlobQuick(STRING,STRING,INT)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

<Feldname>	Name des BLOB-Feldes

<Größe>	Größe der Anfangsdaten (0 - 240)

Rückgabewert	>= 0	Zugriffsnummer auf privaten BLOB
< 0	Fehlernummer

Beispiel

--Ursprünglichen Dateinamen für BLOB aus den BLOB-Anfangsdaten bestimmen und

--an Funktion übergeben, damit der BLOB wieder in derselben Datei gespeichert

--wird.

hFileName = getPXBlobQuick("TestDatenbank", "binaryData", 13)
pFileName = globalLock(hFileName) -- globalLock ist aus KERNEL eingebunden
get saveBlob(pointerString(0, pFileName)) -- benutzerdefinierte Funktion
get globalUnlock(hFileName) -- globalLock ist aus KERNEL eingebunden
get freePXBlobMemory(hFileName)


getPXBlobSize
getPXBlobSize( )
TB30PDX.DLL

Modulfunktion	PXBlobGetSize()

Beschreibung	Bestimmt die Größe eines BLOBs

Syntax	getPXBlobSize(<BLOB-ZugrNr>)

Deklaration	LONG getPXBlobSize(INT)

Parameter	<BLOB-ZugrNr>	Zugriffsnummer auf BLOB

Rückgabewert	>= 0	Größe des BLOBs
< 0	Fehlernummer

Beispiel

hBlob = openPXBlobRead("Bintest", "Binfield")

set bSize to getPXBlobSize(hBlob)

request bSize

hB = getPXBlob(hBlob,bSize, 0)

get closePXBlob(hBlob, 0)


getPXErrorString
getPXErrorString( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Bestimmt die Fehlermeldung für eine Fehlernummer

Syntax	getPXErrorString(<Fehlernummer>)

Deklaration	STRING getPXErrorString(INT)

Parameter	<Fehlernummer>	Fehlernummer, die von anderen DLL-Funktionen zurückgegeben wird

Rückgabewert	Fehlermeldung für angegebene Fehlernummer

Wenn ein Fehler auftritt, wird NULL zurückgegeben, und sysError wird auf die Fehlernummer gesetzt

Beispiel

--Wenn ein Fehler auftritt, Fehlermeldung für Benutzer ausgeben
get openPXTable("TestDatenbank", "C:\DATA\CUSTOMER.DB", 0, 0)
if it < 0
request getPXErrorString(it)
end


getPXFieldCount
getPXFieldCount( )
TB30PDX.DLL

Modulfunktion	PXRecNFlds()

Beschreibung	Gibt die Anzahl der Felder in einer Tabelle zurück

Syntax	getPXFieldCount(<TabAlias>)

Deklaration	INT getPXFieldCount(STRING)

Parameter	<TabAlias>	Alias der Tabelle

Rückgabewert	>= 0	Anzahl der Felder in der Tabelle
< 0	Fehlernummer

Beispiel

--Anzahl der Felder in der Datenbank mit der
--Anzahl der Felder auf den Seiten vergleichen

dbFields = getPXFieldCount("TestDatenbank")
objList = objects of this page
step i from 1 to itemCount("objList")
pop objList
if object of it is "field"
decrement dbFields
end
end
if dbFields = 0
request "Richtige Anzahl der Felder"
end


getPXFieldNames
getPXFieldNames( )
TB30PDX.DLL

Modulfunktion	PXFldName()

Beschreibung	Ruft eine Liste der Feldnamen in einer Tabelle ab

Syntax	getPXFieldNames(<TabAlias>)

Deklaration	STRING getPXFieldNames(STRING)

Parameter	<TabAlias>	Alias der Tabelle

Rückgabewert	Liste mit durch Kommas getrennten Feldnamen

Wenn ein Fehler auftritt, wird NULL zurückgegeben, und sysError wird auf die Fehlernummer gesetzt.

Beispiel

fieldNames = getPXFieldNames("TestDatenbank")

step i from 1 to textlineCount(fieldNames)

put TAB&getPXFieldType("TestDatenbank", textline i of fieldNames)\

after textline i of fieldNames

end

request "Das Datensatzformat ist"& CRLF & fieldNames


getPXFieldType
getPXFieldType( )
TB30PDX.DLL

Modulfunktion	PXFldType()

Beschreibung	Bestimmt den Typ eines Feldes (sowie die Länge für ein alphanumerisches Feld und die Breite eines BLOB-Feldes)

Syntax	getPXFieldType(<TabAlias>,<Feldname>)

Deklaration	STRING getPXFieldType(STRING,STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

<Feldname>	Name des Feldes, dessen Typ bestimmt werden soll

Rückgabewert	Der Feldtyp bei Verwendung der folgenden Codes:

Code	Bedeutung	Länge	Hinweise

Annn	Alphanumerisch	nnn Bytes	<= 255, keine ASCII-Null (eingebettete Null)
D	Datum	4 (Julianischer Kalender, erstes Datum = 1. Jan 1 n. Chr.)
N	Numerisch	8	+/- 10^-307 bis +/ 10^308 (15 signifikante Stellen)
S	Numerisch (klein)	2	+/- 32,767
$	Numerisch, Währung	8	+/- 10^-307 bis +/ 10^308 (15 signifikante Stellen)
M	Unformatiertes Memo-BLOB	siehe Thema BLOB
B	Unformatiertes binäres BLOB	siehe Thema BLOB
G	Grafisches BLOB	siehe Thema BLOB
Wenn ein Fehler auftritt, wird NULL zurückgegeben, und sysError wird auf die Fehlernummer gesetzt.

Beispiel

--Überprüfen, ob das Feld ein BLOB ist. Falls ja, Routine aufrufen, die \

--den Wert des BLOBs abruft.
pxFieldType = getPXFieldType("TestDatenbank", fieldName)
if pxFieldType is in "M B F O G"
--benutzerdefinierte Behandlungsroutine zum Abrufen des BLOB-Wertes aufrufen
get mygetBlobValue("TestDatenbank", fieldName, pxFieldType)
end


getPXFieldValue
getPXFieldValue( )
TB30PDX.DLL

Modulfunktionen:	PXGetAlpha(), PXGetDate(), PXGetDouble(), PXGetLong(), PXGetShort()

Beschreibung	Bestimmt den Inhalt eines Feldes im aktuellen Datensatz einer Tabelle

Syntax	getPXFieldValue(<TabAlias>,<Feldname>)

Deklaration	STRING getPXFieldValue(STRING,STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

<Feldname>	Name des Feldes, dessen Inhalt bestimmt werden soll

Rückgabewert	Inhalt des angegebenen Feldes aus dem aktuellen Datensatz der angegebenen Tabelle.

Wenn ein Fehler auftritt, wird NULL zurückgegeben, und sysError wird auf die Fehlernummer gesetzt.

Beispiel

--Namen, Alter und Geburtsdatum aus dem aktuellen Datensatz abrufen und in
--Felder auf der Seite eintragen
set text of field "Name" to getPXFieldValue("TestDatenbank", "Name")
set text of field "Alter" to  getPXFieldValue("TestDatenbank", "Alter")
set text of field "GebDatum" to getPXFieldValue("TestDatenbank", "GebDatum")


getPXFileSize
getPXFileSize( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Bestimmt die Größe einer Datei für BLOB-Operationen.

Syntax	getPXFileSize(<Dateiname>)

Deklaration	LONG getPXFileSize(STRING)

Parameter	<Dateiname>	Name der Datei

Rückgabewert	>= 0	Größe der Datei in Bytes

0	Fehler

Beispiel

to handle buttonClick

-- Herausfinden, wie groß das grafische BLOB sein wird

request getPXFileSize("arrow1.bmp") + 8

end


getPXGraphicBlob
getPXGraphicBlob( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Gibt eine Zugriffsnummer auf eine Windows-Bitmap zurück.

Syntax	getPXGraphicBlob(<BLOB-ZugrNr>)

Deklaration	LONG getPXGraphicBlob(INT)

Parameter	<BLOB-ZugrNr>	Zugriffsnummer, die von openPXBlobRead() oder openPXBlobWrite() zurückgegeben wird

Rückgabewert	HBITMAP - Zugriffsnummer auf eine geräteunabhängige Windows-Bitmap, die für einen Gerätekontext verwendet oder in der Zwischenablage abgelegt werden kann.

Kommentare	Die aufrufende Routine muß die Bitmap-Zugriffsnummer wieder freigeben. Dies geschieht durch Aufruf von freePXGraphicBlob(), wodurch der GDI-Speicher freigegeben wird, der für den BLOB benötigt wird. In der Zwischenablage abgelegte Zugriffsnummern werden durch die Zwischenablage verwaltet, und das Freigeben dieser Zugriffsnummern führt zu Fehlern.

Beispiel

--Zugriffsnummer auf Bitmap-Blob///im US bitmapBlop, besser Bitmap-BLOB/// bestimmen und Bitmap in einem Fenster anzeigen
hBlob = openPXBlobRead("TestDatenbank", "BlobField")
if hBlob >= 0
hBitmap = getPXGraphicBlob(hBlob)
hWnd = openPXBitmapWindow(hBitmap, null, clientHandle of mainWindow, \

"0,0", 0, "")
end


getPXGraphicBlobPalette
getPXGraphicBlobPalette( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Gibt eine Zugriffsnummer auf eine Windows-Standardfarbpalette zurück

Syntax	getPXGraphicBlobPalette(<BLOB-ZugrNr>)

Deklaration	LONG getPXGraphicBlobPalette(INT)

Parameter	<BLOB-ZugrNr>	Zugriffsnummer, die von openPXBlobRead() oder openPXBlobWrite() zurückgegeben wird

Rückgabewert	Zugriffsnummer auf die Windows-Palette für das grafische BLOB.

Kommentare	Die aufrufende Routine muß die Bitmap-Zugriffsnummer wieder mit freePXGraphicBlobPalette() freigeben. In der Zwischenablage abgelegte Zugriffsnummern werden durch die Zwischenablage verwaltet, und das Freigeben dieser Zugriffsnummern führt zu Fehlern.

Beispiel

--Zugriffsnummer auf Bitmap und Palette abrufen, die in der Zwischenablage

--abgelegt werden sollen
hBlob = openPXBlobRead("TestDatenbank", "Graphic")
if hBlob >= 0
hBitmap = getPXGraphicBlob(hBlob)
hPalette = getPXGraphicBlobPalette(hBlob)
end


getPXKeyFieldCount
getPXKeyFieldCount( )
TB30PDX.DLL

Modulfunktion	PXKeyNFlds()

Beschreibung	Gibt die Anzahl der Schlüsselfelder in einer Tabelle zurück

Syntax	getPXKeyFieldCount(<TabAlias>)

Deklaration	INT getPXKeyFieldCount(STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

Rückgabewert	>= 0	Anzahl der Felder im Primärschlüssel
< 0	Fehlernummer

Beispiel

--Schlüsselfelder in dieser Datenbank bestimmen
get getPXKeyFieldCount("TestDatenbank")


getPXMaxFiles
getPXMaxFiles( )
TB30PDX.DLL

Modulfunktion	PXGetDefaults()

Beschreibung	Bestimmt den Wert, mit dem das Modul momentan festlegt, wie viele Dateien maximal verwendet werden können

Syntax	getPXMaxFiles()

Deklaration	INT getPXMaxFiles()

Parameter	Keine

Rückgabewert	>= 0	Maximale Anzahl an Datei-Zugriffsnummern
< 0	Fehlernummer

Beispiel

--Es müssen genügend Datei-Zugriffsnummern für die Tabellen und Indizes zur
--Verfügung stehen. Die benötigte Anzahl wird als benutzerdefinierte Eigenschaft

--des Buches gespeichert

if getPxMaxFiles() < numHandlesNeeded of this book
get setPXINIMaxFiles(numHandlesNeeded of this book)
if it < 0
request "Es können nicht genügend Datei-Zugriffsnummern für diese " &\
"Datenbank reserviert werden." & CRLF &\
"Vergrößern Sie den Wert für FILES = in CONFIG.SYS."
end
end


getPXMaxLocks
getPXMaxLocks( )
TB30PDX.DLL

Modulfunktion	PXGetDefaults()

Beschreibung	Bestimmt den Wert, mit dem das Modul momentan festlegt, wie viele Sperren maximal verwendet werden können

Syntax	getPXMaxLocks()

Deklaration	INT getPXMaxLocks()

Parameter	Keine

Rückgabewert	>= 0	Maximale Anzahl an Sperren
< 0	Fehlernummer

Beispiel

--Aktuelle INI-Einstellung abrufen

get getPXMaxLocksFromINI()

--Wenn die aktuelle INI-Einstellung kleiner ist als die benötigte Anzahl, wird

--versucht, einen anderen Wert einzustellen.

if it < myExpectedValue

get setPXINIMaxLocks(myExpectedValue)

get initializePX(TestTabelle)	--Modul wurde von anderer Person initialisiert.

get getPXMaxLocks()

if it < myExpectedValue

--Modul wurde von anderer Person eingebunden, und Maxlocks kann nicht auf

--den benötigten Wert gesetzt werden. Fehlermeldung und Beenden

request "Anzahl Sperren kann nicht gesetzt werden. Bitte alle anderen " \ 	& CRLF &"Anwendungen mit Zugriff auf das Paradox-Modul beenden und " &\

"erneut versuchen."

send exit

end

end


getPXMaxTables
getPXMaxTables( )
TB30PDX.DLL

Modulfunktion	PXGetDefaults()

Beschreibung	Bestimmt den Wert, mit dem das Modul momentan festlegt, wie viele Tabellen maximal verwendet werden können

Syntax	getPXMaxTables()

Deklaration	INT getPXMaxTables()

Parameter	Keine

Rückgabewert	>= 0	Maximale Anzahl an Tabellen, die vom Modul verwendet werden können
< 0	Fehlernummer

Beispiel

--Überprüfen, ob alle Tabellen in dieser Datenbank gleichzeitig geöffnet werden
--können. Die Anzahl der Tabellen in dieser Datenbank wird als

--benutzerdefinierte Eigenschaft des Buches gespeichert
if getPXMaxTables() < numTables of this book
get setPXINIMaxTables(numTables of this book)
if it < 0
request "Es können nicht alle Tabellen in dieser Datenbank geöffnet werden"
end
end


getPXMemoBlob
getPXMemoBlob( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Gibt ein Memo-BLOB als ToolBook-Zeichenfolge zurück

Syntax	getPXMemoBlob(<BLOB-ZugrNr>)

Deklaration	STRING getPXMemoBlob(INT)

Parameter	<BLOB-ZugrNr>	Zugriffsnummer, die von openPXBlobRead() oder openPXBlobWrite() zurückgegeben wird

Rückgabewert	Eine Zeichenfolge im Erfolgsfall

Bei einem Fehler wird NULL zurückgegeben und sysError auf den Fehlerwert gesetzt

Beispiel

--Text des Memo-BLOBs bestimmen und in ein Feld eintragen
hBlob = openPXBlobRead("TestDatenbank", "reviewText")
text of field "review" = getPXMemoBlob(hBlob)
get closePXBlob(hBlob, 0)

Kommentare	Das gesamte BLOB wird zurückgegeben, wenn es 64 KB nicht überschreitet, andernfalls wird ein Fehler zurückgegeben. Auf Memo-BLOBs mit mehr als 64 KB sollte mit der getPXBlob()-Funktion zugegriffen werden, und die Daten sollten als Datenblöcke (Chunks) aus dem globalen Speicherpuffer ausgelesen werden.


getPXNetErrorUser
getPXNetErrorUser( )
TB30PDX.DLL

Modulfunktion	PXNetErrorUser()

Beschreibung	Gibt den Namen des Benutzers an, der einen Sperrungsfehler verursacht

Syntax	getPXNetErrorUser()

Deklaration	STRING getPXNetErrorUser()

Parameter	Keine

Rückgabewert	Name des Netzwerkbenutzers, der einen Sperrungsfehler verursacht

Wenn ein Fehler auftritt, wird NULL zurückgegeben, und sysError wird auf die Fehlernummer gesetzt

Beispiel

--Namen des Benutzers bestimmen, der den Datensatz gesperrt hat, wenn ein
--Sperrungsfehler auftritt
get lockPXRecord("TestDatenbank")
if it = -9 -- Datensatz gesperrt
request getPXNetErrorUser() && "hat den Datensatz gesperrt."
end


getPXNetUserName
getPXNetUserName( )
TB30PDX.DLL

Modulfunktion	PXNetUserName()

Beschreibung	Bestimmt den Namen des Benutzers

Syntax	getPXNetUserName()

Deklaration	STRING getPXNetUserName()

Parameter	Keine

Rückgabewert	Name des Netzwerkbenutzers

Wenn ein Fehler auftritt, wird NULL zurückgegeben, und sysError wird auf die Fehlernummer gesetzt

Beispiel

--Benutzernamen für den aktuellen Benutzer bestimmen, um eine persönliche
--Begrüßung auszugeben
get getPXNetUserName()
if it <> null
request "Hallo" && it & ", viel Spaß beim Arbeiten mit der Datenbank."
end


getPXRaw
getPXRaw( )
TB30PDX.DLL

Modulfunktion	PXRawGet()

Beschreibung	Ruft unformatierte Daten aus dem aktuellen Datensatz einer Tabelle ab

Syntax	getPXRaw(<TabAlias>,<Größe>)

Deklaration	LONG getPXRaw(STRING,INT)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

<Größe>	Größe der Datensatzstruktur in Bytes. Verwenden Sie getPXRawDataSize(), um die Größe zu bestimmen.

Rückgabewert	>= 0	Zugriffsnummer auf unformatierte Daten
< 0	Fehlernummer

Beispiel

--Inhalt des aktuellen Datensatzes speichern, damit die Operation
--ggf. rückgängig gemacht werden kann
--sizeofData wurde zuvor berechnet
hRawData = getPXRaw("TestDatenbank", sizeofData)
request "Sie können jetzt den Inhalt des Datensatzes verändern."


getPXRawDataSize
getPXRawDataSize( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Bestimmt die Größe unformatierter Daten aus dem aktuellen Datensatz einer Tabelle

Syntax	getPXRawDataSize(<TabAlias>)

Deklaration	INT getPXRawDataSize(STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

Rückgabewert	>= 0	Größe der unformatierten Daten
< 0	Fehlernummer

Beispiel

rSize = getPXRawDataSize("TestTabelle")


getPXRecordCount
getPXRecordCount( )
TB30PDX.DLL

Modulfunktion	PXTblNRecs()

Beschreibung	Bestimmt die Anzahl der Datensätze in einer Tabelle

Syntax	getPXRecordCount(<TabAlias>)

Deklaration	LONG getPXRecordCount(STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

Rückgabewert	>= 0	Anzahl der Datensätze in angegebener Tabelle
< 0	Fehlernummer

Beispiel

--Anzahl der Datensätze in der Datenbank bestimmen und beim Durchlaufen der \

--Datensätze das Feld "Nachname" auf 3 setzen
get firstPXRecord("TestDatenbank")
step i from 1 to getPXRecordCount("TestDatenbank")
get setPXFieldValue("TestDatenbank", "Nachname", "3")
get nextPXRecord("TestDatenbank")
end


getPXRecordNumber
getPXRecordNumber( )
TB30PDX.DLL

Modulfunktion	PXRecNum()

Beschreibung	Bestimmt die Nummer des aktuellen Datensatzes in einer Tabelle

Syntax	getPXRecordNumber(<TabAlias>)

Deklaration	LONG getPXRecordNumber(STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

Rückgabewert	>= 0	Nummer des aktuellen Datensatzes in angegebener Tabelle
< 0	Fehlernummer

Beispiel

--Datensatznummer in Statusfeld eintragen
get getPXRecordNumber("TestDatenbank")
if it >= 0
text of field "status" = "DATENSATZ" && it && "von" && getPXRecordCount("TestDatenbank")
end


getPXSortOrder
getPXSortOrder( )
TB30PDX.DLL

Modulfunktion	PXGetDefaults()

Beschreibung	Bestimmt das Zeichen für die Standard-Sortierreihenfolge

Syntax	getPXSortOrder()

Deklaration	STRING getPXSortOrder()

Parameter	Keine

Rückgabewert	Zeichen für Standard-Sortierreihenfolge
a	ASCII-Sortierreihenfolge
i	Internationale Sortierreihenfolge
n	Norwegische/dänische Sortierreihenfolge
s	Schwedische/finnische Sortierreihenfolge
d	Norwegische/dänische Sortierreihenfolge für Paradox 4.0

Wenn ein Fehler auftritt, wird NULL zurückgegeben, und sysError wird auf die Fehlernummer gesetzt

Beispiel

--Sortierreihenfolge auf international setzen, bevor die Tabelle geöffnet \

--wird. Die Tabelle kann nicht geöffnet werden, wenn die Sortierreihenfolgen \

--nicht übereinstimmen.
if getPXSortOrder() is not "i"
get setPXSortOrder("i")
end
get openPXTable("TestDatenbank" "C:\data\accts", 0, 0)


getPXSwapSize
getPXSwapSize( )
TB30PDX.DLL

Modulfunktion	PXGetDefaults()

Beschreibung	Bestimmt die Größe des internen Auslagerungspuffers

Syntax	getPXSwapSize()

Deklaration	INT getPXSwapSize()

Parameter	Keine

Rückgabewert	>= 0	Größe des Auslagerungspuffers
< 0	Fehlernummer

Beispiel

--Der Auslagerungspuffer soll eine Größe von 4 KB * Anzahl der Tabellen (das \

--empfohlene Minimum) haben. Die Tabellenanzahl wird als benutzerdefinierte \

--Eigenschaft des Buches gespeichert
if getPXSwapSize() < 4*numTables of this book
get setPXINISwapSize(4*numTables of this book)
end


gotoPXNetRecordLock
gotoPXNetRecordLock( )
TB30PDX.DLL

Modulfunktion	PXNetRecGotoLock()

Beschreibung	Gibt einen zuvor gesperrten Datensatz zurück

Syntax	gotoPXNetRecordLock(<TabAlias>,<Sperr-ZugrNr>)

Deklaration	INT gotoPXNetRecordLock(STRING,INT)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

<Sperr-ZugrNr>	Zugriffsnummer auf zuvor gesperrten Datensatz

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Erneut zum gesperrten Datensatz wechseln. Der Wechsel mit Hilfe der Nummer
--ist nicht möglich, weil eine andere Person einen Datensatz gelöscht haben
--könnte (wodurch sich die Nummern verändern würden)
lockHandle = lockPXNetRecord("TestDatenbank")
send compareValues -- ggf. Datensatz in Datenbank wechseln
get gotoPXNetRecordLock("TestDatenbank", lockHandle)
get unlockPXNetRecord("TestDatenbank", lockHandle)


gotoPXRecord
gotoPXRecord( )
TB30PDX.DLL

Modulfunktion	PXRecGoto()

Beschreibung	Wechselt zum angegebenen Datensatz in einer Tabelle (in der Indexreihenfolge)

Syntax	gotoPXRecord(<TabAlias>,<DS-Nummer>)

Deklaration	INT gotoPXRecord(STRING,LONG)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

<DS-Nummer>	Nummer des Datensatzes, zu dem gewechselt werden soll

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Benutzer nach Nummer des Datensatzes fragen, zu dem gewechselt werden soll
ask "Geben Sie die Nummer des Datensatzes ein, zu dem gewechselt werden soll."
if it <> null
get gotoPXRecord("TestDatenbank", it)
end


initializePX
initializePX( )
TB30PDX.DLL

Modulfunktion	PXWinInit()

Beschreibung	Initialisiert das Paradox-Modul für parallele Operationen. Diese Funktion überprüft die Parameter UserName, NetNamePath, NetType, ShareLocal und PX35Locking in der Datei WIN.INI. Wenn für diese Parameter keine Werte gesetzt wurden, werden die Standardwerte gesetzt. (Im Thema setPXUserInfo() finden Sie Beschreibungen dieser Parameter.)

Syntax	initializePX(<Client-Name>)

Deklaration	INT initializePX(STRING)

Parameter	<Client-Name>	Willkürlicher Name für die Client-Anwendung. Sie können zum Beispiel den Namen des aktuellen Buches verwenden.

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Paradox-Umgebung initialisieren
get initializePX(name of this book)
if it < 0
request getPXErrorString(it)
end


insertPXRecord
insertPXRecord( )
TB30PDX.DLL

Modulfunktion	PXRecInsert()

Beschreibung	Fügt einen leeren Datensatz in eine Tabelle ein

Syntax	insertPXRecord(<TabAlias>)

Deklaration	INT insertPXRecord(STRING)

Parameter	<TabAlias>	Alias der Tabelle, in die der nächste Datensatz eingefügt werden soll

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Datensatz vor dem aktuellen Datensatz in einer nicht-indizierten Tabelle
--einfügen
ask "Nummer des Datensatzes, vor dem eingefügt werden soll."
if it <> null
get gotoPXRecord("TestDatenbank", it)
end
get insertPXRecord("TestDatenbank")


isPXNetRecordLocked
isPXNetRecordLocked( )
TB30PDX.DLL

Modulfunktion	PXNetRecLocked()

Beschreibung	Bestimmt, ob der aktuelle Datensatz gesperrt wurde

Syntax	isPXNetRecordLocked(<TabAlias>)

Deklaration	INT isPXNetRecordLocked(STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

Rückgabewert	1	Netzwerk-Datensatz ist gesperrt
0	Netzwerk-Datensatz ist nicht gesperrt
< 0	Fehlernummer

Beispiel

--Überprüfen, ob der Datensatz gesperrt ist, bevor er gesperrt wird
get isPXNetRecordLocked("TestDatenbank")
if it = 1
request getPXNetErrorUser()&& "hat den Datensatz gesperrt."
else
get lockPXRecord("TestDatenbank")
end


isPXNetTableChanged
isPXNetTableChanged( )
TB30PDX.DLL

Modulfunktion	PXNetTblChanged()

Beschreibung	Testet, ob eine Tabelle geändert wurde

Syntax	isPXNetTableChanged(<TabAlias>)

Deklaration	INT isPXNetTableChanged(STRING)

Parameter	<TabAlias>	Alias der zu testenden Tabelle

Rückgabewert	1	Netzwerktabelle wurde geändert
0	Netzwerktabelle wurde nicht geändert
< 0	Fehlernummer

Beispiel

--Überprüfen, ob die Tabelle von einem anderen Benutzer geändert wurde, \

--bevor sie aktualisiert wird
get isPXNetTableChanged("TestDatenbank")
if it = 0
get updatePXRecord("TestDatenbank")
end


isPXTableProtected
isPXTableProtected( )
TB30PDX.DLL

Modulfunktion	PXTblProtected()

Beschreibung	Testet, ob eine Tabelle verschlüsselt ist

Syntax	isPXTableProtected(<Tabellendateiname>)

Deklaration	INT isPXTableProtected(STRING)

Parameter	<Tabellendateiname>	Dateiname der zu testenden Tabelle

Rückgabewert	1	Tabelle ist geschützt
0	Tabelle ist nicht geschützt
< 0	Fehlernummer

Beispiel

--Überprüfen, ob die Tabelle verschlüsselt ist, bevor nach dem Kennwort
--gefragt wird
get isPXTableProtected(text of field "Tabellenname")
if it = 1
ask "Geben Sie das Kennwort für die Tabelle ein"
if it <> null
get addPXPassword(it)
end
end


lastPXRecord
lastPXRecord( )
TB30PDX.DLL

Modulfunktion	PXRecLast()

Beschreibung	Wechselt zum letzten Datensatz in einer Tabelle

Syntax	lastPXRecord(<TabAlias>)

Deklaration	INT lastPXRecord(STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Wechseln zum letzten Datensatz in der Tabelle und Abrufen des Wertes aus

--dem Feld "Name"
get lastPXRecord("TestDatenbank")
if it >= 0
get getPXFieldValue("TestDatenbank", "Name")
if it >= 0
request it
end
end


lockPXNetFile
lockPXNetFile( )
TB30PDX.DLL

Modulfunktion	PXNetFileLock()

Beschreibung	Sperrt eine Datei

Syntax	lockPXNetFile(<Dateiname>,<Sperrungstyp>)

Deklaration	INT lockPXNetFile(STRING,INT)

Parameter	<Dateiname>	Name der zu sperrenden Datei

<Sperrungstyp>	Typ der Sperrung
1	Vollsperrung, keine Parallelität
2	Schreibsperre
3	Unterbinden von Schreibsperren
4	Unterbinden von allen Sperren, volle Parallelität

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Versuchen, die Konfigurationsdatei für die Bearbeitung zu sperren
get lockPXNetFile("n:\db.cfg", 1)
if it = 0
send updateConfig
get unlockPXFile("n:\db.cfg", 1)
else
request "Konfigurationsdatei wird bereits verwendet und kann nicht " & \
"aktualisiert werden."
end


lockPXNetRecord
lockPXNetRecord( )
TB30PDX.DLL

Modulfunktion	PXNetRecLock()

Beschreibung	Sperrt den aktuellen Datensatz einer Tabelle

Syntax	lockPXNetRecord(<TabAlias>)

Deklaration	LONG lockPXNetRecord(STRING)

Parameter	<TabAlias>	Alias der Tabelle, in der der aktuelle Datensatz gesperrt werden soll

Rückgabewert	>= 0	Zugriffsnummer auf den gesperrten Datensatz
< 0	Fehlernummer

Beispiel

--Datensatz sperren und dann aktualisieren
lockHandle = lockPXNetRecord("TestDatenbank")
if lockHandle >= 0
get updatePXRecord("TestDatenbank")
get unlockPXNetRecord("TestDatenbank")
end


lockPXNetTable
lockPXNetTable( )
TB30PDX.DLL

Modulfunktion	PXNetTblLock()

Beschreibung	Sperrt eine Tabelle

Syntax	lockPXNetTable(<TabAlias>,<Sperrungstyp>)

Deklaration	INT lockPXNetTable(STRING,INT)

Parameter	<TabAlias>	Alias der zu sperrenden Tabelle

<Sperrungstyp>	Typ der Sperrung
1	Vollsperre, keine Parallelität
2	Schreibsperre
3	Unterbinden von Schreibsperren
4	Unterbinden von allen Sperren, volle Parallelität

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Tabelle mit einer Vollsperre versehen, um den Zugriff durch andere Benutzer
--zu unterbinden
get lockPXNetTable("TestDatenbank", 1)
if it < 0
request getPXErrorString(it)
else
send workWithTable
get unlockPXNetTable("TestDatenbank", 1)
end


mapPXKey
mapPXKey( )
TB30PDX.DLL

Modulfunktion	PXKeyMap()

Beschreibung	Ordnet ein oder mehrere Felder einer einzelnen Zugriffsnummer für ein Indexschlüsselfeld zu

Syntax	mapPXKey(<TabAlias>,<Feldnamen>,<Schlüsselfeldname>,<Modus>)

Deklaration	LONG mapPXKey(STRING,STRING,STRING,INT)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

<Feldnamen>	Namen der Felder, die für den Schlüssel verwendet werden sollen

<Schlüsselfeldname>	Name des Indexschlüsselfeldes

<Modus>	Index-Modus
0	Groß-/Kleinschreibung wird im Index berücksichtigt
1	Groß-/Kleinschreibung wird im Index nicht berücksichtigt

Rückgabewert	>= 0	Zugriffsnummer auf Index
< 0	Fehlernummer

Beispiel

Siehe addPXKey


nextPXRecord
nextPXRecord( )
TB30PDX.DLL

Modulfunktion	PXRecNext()

Beschreibung	Wechselt zum nächsten Datensatz in einer Tabelle

Syntax	nextPXRecord(<TabAlias>)

Deklaration	INT nextPXRecord(STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Durchlaufen der Datensätze ab dem ersten Datensatz und Löschen des Feldes \

--"Betrag fällig"
get firstPXRecord("TestDatenbank")
while nextPXRecord("TestDatenbank") >= 0
get setPXFieldValue("TestDatenbank", "Betrag fällig", 0)
end


openPXBitmapWindow
openPXBitmapWindow( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Öffnet a untergeordnetes Fenster zum Anzeigen einer Bitmap

Syntax	openPXBitmapWindow(<Bitmap-ZugrNr>,<Paletten-ZugrNr>,
<Umgebungs-ZugrNr>,<Position/Begrenzung>,<Modus>,
<Hintergrundfarbe>)

Deklaration	INT openPXBitmapWindow(WORD,WORD,WORD,STRING,INT,STRING)

Parameter	<Bitmap-ZugrNr>	Zugriffsnummer auf Windows-Bitmap, die von getPXGraphicBlob() zurückgegeben wird

<Paletten-ZugrNr>	Optionale Zugriffsnummer auf Windows-Palette, die von getPXGraphicBlobPalette() zurückgegeben wird

(Geben Sie 0 ein, um die ToolBook-Palette zu verwenden.)

<Umgebungs-ZugrNr>	Window, in dem untergeordnetes Fenster erstellt werden soll

<Position/Begrenzung>	Liste mit zwei oder vier durch Kommas getrennten Zahlen, die die Position oder Begrenzung des untergeordneten Fensters in Bildschirmkoordinaten darstellen

<Modus>	Anzeigemodus für Bitmap:

0	Normal - Bitmap wird in der oberen linken Ecke des Fensters angezeigt. Wenn <Position/Begrenzung> einen Punkt darstellt, wird die Fenstergröße an die Bitmap-Größe angepaßt. Wenn <Position/Begrenzung> ein Rechteck darstellt, wird die Fenstergröße an die Rechteckgröße angepaßt.

1	Zentriert - Wenn <Position/Begrenzung> einen Punkt darstellt, wird die Bitmap um den Punkt zentriert, und die Fenstergröße wird an die Bitmap-Größe angepaßt. Wenn <Position/Begrenzung> ein Rechteck darstellt, wird die Bitmap im Fenster zentriert, und die Fenstergröße wird an die Rechteckgröße angepaßt.

2	Skaliert - Wenn <Position/Begrenzung> einen Punkt darstellt, wird die Fenstergröße an die Bitmap-Größe angepaßt. Wenn <Position/Begrenzung> ein Rechteck darstellt, wird die Bitmap auf die Größe des Fensters skaliert, und die Fenstergröße wird an die Rechteckgröße angepaßt.

<Hintergrundfarbe>	Liste mit durch Kommas getrennten Werten, die die RGB-Werte für die Hintergrundfarbe des Fensters darstellen. Standardmäßig wird die Hintergrundfarbe des Systemfensters verwendet.

Rückgabewert	> 0	Zugriffsnummer auf Bitmap-Fenster
< 0	Fehlernummer

Beispiel

-- table ist die momentan geöffnete Tabelle, fieldName ist der Name des

-- Feldes, in dem sich das BLOB befindet.

to handle showBitmap table,fieldName

system hBMP,hPal,hWndBMP

-- Zugriffsnummer vom Typ PX auf den BLOB abrufen

hPXToBMP = openPXBlobRead(table,fieldName)

-- BLOB im Hauptspeicher ablegen und Windows-Zugriffsnummer darauf abrufen

hBMP = getPxGraphicBlob(hPXToBMP)

-- Entsprechendes mit der Palette durchführen

hPal = getPxGraphicBlobPalette(hPXToBMP)

-- PX-Zugriffsnummer wird nicht mehr benötigt

get closePXBlob(hPXToBMP, 0)

-- Fenster öffnen und den grafischen BLOB anzeigen.

hWndBMP = openPXBitmapWindow (hBMP, hPal, clientHandle of mainWindow, \

pageUnitsToClient(position of ellipse "Center"), 2, \

rgbFill of ellipse "Center")

-- Die Ellipse "Center" sei ein Punkt, und die Moduseinstellung sei 2.

-- Die Bitmap erscheint mit ihrer normalen Größe zentriert um

-- die eindimensionale Ellipse.

end showBitmap


openPXBlobRead
openPXBlobRead( )
TB30PDX.DLL

Modulfunktion	PXBlobOpenRead()

Beschreibung	Öffnet ein BLOB für Leseoperationen

Syntax	openPXBlobRead(<TabAlias>,<Feldname>)

Deklaration	LONG openPXBlobRead(STRING,STRING)

Parameter	<TabAlias>	Alias der Tabelle, in der das BLOB geöffnet werden soll

<Feldname>	Name des BLOB-Feldes

Rückgabewert	>= 0	Zugriffsnummer auf das BLOB
< 0	Fehlernummer

Beispiel

--Memo-BLOB in ein Feld einlesen
hBlob = openPXBlobRead("TestDatenbank", "ReviewText")
text of field "review" = getPXMemoBlob(hBlob)
get closePXBlob(hBlob, 0)


openPXBlobWrite
openPXBlobWrite( )
TB30PDX.DLL

Modulfunktion	PXBlobOpenWrite()

Beschreibung	Öffnet ein BLOB für Schreiboperationen

Syntax	openPXBlobWrite(<TabAlias>,<Feldname>,<Größe>,<aktuellen speichern>)

Deklaration	LONG openPXBlobWrite(STRING,STRING,LONG,INT)

Parameter	<TabAlias>	Alias der Tabelle, in der das BLOB geöffnet werden soll

<Feldname>	Name des BLOB-Feldes

<Größe>	Größe des BLOB-Feldes (0 - 256 MB)

<aktuellen speichern>	Kopiermodus:

0	Neues BLOB: es wird nicht kopiert

1	BLOB kopieren: neues privates BLOB mit <Größe> Bytes wird erstellt

Rückgabewert	>= 0	Zugriffsnummer auf BLOB
< 0	Fehlernummer

Beispiel

--10 KB an Binärdaten in einem BLOB ablegen
hBlob = openPXBlobWrite("TestDatenbank", "bits", 10240, 0)
get setPXBlob(hBlob, 10240, 0, hBits)
get closePXBlob(hBlob, 1)


openPXTable
openPXTable( )
TB30PDX.DLL

Modulfunktion	PXTblOpen()

Beschreibung	Öffnet eine Tabelle

Syntax	openPXTable(<TabAlias>,<Tabellen-Dateiname>,<Index-ID>,<Jede Änderung speichern>)

Deklaration	INT openPXTable(STRING,STRING,INT,INT)

Parameter	<TabAlias>	Ein Name, den Sie der Tabelle zuweisen, um anschließend darauf zugreifen zu können. Der Name ist beliebig, muß aber in dieser Sicht auf die Tabelle während dieser Sitzung eindeutig sein.

<Tabellen-Dateiname>	Dateiname der zu öffnenden Tabelle

<Index-ID>	Typ des Indexes, nach dem die Datensätze sortiert werden sollen:

0	Reihenfolge des Primärindexes (Wenn Sie keinen Index für die Tabelle angelegt haben, geben Sie 0 ein)

1-255	Feldnummer für Einzelfeld-Sekundärindex, bei dem die Groß-/Kleinschreibung nicht beachtet wird

>256	Feld-Zugriffsnummer für zusammengesetzten Index oder Einzelfeldindex, bei dem die Groß-/Kleinschreibung nicht beachtet wird

<Jede Änderung speichern>	Modus zum Speichern von Änderungen:**

0	Änderungen werden im Auslagerungspuffer gespeichert

1	Änderungen werden auf dem Datenträger gespeichert

**Änderungen an einer gemeinsam genutzten Tabelle werden unabhängig vom Modus immer auf dem Datenträger gespeichert

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

-- "TestTabelle" ist ein beliebiger Alias.

-- curTable ist eine Benutzereigenschaft, die auf den Namen der Datenbankdatei

-- (ohne Erweiterung) gesetzt wurde.

get openPXTable("TestTabelle", curTable of this book, 0, 0)

if it < 0

request getPXErrorString(it)

end if


packPXTable
packPXTable( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Komprimiert die Datenbank und gibt den Speicher frei, der durch gelöschte Datensätze belegt ist.

Syntax	packPXTable(<TabAlias>)

Deklaration	INT packPXTable(STRING)

Parameter	<TabAlias>	Tabellen-Alias, der angegeben wurde, als die Tabelle geöffnet wurde

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Datenbank vor dem Kopieren komprimieren
--(dies kann längere Zeit dauern)
sysCursor = 4
get packPXTable("TestDatenbank")
if it = 0
get copyPXTable("c:\data\myData", "n:\data\shareDB")
end

Kommentare	Dieser Vorgang kann eine längere Zeit dauern und wird im Rahmen der normalen Tabellenoperationen nicht empfohlen.


previousPXRecord
previousPXRecord( )
TB30PDX.DLL

Modulfunktion	PXRecPrev()

Beschreibung	Wechselt zum vorhergehenden Datensatz einer Tabelle

Syntax	previousPXRecord(<TabAlias>)

Deklaration	INT previousPXRecord(STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Zum vorhergehenden Datensatz wechseln und das Datumsfeld "date" mit dem
--heutigen Datum vergleichen
get previousPXRecord("TestDatenbank")
if it >= 0
if getPXFieldValue("TestDatenbank", "date") < sysDate
request "Buch ist überfällig"
else
request "Buch ist nicht überfällig"
end
end


queryPXKey
queryPXKey( )
TB30PDX.DLL

Modulfunktion	PXKeyQuery()

Beschreibung	Ruft Informationen zu einem Index ab. Verwenden Sie die Funktion, um die Index-Zugriffsnummer zu bestimmen, die Sie an die Funktion openPXTable() übergeben können.

Syntax	queryPXKey(<Index-Dateiname>)

Deklaration	STRING queryPXKey(STRING)

Parameter	<Index-Dateiname>	Name der abzufragenden Indexdatei

Rückgabewert	Liste mit Feldname, Feldanzahl, Modus, einer Liste der Feld-Zugriffsnummern und der Index-ID.

Bei Einzelfeldindizes, bei denen die Groß-/Kleinschreibung berücksichtigt wird:
<Feldname>, 1, 0, <Feld-ZugrNr>, <Index-ID>

Bei zusammengesetzten Indizes oder Einzelfeldindizes, bei denen die Groß-/Kleinschreibung nicht berücksichtigt wird:
<Feldname>, <Feldanzahl>, 1, <Feld-ZugrNrn>, <Index-ID>

Wenn ein Fehler auftritt, wird NULL zurückgegeben, und sysError wird auf die Fehlernummer gesetzt

Beispiel

--Indexdateien nach Tabelle durchsuchen, um die richtige Index-ID zu finden
--fileList enthält bereits eine Liste von durch Kommas getrennten Dateinamen

found = false
i = 1
while not found and i <= itemCount(fileList)
get queryPXKey(item i of fileList)
if item 1 of it = "Letzter Name zuerst"
indexID = last item of it
found = TRUE
else
increment i
end
end


refreshPXNetTable
refreshPXNetTable( )
TB30PDX.DLL

Modulfunktion	PXNetTblRefresh()

Beschreibung	Synchronisiert eine gemeinsam genutzte Tabelle neu

Syntax	refreshPXNetTable(<TabAlias>)

Deklaration	INT refreshPXNetTable(STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Überprüfen, ob die Tabelle geändert wurde, und ggf. aktualisieren
get isPXNetTableChanged("TestDatenbank")
if it = 1
get refreshPXNetTable("TestDatenbank")
end


renamePXTable
renamePXTable( )
TB30PDX.DLL

Modulfunktion	PXTblRename()

Beschreibung	Ändert den Basisnamen einer Tabellenfamilie

Syntax	renamePXTable(<Quelltabelle>,<Zieltabelle>)

Deklaration	INT renamePXTable(STRING,STRING)

Parameter	<Quelltabelle>	Basisname der Familie der Quelltabelle, die umbenannt werden soll

<Zieltabelle>	Neuer Basisname für die Familie der Quelltabelle

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Alte Datenbank umbenennen, bevor sie auf einen lokalen Datenträger kopiert

--wird
get renamePXtable("c:\data\myData", "c:\data\oldData")
get copyPXTable("n:\data\commData", "c:\data\myData")


savePX
savePX( )
TB30PDX.DLL

Modulfunktion	PXSave()

Beschreibung	Speichert den Auslagerungspuffer auf dem Datenträger

Syntax	savePX()

Deklaration	INT savePX()

Parameter	Keine

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Erzwingen, daß der Auslagerungspuffer nach jeweils fünf Anfügeoperationen auf

--der Tabelle auf den Datenträger geschrieben wird
if appendCount >= 5
get savePX()
end


searchPXField
searchPXField( )
TB30PDX.DLL

Modulfunktion	PXSrchFld()

Beschreibung	Durchsucht eine Tabelle nach einem bestimmten Feld. Wenn die Tabelle momentan auf dem Primärindex geöffnet ist, können Sie nach allen Sekundärindizes (zusammengesetzt oder nicht) suchen. Wenn die Tabelle momentan auf einem Sekundärindex (zusammengesetzt oder nicht) geöffnet ist, können Sie nur nach diesem Index suchen. Der Parameter Modus steuert den Umfang der Suche. Beim Modus 0 erfolgt die Suche ab dem ersten Datensatz in der Tabelle nach einer genauen Übereinstimmung der Daten in den Schlüsselfeldern. Beim Modus 1 erfolgt die Suche ab dem aktuellen Datensatz nach einer genauen Übereinstimmung. Beim Modus 2 erfolgt die Suche ab dem ersten Datensatz nach einer Übereinstimmung. Wenn bei den Modi 0 und 1 der Wert -89 zurückgegeben wird, wird der aktuelle Datensatz nicht von der Position umgesetzt, an der er sich vor dem Suchvorgang befunden hat. Wenn beim Modus 2 keine genaue Übereinstimmung gefunden wird, gibt es zwei Möglichkeiten:

1.	Es gibt einen Datensatz, der größer als der Suchwert ist. Der aktuelle Datensatz wird auf den ersten entsprechenden Datensatz gesetzt, und -89 wird zurückgegeben.

2.	Der Suchwert ist größer als alle Datensätze in der Tabelle. Der aktuelle Datensatz wird an das Ende der Tabelle verschoben, und -101 wird zurückgegeben.

Syntax	searchPXField(<TabAlias>,<Feldname>,<Index-ID>,<Modus>)

Deklaration	INT searchPXField(STRING,STRING,WORD,INT)

Parameter	<TabAlias>	Alias der zu durchsuchenden Tabelle

<Feldname>	Feldname eines Schlüssels ausschließlich für von der Groß-/Kleinschreibung abhängigen Einzelfeld-Sekundärindex; bleibt andernfalls Null

<Index-ID>	Zugriffsnummer für den Index (wenn kein Feldname angegeben wird)

<Modus>	Suchmodus:

0	Suche ab dem Tabellenanfang

1	Suche ab dem nächsten Datensatz in der Tabelle

2	Suche nach dem folgenden Datensatz, wenn keine Übereinstimmung gefunden wird

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Tabelle mit einem Index öffnen, bei dem nicht zwischen Groß- und

--Kleinschreibung unterschieden wird, und nach einem Nachnamen und einem

--Alter suchen.
--Nachdem der Index erstellt ist, wird die ID in einer benutzerdefinierten \

--Eigenschaft des Buches gespeichert
get openPXTable("TestDatenbank", "c:\data\rolodex.db",lastName_Age_Index of this book, 0)

get emptyPXRecord("TestDatenbank") -- Suchpuffer in einen bekannten

-- Zustand versetzen

--Zu suchende Werte festlegen

get setPXFieldValue("TestDatenbank", "Name", text of field "Name")

get setPXFieldValue("TestDatenbank", "Alter", text of field "Alter")

get searchPXField("TestDatenbank", "", lastName_Age_Index of this book, 0)

if it < 0

request getPXErrorString(it)

end


searchPXKey
searchPXKey( )
TB30PDX.DLL

Modulfunktion	PXSrchKey()

Beschreibung	Durchsucht eine Tabelle nach einem passenden Schlüssel. Der Parameter Modus steuert den Umfang der Suche. Beim Modus 0 erfolgt die Suche ab dem ersten Datensatz in der Tabelle nach einer genauen Übereinstimmung der Daten in den Schlüsselfeldern. Beim Modus 1 erfolgt die Suche ab dem aktuellen Datensatz nach einer genauen Übereinstimmung. Beim Modus 2 erfolgt die Suche ab dem ersten Datensatz nach einer Übereinstimmung. Wenn bei den Modi 0 und 1 der Wert -89 zurückgegeben wird, wird der aktuelle Datensatz nicht von der Position umgesetzt, an der er sich vor dem Suchvorgang befunden hat. Wenn beim Modus 2 keine genaue Übereinstimmung gefunden wird, gibt es zwei Möglichkeiten:

1.	Es gibt einen Datensatz, der größer als der Suchwert ist. Der aktuelle Datensatz wird auf den ersten entsprechenden Datensatz gesetzt, und -89 wird zurückgegeben.

2.	Der Suchwert ist größer als alle Datensätze in der Tabelle. Der aktuelle Datensatz wird an das Ende der Tabelle verschoben, und -101 wird zurückgegeben.

Syntax	searchPXKey(<TabAlias>,<Felder>,<Feldwerte>,<Modus>)

Deklaration	INT searchPXKey(STRING,INT,STRING,INT)

Parameter	<TabAlias>	Alias der zu durchsuchenden Tabelle

<Felder>	Anzahl der Felder (<= Felder im Primärschlüssel)

<Feldwerte>	Liste der zu suchenden Werte

<Modus>	Suchmodus:

0	Suche ab dem Tabellenanfang

1	Suche ab dem nächsten Datensatz in der Tabelle

2	Suche nach dem folgenden Datensatz, wenn keine Übereinstimmung gefunden wird

Rückgabewert	0	Erfolgreiche Operation -- genaue Übereinstimmung gefunden
< 0	Fehler

Beispiel

--Suche nach einem Namen im Primärindex
get searchPXKey("TestDatenbank", "2", "Schmidt, Jonatan", 0)
if it >= 0
request "Gefunden"
else
request "Nicht gefunden"
end


setPXBitmapWindowInfo
setPXBitmapWindowInfo( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Setzt die Anzeigeattribute für ein Bitmap-Fenster. Datenparameter mit dem Wert Null (oder 0) werden nicht geändert.

Syntax	setPXBitmapWindowInfo(<Fenster-ZugrNr>,<Bitmap-ZugrNr>,\

<Paletten-ZugrNr>,<Modus>,<Hintergrundfarbe>)

Deklaration	INT setPXBitmapWindowInfo(INT,INT,INT,INT,STRING)

Parameter	<Fenster-ZugrNr>	Zugriffsnummer des Bitmap-Fensters

<Paletten-ZugrNr>	Optionale Zugriffsnummer auf Windows-Palette

<Bitmap-ZugrNr>	Zugriffsnummer auf Windows-Bitmap

<Modus>	Anzeigemodus für Bitmap:

1	Normal - Bitmap wird in der oberen linken Ecke des Fensters angezeigt. Wenn <Position/Begrenzung> einen Punkt darstellt, wird die Fenstergröße an die Bitmap-Größe angepaßt. Wenn <Position/Begrenzung> ein Rechteck darstellt, wird die Fenstergröße an die Rechteckgröße angepaßt.

2	Zentriert - Wenn <Position/Begrenzung> einen Punkt darstellt, wird die Bitmap um den Punkt zentriert, und die Fenstergröße wird an die Bitmap-Größe angepaßt. Wenn <Position/Begrenzung> ein Rechteck darstellt, wird die Bitmap im Fenster zentriert, und die Fenstergröße wird an die Rechteckgröße angepaßt.

3	Skaliert - Wenn <Position/Begrenzung> einen Punkt darstellt, wird die Fenstergröße an die Bitmap-Größe angepaßt. Wenn <Position/Begrenzung> ein Rechteck darstellt, wird die Bitmap auf die Größe des Fensters skaliert, und die Fenstergröße wird an die Rechteckgröße angepaßt.

<Hintergrundfarbe>	Liste mit durch Kommas getrennten Werten, die die RGB-Werte für die Hintergrundfarbe des Fensters darstellen.

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

-- Grafisches BLOB in einem Fenster anzeigen

-- hWndBitmap ist eine Zugriffsnummer auf ein bereits (möglicherweise mit

-- openPXBitmapWindow()) erstelltes Fenster.

hPrivateBlob = openPXBlobRead("TestTabelle", "Picture")

if hPrivateBlob < 0

send PXError hPrivateBlob	-- Aufräumarbeiten

break

else

hBitmap = getPXGraphicBlob(hPrivateBlob)

hPalette = getPXGraphicBlobPalette(hPrivateBlob)

get closePXBlob(hPrivateBlob, 0)

end if

get setPXBitmapWindowInfo(hWndBitmap, hBitmap, hPalette, 2, \

rgbfill of this page)

if it < 0

request getPXErrorString(it)

end if


setPXBlob
setPXBlob( )
TB30PDX.DLL

Modulfunktion	PXBlobPut()

Beschreibung	Schreibt Daten in ein BLOB

Syntax	setPXBlob(<BLOB-ZugrNr>,<Größe>,<Offset>,<Puffer>)

Deklaration	INT setPXBlob(INT,DWORD,LONG,WORD)

Parameter	<BLOB-ZugrNr>	Zugriffsnummer auf einen BLOB

<Größe>	Größe des Puffers (1 - 256 MB)

<Offset>	Offset ab dem Anfang des BLOBs für den Schreibvorgang

<Puffer>	Zugriffsnummer auf BLOB-Daten

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

Siehe openPXBlobWrite()


setPXBlobFromFile
setPXBlobFromFile( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Importiert eine Datei direkt in ein BLOB-Feld.

Syntax	setPXBlobFromFile(<BLOB-ZugrNr>,<Größe>,<Datei-Offset>,<Offset>,<Dateiname>)

Deklaration	INT setPXBlobFromFile(INT,DWORD,DWORD,DWORD,STRING)

Parameter	<BLOB-ZugrNr>	Zugriffsnummer, die von openPXBlobWrite() zurückgegeben wird

<Größe>	Anzahl der zu lesenden Bytes in der Datei

<Datei-Offset>	Offset ab dem Anfang der Datei für den Lesevorgang

<Offset>	Offset ab dem Anfang des BLOBs für den Schreibvorgang

<Dateiname>	Datei, aus der gelesen werden soll

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Klangdatei als BLOB speichern
hBlob = openPXBlobWrite("TestDatenbank", "wave", fileSize, 0)
if hBlob >= 0
get setPXBlobFromFile(hBlob, fileSize, 0, 0, Dateiname)
get closePXBlob(hBlob, 1)
end

Kommentare	Wenn als Größe der Wert 0 angegeben wird, wird die gesamte Datei (maximal 256 MB) gelesen.


setPXFieldValue
setPXFieldValue( )
TB30PDX.DLL

Modulfunktionen:	PXPutAlpha(), PXPutDate(), PXPutDouble(), PXPutLong(), PXPutShort()

Beschreibung	Setzt den Inhalt eines Feldes im aktuellen Datensatz einer Tabelle

Syntax	setPXFieldValue(<TabAlias>,<Feldname>,<Feldwert>)

Deklaration	INT setPXFieldValue(STRING,STRING,STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

<Feldname>	Name des zu setzenden Feldes

<Feldwert>	Neuer Inhalt für das Feld

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Felder im aktuellen Datensatz aus den Feldern der Seite setzen
get setPXFieldValue("TestDatenbank", "Name", text of field "Name")
get setPXFieldValue("TestDatenbank", "Alter", text of field "Alter")
get setPXFieldValue("TestDatenbank", "GebDatum", text of field "GebDatum")


setPXGraphicBlob
setPXGraphicBlob( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Erstellt einen grafischen BLOB aus einer GDI-Zugriffsnummer auf eine Windows-Bitmap

Syntax	setPXGraphicBlob(<BLOB-ZugrNr>,<hBitmap>,<hPalette>)

Deklaration	INT setPXGraphicBlob(INT,WORD,WORD)

Parameter	<BLOB-ZugrNr>	Zugriffsnummer, die von openPXBlobWrite() zurückgegeben wird

<hBitmap>	Zugriffsnummer auf geräteunabhängige Windows-Bitmap

<hPalette>	Zugriffsnummer auf Windows-Palette für die Bitmap (0 für die Windows-Standardpalette)

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Bitmap aus ToolBook-Ressource als BLOB in der Datenbank speichern
hBitmap = GDIHandle(bitmap "logo")
hBlob = openPXBlobWrite("TestDatenbank", "graphic", item 5 of \

resourceInfo of bitmap "logo", 0)
if hBlob >= 0
get setPXGraphicBlob(hBlob, hBitmap, hPalette)
get closePXBlob(hBlob, 1)
end


setPXGraphicBlobFromFile
setPXGraphicBlobFromFile( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Importiert eine Bitmap-Datei in ein BLOB-Feld

Syntax	setPXGraphicBlobFromFile(<BLOB-ZugrNr>, <Dateiname>)

Deklaration	INT setPXGraphicBlobFromFile(INT,STRING)

Parameter	<BLOB-ZugrNr>	Zugriffsnummer, die von openPXBlobWrite() zurückgegeben wird

<Dateiname>	Datei, aus der gelesen werden soll.

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Bitmap 256color.bmp in BLOB-Feld des aktuellen Datensatzes ablegen
hBlob = openPXBlobWrite("TestDatenbank", "graphic", fileSize, 0)
if hBlob >= 0
get setPXGraphicBlobFromFile(hBlob, "c:\windows\256color.bmp")
get closePXBlob(hBlob, 1)
end

Kommentare	Die Datei muß eine Windows-Bitmap (.BMP oder .DIB) sein. Alle anderen Grafikformate in Dateien werden als unstrukturiert interpretiert.


setPXINIMaxFiles
setPXINIMaxFiles( )
TB30PDX.DLL

Modulfunktion	PXSetDefaults()

Beschreibung	Setzt den Wert des Eintrags MaxFiles im Abschnitt [Paradox Engine] der Datei WIN.INI. Das Paradox-Modul liest diesen Wert bei der ersten Initialisierung, um die maximale Anzahl an Dateien festzulegen, die vom Modul verwendet werden können. Durch den Aufruf dieser Funktion liest das Modul nicht notwendigerweise die Voreinstellungen, lediglich die INI-Datei wird geschrieben.

Syntax	setPXINIMaxFiles(<MaxAnzahl Dateien>)

Deklaration	INT setPXINIMaxFiles(INT)

Parameter	<MaxAnzahl Dateien>	Anzahl an Datei-Zugriffsnummern (3 - 255)

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

Siehe getPXMaxFiles()


setPXINIMaxLocks
setPXINIMaxLocks( )
TB30PDX.DLL

Modulfunktion	PXSetDefaults()

Beschreibung	Setzt den Wert des Eintrags MaxLocks im Abschnitt [Paradox Engine] der Datei WIN.INI. Das Paradox-Modul liest diesen Wert bei der ersten Initialisierung, um die maximale Anzahl von Sperren festzulegen, die vom Modul verwendet werden können. Durch den Aufruf dieser Funktion liest das Modul nicht notwendigerweise die Voreinstellungen, lediglich die INI-Datei wird geschrieben.

Syntax	setPXINIMaxLocks(<Max. Sperrungen>)

Deklaration	INT setPXINIMaxLocks(INT)

Parameter	<Max. Sperrungen>	Anzahl der Datensatzsperren (1 - 128)

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

Siehe getPXMaxLocks()


setPXINIMaxTables
setPXINIMaxTables( )
TB30PDX.DLL

Modulfunktion	PXSetDefaults()

Beschreibung	Setzt den Wert des Eintrags MaxTables im Abschnitt [Paradox Engine] der Datei WIN.INI. Das Paradox-Modul liest diesen Wert bei der ersten Initialisierung, um die maximale Anzahl der Tabellen festzulegen, die vom Modul verwendet werden können. Durch den Aufruf dieser Funktion liest das Modul nicht notwendigerweise die Voreinstellungen, lediglich die INI-Datei wird geschrieben.

Syntax	setPXINIMaxTables(<Max. Tabellen>)

Deklaration	INT setPXINIMaxTables(INT)

Parameter	<Max. Tabellen>	Anzahl der Tabellen (1 - 64)

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

Siehe getPXMaxTables()


setPXMemoBlob
setPXMemoBlob( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Kopiert eine Zeichenfolge in einen Memo-BLOB

Syntax	setPXMemoBlob(<BLOB-ZugrNr>,<Text>)

Deklaration	INT setPXMemoBlob(INT,STRING)

Parameter	<BLOB-ZugrNr>	Zugriffsnummer die von openPXBlobWrite() zurückgegeben wird

<Text>	Zeichenfolge mit Text, höchstens 64 KB lang

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Text im Feld "Hinweise" in einem BLOB in der Datenbank speichern
hBlob = openPXBlobWrite("TestDatenbank", "Hinweise", charCount(text of \

field "Hinweise"), 0)
if hBlob >= 0
get setPXMemoBlob(hBlob, text of field "Hinweise")
get closePXMemoBlob(hBlob, 1)
end


setPXRaw
setPXRaw( )
TB30PDX.DLL

Modulfunktion	PXRawPut()

Beschreibung	Schreibt unformatierte Daten in den aktuellen Datensatz einer Tabelle

Syntax	setPXRaw(<TabAlias>,<Daten-ZugrNr>,<Größe>)

Deklaration	INT setPXRaw(STRING,INT,INT)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

<Daten-ZugrNr>	Zugriffsnummer auf unformatierte Daten

<Größe>	Größe der unformatierten Daten

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

-- Ursprünglichen Inhalt des aktuellen Datensatzes aus gespeichertem Puffer
-- wiederherstellen
get setPXRaw("TestDatenbank", hRawData, sizeofData)
-- Speicher freigeben, der für den Puffer für die unformatierten Daten
-- im Aufruf von getRawData() reserviert wurde
get freePXBlobMemory(hRawData)
clear hRawData


setPXSortOrder
setPXSortOrder( )
TB30PDX.DLL

Modulfunktion	PXSetDefaults()

Beschreibung	Setzt die Sortierreihenfolge

Syntax	setPXSortOrder(<Sortierreihenfolge>)

Deklaration	INT setPXSortOrder(STRING)

Parameter	<Sortierreihenfolge>	Zeichen für Sortierreihenfolge:

a	ASCII-Sortierreihenfolge

i	Internationale Sortierreihenfolge

n	Norwegische/dänische Sortierreihenfolge

s	Schwedische/finnische Sortierreihenfolge

d	Norwegische/dänische Sortierreihenfolge für Paradox 4.0

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

Siehe getPXSortOrder()


setPXINISwapSize
setPXINISwapSize( )
TB30PDX.DLL

Modulfunktion	PXSetDefaults()

Beschreibung	Setzt den Wert des Eintrags SwapSize aus dem Abschnitt [Paradox Engine] der Datei WIN.INI. Das Paradox-Modul liest diesen Wert bei der ersten Initialisierung, um die Größe des Auslagerungspuffers festzulegen, der vom Modul verwendet wird. Durch den Aufruf dieser Funktion liest das Modul nicht notwendigerweise die Voreinstellungen, lediglich die INI-Datei wird geschrieben.

Syntax	setPXINISwapSize(<Auslagerungsgröße>)

Deklaration	INT setPXINISwapSize(INT)

Parameter	<Auslagerungsgröße>	Auslagerungsgröße in KB (8 - 256), mindestens 4 KB pro Tabelle

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

Siehe getPXSwapSize()


setPXTableCreateMode
setPXTableCreateMode( )
TB30PDX.DLL

Modulfunktion	PXTblCreateMode()

Beschreibung	Setzt den Modus zum Erstellen von Tabellen

Syntax	setPXTableCreateMode(<Modus>)

Deklaration	INT setPXTableCreateMode(INT)

Parameter	<Modus>	Modus zum Erstellen von Tabellen:

0	Erstellen von Tabellen, die zu Paradox 3.5 kompatibel sind

1	Erstellen von Tabellen, die zu Paradox 4.0 kompatibel sind

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Benutzer fragen, welche Paradox-Version beim Erstellen einer Tabelle
--verwendet werden soll
request "Für welche Paradox-Version soll eine Tabelle erstellt werden?" \
with "4.0" or "3.5"
if it = "4.0"
get setPXTableCreateMode(1)
else
get setPXTableCreateMode(0)
end


setPXTableMaxSize
setPXTableMaxSize( )
TB30PDX.DLL

Modulfunktion	PXTblMaxSize()

Beschreibung	Setzt die maximale Tabellengröße und Blockgröße für neue Tabellen. Die Blockgröße ist durch die maximale Tabellengröße festgelegt:

Maximale Tabellengröße 	Blockgröße

64 MB	1 KB

128 MB	2 KB

256 MB	4 KB

Syntax	setPXTableMaxSize(<Größe>)

Deklaration	INT setPXTableMaxSize(INT)

Parameter	<Größe>	Maximale Tabellengröße in MB (64,128 oder 256)

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Maximale Größe für die Tabelle festlegen
get setPXMaxTableSize(64) -- 64 MB


unlockPXNetFile
unlockPXNetFile( )
TB30PDX.DLL

Modulfunktion	PXNetFileUnlock()

Beschreibung	Hebt die Sperre auf einer Datei auf

Syntax	unlockPXNetFile(<Dateiname>,<Sperrungstyp>)

Deklaration	INT unlockPXNetFile(STRING,INT)

Parameter	<Dateiname>	Name der Datei, auf der die Sperre aufgehoben werden soll

<Sperrungstyp>	Typ der Sperrung:

1	Vollsperrung, keine Parallelität

2	Schreibsperre

3	Unterbinden von Schreibsperren

4	Unterbinden von allen Sperren, volle Parallelität

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

Siehe lockPXNetFile()


unlockPXNetRecord
unlockPXNetRecord( )
TB30PDX.DLL

Modulfunktion	PXNetRecUnlock()

Beschreibung	Hebt die Sperre auf dem aktuellen Datensatz einer Tabelle auf

Syntax	unlockPXNetRecord(<TabAlias>,<Sperr-ZugrNr>)

Deklaration	INT unlockPXNetRec(STRING,INT)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

<Sperr-ZugrNr>	Zugriffsnummer auf den gesperrten Datensatz

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

Siehe lockPXNetRecord()


unlockPXNetTable
unlockPXNetTable( )
TB30PDX.DLL

Modulfunktion	PXNetTblUnlock()

Beschreibung	Hebt die Sperre auf einer Tabelle auf

Syntax	unlockPXNetTable(<TabAlias>,<Sperrungstyp>)

Deklaration	INT unlockPXNetTable(STRING,INT)

Parameter	<TabAlias>	Alias der Tabelle, auf der die Sperre aufgehoben werden soll

<Sperrungstyp>	Typ der Sperre:

1	Vollsperre, keine Parallelität

2	Schreibsperre

3	Unterbinden von Schreibsperren

4	Unterbinden von allen Sperren, volle Parallelität

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

Siehe lockPXNetTable()


updatePXRecord
updatePXRecord( )
TB30PDX.DLL

Modulfunktion	PXRecUpdate()

Beschreibung	Aktualisiert den aktuellen Datensatz in einer Tabelle

Syntax	updatePXRecord(<TabAlias>)

Deklaration	INT updatePXRecord(STRING)

Parameter	<TabAlias>	Alias der zu verwendenden Tabelle

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Inhalt des Puffers für den aktuellen Datensatz in den aktuellen
--Datensatz schreiben
request "Datensatzänderungen speichern?" with "OK" or "Abbrechen"
if it = "OK"
get updatePXRecord("TestDatenbank")
end


upgradePXTable
upgradePXTable( )
TB30PDX.DLL

Modulfunktion	PXTblUpgrade()

Beschreibung	Aktualisiert eine ältere Paradox-Tabelle (Paradox 3.5 oder höher)

Syntax	upgradePXTable(<TabAlias>)

Deklaration	INT upgradePXTable(STRING)

Parameter	<TabAlias>	Alias der zu aktualisierenden Tabelle

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

--Angegebene Tabelle in das Format von Paradox 4.0 aktualisieren
ask "Geben Sie den Namen der zu aktualisierenden Tabelle ein."
if it <> null
get upgradePXTable(it)
end


writePXBlobToFile
writePXBlobToFile( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Exportiert ein BLOB in eine DOS-Datei

Syntax	writePXBlobToFile(<BLOB-ZugrNr>,<Dateiname>,<Modus>)

Deklaration	LONG writePXBlobToFile(INT,STRING,INT)

Parameter	<BLOB-ZugrNr>	Zugriffsnummer die von openPXBlobRead() oder openPXBlobWrite() zurückgegeben wird

<Dateiname>	Pfad und Dateiname der Datei, in die das BLOB geschrieben werden soll

<Modus>	Modus für den Schreibvorgang:

0	Normal; Lesen und Schreiben ohne Einschränkung möglich.

1	Schreibgeschützt; Schreibzugriff durch andere Anwendungen nicht möglich.

2	Überschreiben; wenn die Datei existiert, wird sie überschrieben.

3	Schreibgeschützt & Überschreiben.

Rückgabewert	> 0	Anzahl der Bytes, die im Erfolgsfall in die Datei geschrieben wurden
< 0	Fehlernummer

Kommentare	Wenn die angegebene Datei existiert und der Modus 0 oder 1 angegeben ist, wird keine Datei geschrieben, und ein Fehler wird zurückgegeben. Eine Windows-Bitmap-Datei (.BMP) wird geschrieben.

Beispiel

--Klangdatei auf dem Datenträger speichern
hBlob = openPXBlobRead("TestDatenbank", "sound")
if hBlob >= 0
get writePXblobToFile(hBlob, "sound.wav", 2)
playSound("sound.wav")
get closePXBlob(hBlob, 0)
end


writePXGraphicBlobToFile
writePXGraphicBlobToFile( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Exportiert ein grafisches BLOB als Bitmap-Datei

Syntax	writePXGraphicBlobToFile(<BLOB-ZugrNr>, <Dateiname>, <Modus>)

Deklaration	LONG writePXGraphicBlobToFile(INT,STRING,INT)

Parameter	<BLOB-ZugrNr>	Zugriffsnummer die von openPXBlobRead() oder openPXBlobWrite() zurückgegeben wird

<Dateiname>	Pfad und Dateiname der Datei, in die das BLOB geschrieben werden soll

<Modus>	Modus für den Schreibvorgang:

0	Normal; Lesen und Schreiben ohne Einschränkung möglich.

1	Schreibgeschützt; Schreibzugriff durch andere Anwendungen nicht möglich.

2	Überschreiben; wenn die Datei existiert, wird sie überschrieben.

3	Schreibgeschützt & Überschreiben.

Rückgabewert	> 0	Anzahl der Bytes, die im Erfolgsfall in die Datei geschrieben wurden
< 0	Fehlernummer

Kommentare	Wenn die angegebene Datei existiert und der Modus 0 oder 1 angegeben ist, wird keine Datei geschrieben, und ein Fehler wird zurückgegeben. Eine Windows-Bitmap-Datei (.BMP) wird geschrieben.

Beispiel

--Bitmap in einer Datei speichern
hBlob = openPXBlobRead("TestDatenbank", "graphic")
if hBlob >= 0
get writePXGraphicBlobToFile(hBlob, "graphic.bmp", 0)
get closePXBlob(hBlob)
end


getPXUserInfo
getPXUserInfo( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Gibt eine Liste mit durch Kommas getrennten Werten aus dem Abschnitt [Paradox Engine] der Datei WIN.INI zurück

Syntax	getPXUserInfo(<Liste mit Werten>)

Deklaration	STRING getPXUserInfo()

Parameter	Keine

Rückgabewert	UserName, NetNamePath, NetType, ShareLocal, PX35Locking

(Eine Beschreibung der zurückgegebenen Werte finden Sie unter setPXUserInfo().)

Wenn ein Fehler auftritt, wird NULL zurückgegeben, und sysError wird auf die Fehlernummer gesetzt.

Beispiel

get getPXUserInfo()

if it is NULL

request sysError

end if

if item 1 of it is "Karlchen"

set item 1 of it to "Karl"

get setPXUserInfo(it)

end if


setPXUserInfo
setPXUserInfo( )
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Akzeptiert eine Liste mit durch Kommas getrennten Werten und schreibt sie in den Abschnitt [Paradox Engine] der Datei WIN.INI

Syntax	setPXUserInfo(<Liste mit Werten>)

Deklaration	INT getPXUserInfo(STRING)

Parameter	<Liste mit Werten>	Liste mit durch Kommas getrennten Werten :

UserName	Der Name des Benutzers der Anwendung. Wenn kein Name eingegeben wird, wird standardmäßig "PxEngine" in der Datei WIN.INI verwendet.

NetNamePath	Das Verzeichnis von PARADOX.NET oder PDOXUSRS.NET (Die Voreinstellung ist C:\). Wenn Sie lediglich lokale Tabellen auf Ihrem PC verwenden, geben Sie C:\ ein.

NetType	Verwenden Sie immer den Wert 2, auch wenn Sie kein Netzwerk verwenden. (Die Voreinstellung ist 2.)

ShareLocal	"yes", wenn Ihre Tabellen gleichzeitig von Paradox oder einer Modulanwendung, die in einem DOS-Fenster läuft, verwendet werden sollen. (Die Voreinstellung ist "no").

PX35Locking	"yes", wenn das Sperrprotokoll von Paradox 3.5 verwendet wird. (Die Voreinstellung ist "no").

Rückgabewert	0	Erfolgreiche Operation
< 0	Fehlernummer

Beispiel

get setPXUserInfo("Bernd Benutzer,c:\,2,No,No")


getPXSwapSizeFromINI()
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Bestimmt den Wert des Eintrags SwapSize aus dem Abschnitt [Paradox Engine] der Datei WIN.INI. Das Paradox-Modul liest diesen Wert bei der ersten Initialisierung, um die maximale Größe des Auslagerungspuffers zu setzen, der vom Modul verwendet werden kann. Durch den Aufruf dieser Funktion liest das Modul nicht notwendigerweise die Voreinstellungen, sondern es ruft lediglich die Einstellungen aus der .INI-Datei ab. Sie rufen den Wert ab, den das Modul momentan verwendet, indem Sie getPXSwapSize() aufrufen.

Syntax	getPXSwapSizeFromINI()

Deklaration	INT 	getPXSwapSizeFromINI()

Parameter	Keine

Rückgabewert	>= 0	INI-Einstellung

< 0	Fehlernummer

Beispiel

if getPXSwapSizeFromINI() < 64

request "Auslagerungspuffer ist kleiner als 64 KB. Diese Anwendung"&CRLF\

"wird mit einem größeren Auslagerungspuffer schneller laufen."


getPXMaxTablesFromINI()
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Bestimmt den Wert des Eintrags MaxTables aus dem Abschnitt [Paradox Engine] der Datei WIN.INI. Das Paradox-Modul liest diesen Wert bei der ersten Initialisierung, um die maximale Anzahl der Tabellen festzulegen, die vom Modul verwendet werden können. Durch den Aufruf dieser Funktion liest das Modul nicht notwendigerweise die Voreinstellungen, sondern sie ruft lediglich die Einstellungen aus der .INI-Datei ab. Sie rufen den Wert ab, den das Modul momentan verwendet, indem Sie getPXMaxTables() aufrufen.

Syntax	getPXMaxTablesFromINI()

Deklaration	INT 	getPXMaxTablesFromINI()

Parameter	Keine

Rückgabewert	>= 0	Anzahl Tabellen, die maximal vom Modul verwendet werden können
< 0	Fehlernummer

Beispiel

--Aktuelle INI-Einstellung abrufen

get getPXMaxTablesFromINI()

--Wenn die aktuelle INI-Einstellung kleiner als der benötigte Wert ist, wird

--der Wert geändert (sofern möglich).

if it < myExpectedValue

get setPXINIMaxTables(myExpectedValue)

get initializePX(TestTabelle)	--Modul durch andere Person initialisiert.

get getPXMaxTables()

if it < myExpectedValue

--Eine andere Person hat das Modul initialisiert. Tabellenanzahl kann

--nicht auf den gewünschten Wert gesetzt werden, daher wird eine Fehlermeldung

--ausgegeben und die Routine beendet.

request "Tabellenanzahl kann nicht gesetzt werden. Beenden Sie alle"&CRLF&\

" anderen Paradox-Modul-Anwendungen, und versuchen Sie es erneut."

send exit

end

end


getPXMaxFilesFromINI()
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Bestimmt den Wert des Eintrags MaxFiles aus dem Abschnitt [Paradox Engine] der Datei WIN.INI. Das Paradox-Modul liest diesen Wert bei der ersten Initialisierung, um die maximale Anzahl an Dateien festzulegen, die vom Modul verwendet werden können. Durch den Aufruf dieser Funktion liest das Modul nicht notwendigerweise die Voreinstellungen, sondern es ruft lediglich die Einstellungen aus der .INI-Datei ab. Sie rufen den Wert ab, den das Modul momentan verwendet, indem Sie getPXMaxFiles() aufrufen.

Syntax	getPXMaxFilesFromINI()

Deklaration	INT 	getPXMaxFilesFromINI()

Parameter	Keine

Rückgabewert	>= 0	Anzahl Dateien///check US///, die maximal vom Modul verwendet werden können
< 0	Fehlernummer

Beispiel

--Aktuelle INI-Einstellung abrufen

get getPXMaxFilesFromINI()

--Wenn die aktuelle INI-Einstellung kleiner als der benötigte Wert ist, wird

--der Wert geändert (sofern möglich).

if it < myExpectedValue

get setPXINIMaxFiles(myExpectedValue)

get initializePX(TestTabelle)	--Modul durch andere Person initialisiert.

get getPXMaxFiles()

if it < myExpectedValue

--Eine andere Person hat das Modul initialisiert. Dateianzahl kann

--nicht auf den gewünschten Wert gesetzt werden, daher wird eine Fehlermeldung

--ausgegeben und die Routine beendet

request "Dateianzahl kann nicht gesetzt werden. Beenden Sie alle"&CRLF&\

" anderen Paradox-Modul-Anwendungen, und versuchen Sie es erneut."

send exit

end

end


getPXMaxLocksFromINI()
TB30PDX.DLL

Modulfunktion	Keine

Beschreibung	Bestimmt den Wert des Eintrags MaxLocks aus dem Abschnitt [Paradox Engine] der Datei WIN.INI. Das Paradox-Modul liest diesen Wert bei der ersten Initialisierung, um die maximale Anzahl an Sperren zu setzen, die vom Modul verwendet werden können. Durch den Aufruf dieser Funktion liest das Modul nicht notwendigerweise die Voreinstellungen, sondern sie ruft lediglich die Einstellungen aus der .INI-Datei ab. Sie rufen den Wert ab, den das Modul momentan verwendet, indem Sie getPXMaxLocks() aufrufen.

Syntax	getPXMaxLocksFromINI()

Deklaration	INT 	getPXMaxLocksFromINI()

Parameter	Keine

Rückgabewert	>= 0	Anzahl Sperren///check US///, die maximal vom Modul verwendet werden können
< 0	Fehlernummer

Beispiel

--Aktuelle INI-Einstellung abrufen

get getPXMaxLocksFromINI()

--Wenn die aktuelle INI-Einstellung kleiner als der benötigte Wert ist, wird

--der Wert geändert (sofern möglich).

if it < myExpectedValue

get setPXINIMaxLocks(myExpectedValue)

get initializePX(TestTabelle)	--Modul durch andere Person initialisiert.

get getPXMaxLocks()

if it < myExpectedValue

--Eine andere Person hat das Modul initialisiert. Anzahl der Sperren kann

--nicht auf den gewünschten Wert gesetzt werden, daher wird eine Fehlermeldung

--ausgegeben und die Routine beendet

request "Anzahl der Sperren kann nicht gesetzt werden. Beenden Sie "&CRLF&\

"alle anderen Paradox-Modul-Anwendungen, und versuchen Sie es erneut."

send exit

end

end


checkDBIndex
checkDBIndex( )
TB30DB3.DLL

Syntax	checkDBIndex(<Dateiname>)

Deklaration	INT checkDBIndex(STRING)

Beschreibung	Überprüft die angegebene Indexdatei gegen die aktuelle dBASE-Datei.

Parameter	<Dateiname>	Gültiger Dateiname der zu überprüfenden Indexdatei.

Rückgabewert	1	Die Indexdatei ist in Ordnung.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 18	Ungültige Schlüsselreferenz.
- 19	Mehrere Schlüssel verweisen auf denselben Datensatz.
- 25	Datensatz gefunden, der neuer als der zugehörige Schlüssel ist.
- 26	Ein Schlüssel war nicht sortiert.
- 22	Kein Schlüssel für einen Datensatz.
- 53	Keine Indexdatei mit dem angegebenen Namen.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

to handle buttonClick

get checkDBIndex("c:\egypt\hiero.ndx")

if It <= - 3

local newFileName

ask "Indexdatei ungeeignet. Andere Indexdatei versuchen?"

if sysError <> cancel and It <> null

put It into newFileName

get checkDBIndex(newFileName)

end if

else

request "Indexdatei in Ordnung"

end if

end buttonClick


closeAllDBFiles
closeAllDBFiles( )
TB30DB3.DLL

Syntax	closeAllDBFiles()

Deklaration	INT closeAllDBFiles()

Beschreibung	Schließt alle geöffneten dBASE- und Indexdateien.

Parameter	Keine

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

to handle exit

get closeAllDBFiles()

end exit


closeDBFile
closeDBFile( )
TB30DB3.DLL

Syntax	closeDBFile(<Dateiname>)

Deklaration	INT closeDBFile(STRING)

Beschreibung	Schließt die angegebene dBASE-Datei und alle damit zusammenhängenden Indexdateien.

Parameter	<Dateiname>	Der Name der zu schließenden dBASE-Datei.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 28	Keine dBASE-Datei mit dem angegebenen Namen.
- 29	Die Indexdatei konnte nicht geschlossen werden.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

to handle error value, string

request "Fehler (" & val & ") " & string

get closeDBFile(fileName)

end error


closeDBIndexFile
closeDBIndexFile( )
TB30DB3.DLL

Syntax	closeDBIndexFile(<Dateiname>)

Deklaration	INT closeDBIndexFile(STRING)

Beschreibung	Schließt die angegebene dBASE-Indexdatei.

Parameter	<Dateiname>	Der Name der zu schließenden dBASE-Indexdatei.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 53	Keine Indexdatei mit dem angegebenen Namen.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

to handle error value, string

request "Fehler (" & val & ") " & string

get closeDBIndexFile(fileName)

end error


createDBFieldTag
createDBFieldTag( )
TB30DB3.DLL

Syntax	createDBFieldTag(<Feldanzahl>)

Deklaration	INT createDBFieldTag(WORD)

Beschreibung	Erstellt eine Feldkennzeichnung, die die Anzahl der Felder in einer dBASE-Datei angibt, die mit createDBFile() erstellt werden soll. Genaue Informationen zum Erstellen einer dBASE-Datei finden Sie bei createDBFile().

Parameter	<Feldanzahl>	Die Anzahl der  Felder, die die Kennzeichnung enthalten kann. Eine gültige Feldanzahl für eine dBASE-Datei kann angegeben werden.

Rückgabewert	Wenn kein Fehler auftritt, gibt createDBFile() eine Zahl zurück, die den Parameter <FeldKennzeichnNr> darstellt, um die Kennzeichnung in setDBFieldTag(), createDBFile() und freeDBFieldTag() anzugeben. Wenn ein Fehler auftritt, zum Beispiel nicht genügend Speicher, gibt createDBFieldTag() 0 zurück.

Beispiel

--Rückgabewert für Kennzeichnungsnummer abrufen

put createDBFieldTag(noFields) into tagNumber

if tagNumber = 0

request "Fehler beim Erstellen der Feldkennzeichnung"

break

end if


createDBFile
createDBFile( )
TB30DB3.DLL

Syntax	createDBFile(<Dateiname>,<FeldKennzeichnNr>,<vorh. beibehalten>)

Deklaration	INT createDBFile(STRING,WORD,WORD)

Beschreibung	Erstellt und öffnet eine dBASE-Datei mit dem angegebenen Namen und der angegebenen Feldanzahl mit Hilfe des Inhalts der Datenstruktur für die Feldkennzeichnung. Die Anzahl und die möglichen Werte der Felder hängen von Parametern ab, die mit createDBFieldTag() und setDBFieldTag() übergeben werden.

So erstellen Sie eine dBASE-Datei mit der dBASE-DLL:

1.	Erstellen Sie eine Feldkennzeichnung mit einer geeigneten Größe unter Verwendung von createDBFieldTag() mit einem Parameter, der die Feldanzahl anzeigt, die in der Kennzeichnung enthalten sein kann. Der Rückgabewert dieser Funktion ist eine Zahl, mit der die Feldkennzeichnung beim Aufruf von createDBFile() und freeDBFieldTag() referenziert wird.

Eine Feldkennzeichnung (engl.: field tag) ist ein Feld von Datenstrukturen, die zum Erstellen einer dBASE-Datei verwendet werden.

2.	Legen Sie den Inhalt der Feldkennzeichnung mit setDBFieldTag() fest, wobei die Parameter für jedes Feld Nummer, Name, Typ, Breite und (nur bei numerischen Feldern) die Anzahl der Dezimalstellen der Kennzeichnung anzeigen.

3.	Rufen Sie createDBFile() mit den entsprechenden Parametern auf, um die dBASE-Datei basierend auf dem Inhalt der Feldkennzeichnung zu erstellen.

4.	Geben Sie die Feldkennzeichnung mit freeDBFieldTag() frei.

Parameter	<Dateiname>	Der Name der zu erstellenden dBASE-Datei.

<FeldKennzeichnNr>	Der Rückgabewert der Funktion createDBFieldTag(), die vor dem Aufruf von createDBFile() aufgerufen werden muß.

<vorh. beibehalten>	Wenn dieser Parameter 1 ist, wird weder die neue Datei von ToolBook erstellt noch eine bereits bestehende (mit <Dateiname> angegebene) dBASE-Datei gelöscht. Wenn dieser Parameter 0 ist, löscht ToolBook die bestehende Datei und erstellt eine neue.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 27	Die dBASE-Datei konnte nicht erstellt werden.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiele

get createDBFile(dbFileName,tagNumber,1)

if It <= 0

request "Fehler beim Erstellen der Datei"

break

end if

step i from 1 to itemCount(fieldNames)

put item i of fieldNames into It

ask "Welchen Feldtyp hat das Feld " & It & "?"

put It && ", " into item i of fieldType

put item i of fieldNames into It

ask "Welche Feldbreite hat das Feld " & It & "?"

put It && ", " into item i of fieldWidth

end step


createDBIndexFile
createDBIndexFile( )
TB30DB3.DLL

Syntax	createDBIndexFile(<Dateiname>,<Sortierausdruck>, \
<eind. Schlüssel>,<vorh. beibehalten>)

Deklaration	INT createDBIndexFile(STRING,STRING,WORD,WORD)

Beschreibung	Erstellt und öffnet eine dBASE-Indexdatei mit dem angegebene Namen und Sortierausdruck und definiert, ob jeder Schlüssel in der Indexdatei eindeutig sein muß sowie ob eine bestehende Indexdatei mit demselben Namen gelöscht werden soll.

Parameter	<Dateiname> 	Der Name der zu erstellenden Indexdatei.

<Sortierausdruck>	Der Ausdruck, der die Sortierkriterien der Indexdatei definiert. Der Ausdruck kann Feldnamen, Konstanten und Operatoren enthalten. Das Ergebnis des Sortierausdrucks muß ein numerischer Wert, boolescher Wert, ein Datum oder ein Zeichen sein.

Syntaxelemente von Sortierausdrücken:

Typ	Werte

Numerische Operatoren	+	-	*	/	**	^

Zeichenoperatoren	+

Relationale Operatoren	=	<>	#	<	>	<=	>=	$

Boolesche Operatoren	.NOT.	.OR.	.AND.

Funktionen	CTODDATE	RECNO
DELETED	STR
DTOC	TIME
IIF	UPPER
RECCOUNT	VAL

Konstanten	.T.	.F.

<eind. Schlüssel>	Eine Ganzzahl, die angibt, ob alle Schlüssel in der Indexdatei eindeutig sein müssen. Wenn <eind. Schlüssel> den Wert 1 hat, bleibt die Eindeutigkeit aller Schlüssel in der Indexdatei erhalten. Wenn <eind. Schlüssel> den Wert 0 hat, werden die Schlüssel nicht auf Eindeutigkeit überprüft.

<vorh. beibehalten>	Eine Ganzzahl, die angibt, ob eine vorhandene Indexdatei beibehalten werden soll. Wenn <vorh. beibehalten> den Wert 1 hat, wird weder die neue Datei von ToolBook erstellt noch die vorhandene Datei gelöscht. Wenn <vorh. beibehalten> den Wert 0 hat, löscht ToolBook die vorhandene Datei und erstellt eine neue.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Der Sortierausdruck enthält einen Fehler, oder die Datei, der Index oder das
System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

--Index zum Durchsuchen von Datensätzen in der durch den

--Sortierausdruck definierten Reihenfolge bereitstellen

if createDBIndexFile("temp.ndx","LASTNAME + FIRSTN",1,0) <

1 request getDBErrorString(It)

end


deleteDBFile
deleteDBFile( )
TB30DB3.DLL

Syntax	deleteDBFile(<Dateiname>)

Deklaration	INT deleteDBFile(STRING)

Beschreibung	Löscht die angegebene Datei und alle damit verbundenen und momentan geöffneten Indexdateien.

Parameter	<Dateiname>	Der Name der zu löschenden dBASE-Datei.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 20	Funktion war aufgrund eines Speichermangels nicht erfolgreich.
- 28	Keine dBASE-Datei mit dem angegebenen Namen.
- 29	Die Indexdatei konnte nicht geschlossen werden.


deselectDBIndexFile
deselectDBIndexFile( )
TB30DB3.DLL

Syntax	deselectDBIndexFile()

Deklaration	INT deselectDBIndexFile()

Beschreibung	Hebt die Auswahl der momentan ausgewählten Indexdatei auf, so daß sie anschließend nicht mehr die aktuelle Indexdatei ist. Die aktuelle Indexdatei bestimmt die Reihenfolge, in der in der aktuellen dBASE-Datei gesucht wird. Die Indexdatei muß zuvor mit openDBIndexFile() geändert worden sein.

Parameter	Keine.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 13	Keine aktuelle Indexdatei; verwenden Sie openDBIndexFile() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


findDBKey
findDBKey( )
TB30DB3.DLL

Syntax	findDBKey(<SuchZF>)

Deklaration	INT findDBKey(STRING)

Beschreibung	Durchsucht die aktuelle Indexdatei nach dem Schlüssel, der mit der angegebenen Zeichenfolge am meisten übereinstimmt. Der zurückgegebene Schlüssel wird zum aktuellen Schlüssel, und der durch den Schlüssel referenzierte Datensatz wird zum aktuellen Datensatz. Wenn die Datei bereits indiziert ist, ist dies das schnellste Verfahren, um nach einem Datensatz zu suchen.

Parameter	<SuchZF>	Die Suchzeichenfolge, die ToolBook verwendet, um nach einer Übereinstimmung in der Indexdatei zu suchen.

Rückgabewert	Der Rückgabewert zeigt das Ergebnis der Suche an:

1	Genaue Übereinstimmung gefunden.
2	Zeichenfolge am Anfang einer längeren Zeichenfolge gefunden.
3	Zeichenfolge nicht gefunden, nächster Schlüssel wird zum aktuellen Schlüssel.
4	Zeichenfolge größer als letzter Schlüssel, letzter Schlüssel wird zum aktuellen
Schlüssel.

Wenn ein Fehler auftritt, gibt diese Funktion folgendes zurück:

0	Interner Fehler aufgetreten.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 10	Der Datensatz war als gelöscht markiert.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 13	Keine aktuelle Indexdatei; verwenden Sie openDBIndexFile() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


firstDBKey
firstDBKey( )
TB30DB3.DLL

Syntax	firstDBKey()

Deklaration	INT firstDBKey()

Beschreibung	Macht den ersten Schlüssel in der aktuellen Indexdatei zum aktuellen Schlüssel und den durch den ersten Schlüssel referenzierten Datensatz zum aktuellen Datensatz. Wenn das Wechseln zu gelöschten Datensätzen deaktiviert ist, überspringt diese Funktion Datensätze, die als gelöscht markiert sind.

Parameter	Keine.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 13	Keine aktuelle Indexdatei; verwenden Sie openDBIndexFile() zuerst.
- 15	Die Datenbank ist leer.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


firstDBRecord
firstDBRecord( )
TB30DB3.DLL

Syntax	firstDBRecord()

Deklaration	INT firstDBRecord()

Beschreibung	Macht den ersten Datensatz in der aktuellen dBASE-Datei zum aktuellen Datensatz. Wenn das Wechseln zu gelöschten Datensätzen deaktiviert ist, überspringt diese Funktion Datensätze, die als gelöscht markiert sind, bis ein ungelöschter Datensatz gefunden wird.

Parameter	Keine.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.

- 10	Datensatz nicht vorhanden; die Datenbank ist leer, oder alle Datensätze sind gelöscht, und Wechseln zu gelöschten Datensätzen ist nicht aktiviert.

- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

--Ersten Datensatz vor einer Schleife durch die Datensätze einlesen

set recordcount to

set It to null

get firstDBRecord()

if It <= 0

send error It, "Abrufen des ersten Datensatzes in der dBASE-Datei"

break buttonClick

end if


freeDBFieldTag
freeDBFieldTag( )
TB30DB3.DLL

Syntax	freeDBFieldTag(<FeldKennzeichnNr>)

Deklaration	INT freeDBFieldTag(WORD)

Beschreibung	Gibt Speicher frei, der für die mit createDBFieldTag() erstellte Feldkennzeichnung verwendet wurde.

Parameter	<FeldKennzeichnNr>	Die Nummer, die beim Erstellen der Kennzeichnung mit createDBFieldTag() zurückgegeben wurde.

Rückgabewert	1	Die Funktion war erfolgreich.
- 7	Die Feldkennzeichnung ist ungültig.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

--Rückgabewert für Kennzeichnungsnummer bestimmen

put createDBFieldTag(noFields) into tagNumber

if tagNumber = 0

request "Fehler beim Erstellen der Feldkennzeichnung"

break

end if

step i from 1 to itemCount(fieldNames)

get setDBFieldTag(tagNumber,i,item i of fieldNames, \

item i of fieldType,item i of fieldWidth,0)

if It <= 0

request "Fehler beim Festlegen der Feldkennzeichnung"

break

end if

end step

get createDBFile(dbFileName,itemCount(fieldNames), \
tagNumber,1)

if It <= 0

request "Fehler beim Erstellen der Datei"

break

end if

get freeDBFieldTag(tagNumber)

if It <= 0

request "Fehler beim Freigeben der Feldkennzeichnung"

break

end if


getDBDateFormat
getDBDateFormat( )
TB30DB3.DLL

Syntax	getDBDateFormat()

Deklaration	STRING getDBDateFormat()

Beschreibung	Bestimmt das Datumsformat, das momentan von der DLL verwendet wird.

Parameter	Keine.

Rückgabewert	Eine Zeichenfolge, die das aktuelle Datumsformat enthält.

Wenn kein Fehler auftritt, gibt getDBDateFormat() den Namen der aktuellen Indexdatei zurück. Andernfalls wird Null zurückgegeben, und sysError wird auf einen der folgenden Werte gesetzt:

- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 20	Nicht genügend Speicher zum Ausführen der Funktion.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


getDBErrorString
getDBErrorString( )
TB30DB3.DLL

Syntax	getDBErrorString(<Fehlercode>)

Deklaration	STRING getDBErrorString(INT)

Beschreibung	Gibt eine Zeichenfolge mit einer Fehlerbeschreibung zurück.

Parameter	<Fehlercode>	Ein numerischer Code, der von einer Funktion in der DLL zurückgegeben wird.

Rückgabewert	Wenn kein Fehler auftritt, gibt getDBErrorString() eine Zeichenfolge zurück, die den Fehler beschreibt. Andernfalls wird Null zurückgegeben, und sysError wird auf einen der folgenden Werte gesetzt:

- 8	Datei, Index oder System ist beschädigt.
- 20	Funktion war aufgrund eines Speichermangels nicht erfolgreich.
- 72	Keine Zeichenfolge für diesen Code.


getDBFieldCount
getDBFieldCount( )
TB30DB3.DLL

Syntax	getDBFieldCount()

Deklaration	INT getDBFieldCount()

Beschreibung	Gibt die Anzahl der Felder in der aktuellen dBASE-Datei zurück.

Parameter	Keine.

Rückgabewert	Wenn kein Fehler auftritt, gibt getDBFieldCount() die Anzahl der Felder in der aktuellen dBASE-Datei zurück. Andernfalls wird folgendes zurückgegeben:

- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

if getDBFieldCount() < 1

send error It, "Abrufen der Feldanzahl in der dBASE-Datei"

end if


getDBFieldName
getDBFieldName( )
TB30DB3.DLL

Syntax	getDBFieldName(<Feldposition>)

Deklaration	STRING getDBFieldName(WORD)

Beschreibung	Gibt den Namen des Feldes der angegebenen Spaltennummer zurück.

Parameter	<Feldposition>	Die Spaltennummer des Feldes in der aktuellen dBASE-Datei.

Rückgabewert	Wenn kein Fehler auftritt, gibt getDBFieldName() den Namen des Feldes in der aktuellen dBASE-Datei zurück. Andernfalls wird Null zurückgegeben, und sysError wird auf einen der folgenden Werte gesetzt:

- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 11	Feld nicht vorhanden.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 20	Funktion war aufgrund eines Speichermangels nicht erfolgreich.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

--Schleife durch die Felder in der dBASE-Datei, um Hintergrund

--des Buches zu erstellen

step i from 1 to numFields

clear sysError

get getDBFieldName(i)

if sysError is not null

send error sysError, "Abrufen des Feldnamens in der dBASE-Datei"

break buttonClick

end if

put It & "," after fldnames	--Feldnamenliste für diese

--Datei erstellen

draw recordField from x,y to 9180,y+360	--Datensatzfeld zeichnen

set name of selection to It	--und benennen

increment y by adv

end step


getDBFieldPrecision
getDBFieldPrecision( )
TB30DB3.DLL

Syntax	getDBFieldPrecision(<Feldname>)

Deklaration	INT getDBFieldPrecision(STRING)

Beschreibung	Gibt die Anzahl der Dezimalstellen für das angegebene numerische Feld zurück.

Parameter	<Feldname>	Der Name des numerischen Feldes.

Rückgabewert	Wenn kein Fehler auftritt, gibt getDBFieldPrecision() die Anzahl der Dezimalstellen für das angegebene numerische Feld zurück. Andernfalls wird folgendes zurückgegeben:

- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 4	Der Feldname ist ungültig.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


getDBFieldType
getDBFieldType( )
TB30DB3.DLL

Syntax	getDBFieldType(<Feldname>)

Deklaration	INT getDBFieldType(STRING)

Beschreibung	Gibt den Feldtyp eines Feldnamens in der aktuellen dBASE-Datei zurück.

Parameter	<Feldname>	Der Name des Feldes, für den der Feldtyp gewünscht wird.

Rückgabewert	Wenn kein Fehler auftritt, gibt getDBFieldType() folgendes zurück:
1	Das Feld enthält Zeichen.
2	Das Feld enthält boolesche Werte.
3	Das Feld enthält Datumswerte.
4	Das Feld enthält numerische Werte.
5	Das Feld enthält einen Memo-Wert.

Wenn ein Fehler auftritt, gibt diese Funktion folgendes zurück:
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 4	Der Feldname ist ungültig.
- 6	Der Feldtyp ist ungültig.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


getDBFieldValue
getDBFieldValue( )
TB30DB3.DLL

Syntax	getDBFieldValue(<Feldname>)

Deklaration	STRING getDBFieldValue(STRING)

Beschreibung	Gibt den Wert des angegebenen Feldes für den aktuellen dBASE-Datensatz und die aktuelle Datei zurück. Verwendet wird der Wert aus dem Datensatzpuffer, d.h. wenn mit setDBFieldValue() Änderungen an dem Feld vorgenommen wurden, aber writeDBRecord() noch nicht aufgerufen wurde, gibt diese Funktion den Wert aus dem Puffer zurück, nicht den Wert in der Datei.

Parameter	<Feldname>	Der Name des Feldes mit dem gewünschten Wert.

Rückgabewert	Wenn kein Fehler auftritt, gibt getDBFieldValue() den Wert des angegebenen Feldes zurück. Andernfalls wird Null zurückgegeben, und sysError wird auf einen der folgenden Werte gesetzt:
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 4	Der Feldname ist ungültig.
- 6	Der Feldtyp ist ungültig.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 20	Funktion war aufgrund eines Speichermangels nicht erfolgreich.
- 23	Beim Lesen einer Memo-Datei trat ein Fehler auf.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

while true

increment recordCount

step i from 1 to totalField

set sysError to null

get getDBFieldValue(item i of fieldNames)

if sysError is not null

send error sysError, "Abrufen des Feldwertes."

break buttonClick

end if

put It into text of recordField (item i of fieldNames)

end step

get nextDBRecord()

if It <= 0

break while

end if

send newPage

end while


getDBFieldWidth
getDBFieldWidth( )
TB30DB3.DLL

Syntax	getDBFieldWidth(<Feldname>)

Deklaration	INT getDBFieldWidth(STRING)

Beschreibung	Gibt die Breite des angegebene Feldes im aktuellen dBASE-Datensatz und in der aktuellen Datei zurück.

Parameter	<Feldname>	Der Name des Feldes mit der gewünschten Breite.

Rückgabewert	Wenn kein Fehler auftritt, gibt getDBFieldWidth() die Breite des angegebenen Feldes im aktuellen dBASE-Datensatz und in der aktuellen Datei in Zeichen zurück. Andernfalls wird folgendes zurückgegeben:
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 4	Der Feldname ist ungültig.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


getDBFileName
getDBFileName( )
TB30DB3.DLL

Syntax	getDBFileName()

Deklaration	STRING getDBFileName()

Beschreibung	Gibt den Namen der aktuellen dBASE-Datei zurück.

Parameter	Keine.

Rückgabewert	Wenn kein Fehler auftritt, gibt getDBFileName() den Pfad und Dateinamen der aktuellen dBASE-Datei zurück. Andernfalls wird Null zurückgegeben, und sysError wird auf einen der folgenden Werte gesetzt:
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 20	Funktion war aufgrund eines Speichermangels nicht erfolgreich.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


getDBIndexExpression
getDBIndexExpression( )
TB30DB3.DLL

Syntax	getDBIndexExpression()

Deklaration	STRING getDBIndexExpression()

Beschreibung	Gibt den Ausdruck zurück, der verwendet wird, um die Schlüssel der aktuellen Indexdatei für die aktuelle dBASE-Datei zu bilden.

Parameter	Keine.

Rückgabewert	Wenn kein Fehler auftritt, gibt getDBIndexExpression() den Ausdruck zurück, der verwendet wird, um die Schlüssel der aktuellen Indexdatei für die aktuelle dBASE-Datei zu bilden. Andernfalls wird Null zurückgegeben, und sysError wird auf einen der folgenden Werte gesetzt:
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 13	Keine aktuelle Indexdatei; verwenden Sie openDBIndexFile() zuerst.
- 20	Funktion war aufgrund eines Speichermangels nicht erfolgreich.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


getDBIndexFileName
getDBIndexFileName( )
TB30DB3.DLL

Syntax	getDBIndexFileName()

Deklaration	STRING getDBIndexFileName()

Beschreibung	Gibt den Namen der momentan ausgewählten Indexdatei zurück.

Parameter	Keine.

Rückgabewert	Wenn kein Fehler auftritt, gibt getDBIndexFileName() den Namen der aktuellen Indexdatei zurück. Andernfalls wird Null zurückgegeben, und sysError wird auf einen der folgenden Werte gesetzt:
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 13	Keine aktuelle Indexdatei; verwenden Sie openDBIndexFile() zuerst.
- 20	Funktion war aufgrund eines Speichermangels nicht erfolgreich.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


getDBKeyType
getDBKeyType( )
TB30DB3.DLL

Syntax	getDBKeyType()

Deklaration	INT getDBKeyType()

Beschreibung	Gibt den Typ des aktuellen Schlüssels in der aktuellen Indexdatei zurück.

Parameter	Keine.

Rückgabewert	Wenn kein Fehler auftritt, gibt getDBKeyType() einen von drei möglichen Werten für den Typ des aktuellen Schlüssels zurück:
1	Der aktuelle Schlüssel enthält Zeichen.
3	Der aktuelle Schlüssel enthält einen Datumswert.
4	Der aktuelle Schlüssel enthält einen numerischen Wert.

Andernfalls wird Null zurückgegeben, und sysError wird auf einen der folgenden Werte gesetzt:
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 13	Keine aktuelle Indexdatei; verwenden Sie openDBIndexFile() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden.


getDBKeyValue
getDBKeyValue( )
TB30DB3.DLL

Syntax	getDBKeyValue()

Deklaration	STRING getDBKeyValue()

Beschreibung	Gibt den Wert des aktuellen Schlüssels für die aktuelle Indexdatei zurück.

Parameter	Keine.

Rückgabewert	Wenn kein Fehler auftritt, gibt getDBKeyValue() den Wert des aktuellen Schlüssels für die aktuelle Indexdatei zurück. Andernfalls wird Null zurückgegeben, und sysError wird auf einen der folgenden Werte gesetzt:
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 13	Keine aktuelle Indexdatei; verwenden Sie openDBIndexFile() zuerst.
- 14	Kein aktueller Schlüssel; verwenden Sie eine Funktion wie firstDBKey()
zuerst.
- 20	Funktion war aufgrund eines Speichermangels nicht erfolgreich.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden.


getDBNavigateToDeleted
getDBNavigateToDeleted( )
TB30DB3.DLL

Syntax	getDBNavigateToDeleted()

Deklaration	INT getDBNavigateToDeleted()

Beschreibung	Gibt den Zustand des Schalters zurück, der die Bewegung durch Datensätze steuert, die als gelöscht markiert sind. Dieser Schalter ist standardmäßig ausgeschaltet, d.h. bei einem normalen Wechsel von Datensatz zu Datensatz werden gelöschte Datensätze übersprungen. Die Datensätze werden erst dann tatsächlich aus der Datei entfernt, wenn diese mit packDBFile() komprimiert wird. Sie schalten den Schalter ein, indem Sie setDBNavigateToDeleted() verwenden.

Parameter	Keine.

Rückgabewert	0	Wechsel zu gelöschten Datensätzen ist deaktiviert.
1	Wechsel zu gelöschten Datensätzen ist aktiviert.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

request "Wechsel zu gelöschten Datensätzen möglich?" with "Nein" or \

"Ja"

if It is "Ja"

get setDBNavigateToDeleted(1)

else

get setDBNavigateToDeleted(0)

end


getDBRecordCount
getDBRecordCount( )
TB30DB3.DLL

Syntax	getDBRecordCount()

Deklaration	LONG getDBRecordCount()

Beschreibung	Gibt die Anzahl der Datensätze in der aktuellen dBASE-Datei zurück.

Parameter	Keine.

Rückgabewert	Wenn kein Fehler auftritt, gibt getDBRecordCount() die Anzahl der Datensätze in der aktuellen dBASE-Datei zurück. Andernfalls wird folgendes zurückgegeben:
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

to handle recordCount

get getDBRecordCount()

if It <= 0

send error It, "Abrufen der Datensatzanzahl in der dBASE-Datei"

break recordCount

end if

put It into totalRecords

while true

increment recordCount

step i from 1 to totalFields

set sysError to null

get getDBFieldValue(item i of fieldNames)

if sysError is not null

send error sysError, "Fehler beim Abrufen des Feldwertes"

break recordCount

end if

put It into text of recordField(item i of fieldNames)

end step

set It to null 	--Nächsten Datensatz lesen

get nextDBRecord()

if It <= 0

if recordCount < totalRecords

request "Nur " & recordCount & \

" von " & totalRecords & " Datensätzen verarbeitet"

end if

break while

end if

end while

end recordCount


getDBRecordDeleted
getDBRecordDeleted( )
TB30DB3.DLL

Syntax	getDBRecordDeleted()

Deklaration	INT getDBRecordDeleted()

Beschreibung	Bestimmt, ob der aktuelle Datensatz zum Löschen markiert ist.

Parameter	Keine.

Rückgabewert	1	Der aktuelle Datensatz ist zum Löschen markiert.
0	Der aktuelle Datensatz ist nicht zum Löschen markiert.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 32	Kein aktueller Datensatz.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


getDBRecordNumber
getDBRecordNumber( )
TB30DB3.DLL

Syntax	getDBRecordNumber()

Deklaration	LONG getDBRecordNumber()

Beschreibung	Gibt die Nummer des aktuellen Datensatzes zurück.

Parameter	Keine.

Rückgabewert	Wenn kein Fehler auftritt, gibt getDBRecordNumber() die Nummer des aktuellen Datensatzes zurück. Andernfalls wird folgendes zurückgegeben:
0	Kein aktueller Datensatz.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.


gotoDBRecord
gotoDBRecord( )
TB30DB3.DLL

Syntax	gotoDBRecord(<Datensatznummer>)

Deklaration	INT gotoDBRecord(DWORD)

Beschreibung	Wechselt zur angegebenen Datensatznummer in der Datendatei und macht den zugehörigen Datensatz zum aktuellen Datensatz.

Parameter	<Datensatznummer>	Die Nummer des Datensatzes, der zum aktuellen Datensatz werden soll.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 10	Datensatz nicht vorhanden.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.

- 87	Der Datensatz war als gelöscht markiert, und der Wechsel zu gelöschten Datensätzen ist deaktiviert; siehe getDBNavigateToDeleted().

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


lastDBKey
lastDBKey( )
TB30DB3.DLL

Syntax	lastDBKey()

Deklaration	INT lastDBKey()

Beschreibung	Macht den letzten Schlüssel in der aktuellen Indexdatei zum aktuellen Schlüssel und den durch den letzten Schlüssel referenzierten Datensatz zum aktuellen Datensatz. Wenn der Wechsel zu gelöschten Datensätzen nicht aktiviert ist, überspringt diese Funktion Datensätze, die als gelöscht markiert sind.

Parameter	Keine.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 13	Keine aktuelle Indexdatei; verwenden Sie openDBIndexFile() zuerst.
- 15	Die Datenbank ist leer.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


lastDBRecord
lastDBRecord( )
TB30DB3.DLL

Syntax	lastDBRecord()

Deklaration	INT lastDBRecord()

Beschreibung	Macht den letzten Datensatz in der aktuellen dBASE-Datei zum aktuellen Datensatz. Wenn der letzte Datensatz als gelöscht markiert und der Wechsel zu gelöschten Datensätzen nicht aktiviert ist, wird der letzte ungelöschte Datensatz zum aktuellen Datensatz.

Parameter	Keine.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.

- 10	Datensatz nicht vorhanden; Die Datenbank ist leer, oder alle Datensätze sind gelöscht, und der Wechsel zu gelöschten Datensätzen ist deaktiviert.

- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


nextDBRecord
nextDBRecord( )
TB30DB3.DLL

Syntax	nextDBRecord()

Deklaration	INT nextDBRecord()

Beschreibung	Macht den nächsten Datensatz in der aktuellen dBASE-Datei zum aktuellen Datensatz. Wenn der Wechsel zu gelöschten Datensätzen nicht aktiviert ist, überspringt diese Funktion Datensätze, die als gelöscht markiert sind.

Parameter	Keine.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 10	Datensatz nicht vorhanden (aktueller Datensatz ist letzter Datensatz).
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

get nextDBRecord()

if It <= 0

if recordCount < totalRecords

request "Nur" && recordCount &&\

"von" && totalRecords && "Datensätzen verarbeitet"

end

end


openDBFile
openDBFile( )
TB30DB3.DLL

Syntax	openDBFile(<Dateiname>)

Deklaration	INT openDBFile(STRING)

Beschreibung	Öffnet und initialisiert die angegebene Datei und macht sie zur aktuellen dBASE-Datei.

Parameter	<Dateiname>	Der Name der zu öffnenden dBASE-Datei.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 36	Datei konnte nicht geöffnet werden.
- 88	Ein Memo-Feld existiert, aber die Memo-Datei konnte nicht geöffnet werden.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

ask "Name der zu öffnenden dBASE-Datei?"

put It into text of field "dBASEFileName"

get openDBFile(text of field "dBASEFileName")

if It <> 1

send error It, "Fehler beim Öffnen der dBASE-Datei"

break

end if


openDBIndexFile
openDBIndexFile( )
TB30DB3.DLL

Syntax	openDBIndexFile(<Dateiname>)

Deklaration	INT openDBIndexFile(STRING)

Beschreibung	Öffnet die angegebene Indexdatei und macht sie zur aktuellen Indexdatei für die aktuelle dBASE-Datei. Der erste logische Datensatz in der durch den Index definierten Reihenfolge wird zum aktuellen Datensatz.

Parameter	<Dateiname>	Der Name der Indexdatei, die für die aktuelle dBASE-Datei geöffnet werden soll.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


previousDBKey
previousDBKey( )
TB30DB3.DLL

Syntax	previousDBKey()

Deklaration	INT previousDBKey()

Beschreibung	Macht den Schlüssel vor dem aktuellen Schlüssel in der aktuellen Indexdatei zum aktuellen Schlüssel. Wenn der Wechsel zu gelöschten Datensätzen nicht aktiviert ist, überspringt diese Funktion Datensätze, die als gelöscht markiert sind.

Parameter	Keine.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 13	Keine aktuelle Indexdatei; verwenden Sie openDBIndexFile() zuerst.
- 71	Der Schlüssel war bereits der erste Schlüssel.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


previousDBRecord
previousDBRecord( )
TB30DB3.DLL

Syntax	previousDBRecord()

Deklaration	INT previousDBRecord()

Beschreibung	Macht den Datensatz vor dem aktuellen Datensatz in der aktuellen dBASE-Datei zum aktuellen Datensatz. Wenn der aktuelle Datensatz der erste Datensatz ist, bleibt er der aktuelle Datensatz. Wenn der Wechsel zu gelöschten Datensätzen nicht aktiviert ist, überspringt diese Funktion Datensätze, die als gelöscht markiert sind.

Parameter	Keine.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 10	Datensatz nicht vorhanden; der aktuelle Datensatz ist der erste Datensatz.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

--Datensatzzeiger zurücksetzen

step i from 1 to 100

get previousDBRecord()

end step

send displayRecord


reindexDBFile
reindexDBFile( )
TB30DB3.DLL

Syntax	reindexDBFile(<Dateiname>)

Deklaration	INT reindexDBFile(STRING)

Beschreibung	Indiziert die angegebene Indexdatei neu. Die mit der Indexdatei verbundene Datendatei muß vor dem Funktionsaufruf geöffnet sein. Nach dem Abschluß der Indizierung wird die angegebene Indexdatei zum aktuellen Index.

Parameter	<Dateiname>	Der Name der Indexdatei, die neu indiziert werden soll.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 53	Keine Indexdatei mit dem angegebenen Namen.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


removeDBRecords
removeDBRecords( )
TB30DB3.DLL

Syntax	removeDBRecords(<ErsterDS>,<LetzterDS>)

Deklaration	INT removeDBRecords(DWORD,DWORD)

Beschreibung	Entfernt aus der aktuellen dBASE-Datei die Datensätze im angegebenen Bereich (erster und letzter eingeschlossen).

Parameter	<ErsterDS>	Der erste Datensatz aus dem Bereich der zu löschenden Datensätze.

<LetzterDS>	Der letzte Datensatz aus dem Bereich der zu löschenden Datensätze. Wenn Sie nur einen Datensatz löschen möchten, geben Sie die zugehörige Datensatznummer sowohl für <ErsterDS> als auch für <LetzterDS> an.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


nextDBKey
nextDBKey( )
TB30DB3.DLL

Syntax	nextDBKey()

Deklaration	INT nextDBKey()

Beschreibung	Macht den nächsten Schlüssel in der aktuellen Indexdatei zum aktuellen Schlüssel und den durch diesen Schlüssel referenzierten Datensatz zum aktuellen Datensatz. Wenn der aktuelle Schlüssel der letzte Schlüssel ist, bleibt er der aktuelle Schlüssel. Wenn der Wechsel zu gelöschten Datensätzen nicht aktiviert ist, überspringt diese Funktion Datensätze, die als gelöscht markiert sind.

Parameter	Keine.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 13	Keine aktuelle Indexdatei; verwenden Sie openDBIndexFile() zuerst.
- 70	Der Schlüssel ist der letzte Schlüssel.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


selectDBFile
selectDBFile( )
TB30DB3.DLL

Syntax	selectDBFile(<Dateiname>)

Deklaration	INT selectDBFile(STRING)

Beschreibung	Macht die angegebene Datei zur aktuellen dBASE-Datei. Diese Funktion öffnet die Datei, sofern sie nicht bereits geöffnet ist. Wenn die dBASE-Datei bereits geöffnet und mit einer Indexdatei verbunden ist, wird diese zur aktuellen Indexdatei.

Parameter	<Dateiname>	Der Name der Datei, die die aktuelle dBASE-Datei werden soll.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 28	Keine dBASE-Datei mit dem angegebenen Namen.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


selectDBIndexFile
selectDBIndexFile( )
TB30DB3.DLL

Syntax	selectDBIndexFile(<Dateiname>)

Deklaration	INT selectDBIndexFile(STRING)

Beschreibung	Macht die angegebene Indexdatei zur aktuellen Indexdatei und verwendet diese, um sich in der aktuellen dBASE-Datei zu bewegen.

Parameter	<Dateiname>	Der Name der auszuwählenden Indexdatei.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 53	Keine Indexdatei mit dem angegebenen Namen.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


packDBFile
packDBFile( )
TB30DB3.DLL

Syntax	packDBFile()

Deklaration	INT packDBFile()

Beschreibung	Komprimiert die aktuelle dBASE-Datei durch Zurückfordern von Speicher, der durch Datensätze belegt ist, die zum Löschen markiert sind. Nach dem Komprimieren der Datei ist der aktuelle Datensatz der letzte Datensatz in der Datendatei.

Parameter	Keine.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 31	Die dBASE-Datei ist möglicherweise beschädigt.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


writeDBRecord
writeDBRecord( )
TB30DB3.DLL

Syntax	writeDBRecord(<Datensatznummer>)

Deklaration	INT writeDBRecord(DWORD)

Beschreibung	Schreibt den Inhalt des Datensatzpuffers in den angegebenen Datensatz und aktualisiert alle geöffneten Indexdateien. Der Inhalt des Datensatzpuffers wird mit setDBFieldValue() festgelegt.

Parameter	<Datensatznummer>	Die Nummer des Datensatzes, in den der Inhalt des Datensatzpuffers geschrieben werden soll. Wenn <Datensatznummer> den Wert 0 hat, wird der aktuelle Datensatz mit dem Inhalt des Datensatzpuffers aktualisiert. Wenn <Datensatznummer> eine Datensatznummer anzeigt, für die kein Datensatz mehr in der dBASE-Datei existiert, fügt ToolBook einen neuen Datensatz an, der den Inhalt des Datensatzpuffers enthält. Wenn <Datensatznummer> einen Datensatz angibt, der bereits Daten enthält, überschreibt writeDBRecord() den Inhalt dieses Datensatzes.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 9	Die Funktion war aufgrund eines mehrfachen Schlüssels nicht erfolgreich.
- 12	Keine aktuelle dBASE-Datei.
- 79	Der Datensatz war als gelöscht markiert: Schreiboperation nicht zulässig.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

get writeDBRecord(totRecs + 1)

if It <> 1

send error It, "Fehler beim Schreiben eines dBASE-Datensatzes"

break

end if

increment totRecs


setDBDateFormat
setDBDateFormat( )
TB30DB3.DLL

Syntax	setDBDateFormat(<FormatZF>)

Deklaration	INT setDBDateFormat(STRING)

Beschreibung	Legt das Datumsformat fest, das bei Transaktionen über die DLL verwendet werden soll.

Parameter	<FormatZF>	Eine beliebige Zeichenfolge, die ein gültiges dBASE-Datumsformat angibt. Das angegebene Datumsformat ist eine optische Darstellung des Datums.
Ein Beispiel:
YY.MM.DD
CCYY.MM.DD
MM/DD/YY
DD-MM/YY
DD-MM/CCYY
MMM DD/YY

Y, M und D geben jeweils das Jahr, den Monat und den Tag an. Bei mehr als zwei M-Zeichen wird eine Textdarstellung des Monats verwendet. Das Standard-Datumsformat ist MM/DD/YY (Monat/Tag/Jahr)///Rick, please chk if the format is localized///.

Rückgabewert	1	Die Funktion war erfolgreich (auch wenn die Zeichenfolge für das Datumsformat
selbst ungültig war).
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


setDBFieldTag
setDBFieldTag( )
TB30DB3.DLL

Syntax	setDBFieldTag(<FeldKennzeichnNr>,<Feldelement>,<Feldname>, \
<Feldtyp>,<Feldbreite>,<DezStellen>)

Deklaration	INT setDBFieldTag(WORD,WORD,STRING,STRING,WORD,WORD)

Beschreibung	Legt das angegebene Feld in der angegebenen Feldkennzeichnung auf die angegebenen Werte für Feldname, -typ, -breite und Anzahl der Dezimalstellen fest. Mit dieser Funktion können Sie Informationen für mehrere Felder angeben, indem Sie die Funktion mehrmals für weitere Felder aufrufen, die dieselbe Kennzeichnungsnummer haben.

Parameter	<FeldKennzeichnNr>	Die von createDBFieldTag() zurückgegebene Nummer.

<Feldelement>	Die Nummer des festzulegenden Feldes. Genaue Informationen zum Festlegen der Feldanzahl in einer Feldkennzeichnung finden Sie unter createDBFieldTag().

<Feldname>	Der Name des Feldes (mit maximal 10 Zeichen).

<Feldtyp>	Der Feldtyp. Zulässige Werte sind:

Wert	dBASE-Feldtyp

"1", "c" oder "C"	Character (Zeichen)

"2", "l" oder "L"	Logical (Boolescher Wert)

"3", "d" oder "D"	Date (Datum)

"4","n" oder "N" 	Numeric (Numerischer Wert)

"5", "m" oder "N"	Memo

Wenn <Feldtyp> Zeichen ergibt, müssen Sie mit <Feldbreite> eine Feldbreite angeben. Wenn <Feldtyp> ein Datum oder ein Memo-Feld ergibt, müssen Sie keine Feldbreite angeben. Wenn <Feldtyp> einen numerischen Wert ergibt, müssen Sie eine Feldbreite sowie die Anzahl der Dezimalstellen mit <DezStellen> angeben.

<Feldbreite>	Eine Ganzzahl, die die Breite des Feldes anzeigt. Wenn dieser Parameter <= 0 für ein Zeichenfeld ist, hat <Feldbreite> die Voreinstellung 254. Wenn dieser Parameter <= 0 für ein numerisches Feld ist, hat <Feldbreite> die Voreinstellung 10. Die maximale Breite für ein numerisches Feld beträgt 19. Wenn der Feldtyp ein Memo-Feld, Datum oder boolescher Wert ist, wird dieser Parameter ignoriert.

<DezStellen>	Die Anzahl der Dezimalstellen in einem numerischen Feld (wird für andere Feldtypen ignoriert). Wenn <DezStellen> für ein numerisches Feld den Wert 0 hat, wird der Inhalt des Feldes als Ganzzahl interpretiert. Ist der Wert größer als 0, so muß er kleiner oder gleich <Feldbreite> - 2 sein. Ist <DezStellen> negativ, größer als 15 oder größer als <Feldbreite> - 2, so gibt die Funktion einen Fehler zurück.

Rückgabewert	1	Die Funktion war erfolgreich.
- 6	Der Feldtyp ist ungültig.
- 7	Die Feldkennzeichnung ist ungültig.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

step i from 1 to itemCount(fieldNames)

get setDBFieldTag(tagNumber,i,item i of fieldNames, \

item i of fieldType,item i of fieldWidth,0)

if It <= 0

request "Fehler beim Festlegen der Feldkennzeichnung"

break

end if

end step


setDBFieldValue
setDBFieldValue( )
TB30DB3.DLL

Syntax	setDBFieldValue(<Feldname>,<neuer Wert>)

Deklaration	INT setDBFieldValue(STRING,STRING)

Beschreibung	Legt den Inhalt des angegebenen Feldes im aktuellen Datensatz auf den angegebenen neuen Wert fest. Änderungen an Feldwerten, die mit dieser Funktion vorgenommen wurden, werden im Datensatzpuffer gespeichert, bis sie writeDBRecord() aufrufen.

Parameter	<Feldname>	Der Name des Feldes, dessen Wert geändert werden soll.

<neuer Wert>	Der neue Wert für das angegebene Feld.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 4	Der Feldname ist ungültig.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 26	Ein Memo-Feld konnte nicht geschrieben werden.
- 32	Kein aktueller Datensatz.
- 60	Das Datum ist für ein Datumsfeld ungültig.
- 62	Die Daten sind für den Feldtyp ungültig.
- 73	Der Text ist für das Feld zu lang.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.

Beispiel

if setDBFieldValue(textline j of text of field "sname",l) <> 1

increment totInval

end if


setDBNavigateToDeleted
setDBNavigateToDeleted( )
TB30DB3.DLL

Syntax	setDBNavigateToDeleted(<Option>)

Deklaration	INT setDBNavigateToDeleted(INT)

Beschreibung	Schaltet einen Schalter ein, der den Wechsel zu Datensätzen ermöglicht, die zum Löschen markiert sind.

Parameter	<Option>	0 schaltet den Wechsel zu gelöschten Datensätzen aus, 1 schaltet ihn ein. Die Voreinstellung ist 0.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


setDBRecordDeleted
setDBRecordDeleted( )
TB30DB3.DLL

Syntax	setDBRecordDeleted(<Löschwert>)

Deklaration	INT setDBRecordDeleted(WORD)

Beschreibung	Markiert den aktuellen Datensatz zum Löschen.

Parameter	<Löschwert>	Bestimmt, ob der aktuelle Datensatz zum Löschen markiert ist. Ist dieser Wert >= 1, so wird der Datensatz zum Löschen markiert. Ist der Wert <= 0, so entfernt diese Funktion die Markierung, die anzeigt, daß der Datensatz gelöscht werden soll.

Rückgabewert	1	Die Funktion war erfolgreich.
- 3	Zu viele Clients für diese DLL oder nicht genügend Speicher.
- 8	Datei, Index oder System ist beschädigt.
- 12	Keine aktuelle dBASE-Datei; verwenden Sie openDBFile() zuerst.
- 32	Kein aktueller Datensatz; verwenden Sie eine Funktion wie firstDBRecord() zuerst.

Bei anderen negativen Rückgabewerten müssen Sie getDBErrorString() verwenden, um eine Erklärung zum Fehler zu erhalten.


Verwenden des Paradox-Moduls
Paradox-Übersicht

Das Paradox-Modul ist eine Gruppe von Funktionen zur Durchführung von Operationen auf Daten -- z.B. Erstellen, Öffnen und Schließen von Tabellen oder Lesen und Schreiben von Daten -- im Paradox-Manager für relationale Datenbanken. Die ToolBook-DLL TB30PDX.DLL enthält Funktionen, mit denen Sie das Paradox-Modul bei der Durchführung von Datenbankoperationen steuern können. Sie können mit Tabellen arbeiten, die mit dem Datenbank-Manager von Paradox erstellt wurden, oder Sie können eigene Tabellen erstellen.

Speicherung von Daten

Daten werden in Tabellen gespeichert, und zwar eine Tabelle pro Datei. Eine Tabelle enthält einen oder mehrere Datensätze. Jeder Datensatz enthält ein oder mehrere Felder. Ein Feld kann alphabetische oder numerische Daten enthalten.

Binary Large Objects (BLOBs)

Ein BLOB ist ein Block binärer Daten (z.B. eine Grafik, ein Video-Clip oder ein Klang) oder ein Block von Textdaten, der mehr als 255 Bytes umfaßt. BLOBs werden in einer separaten Datei gespeichert. Die Zugriffsnummer auf das BLOB wird in einem Feld der Tabelle gespeichert.

Indizes

Tabellen können, im Gegensatz zu BLOBs, über ein beliebiges Feld oder eine beliebige Feldkombination indiziert werden. Ein BLOB-Feld kann nicht für den Index verwendet werden. Für eine Tabelle können beliebig viele Indizes verwendet werden (von denen Sie aber jeweils nur mit einem Index arbeiten können).

Verschieben von Daten

Aus logischer Sicht werden Daten mit Hilfe eines Übertragungspuffers in und aus Tabellen verschoben. Funktionen aus TB30PDX.DLL zum Lesen und Schreiben von Daten übernehmen das Verschieben der Daten in den Puffer und aus dem Puffer, d.h. Sie müssen sich nicht selbst darum kümmern. Wenn Sie einen Wert in ein Feld schreiben möchten, wechseln Sie zu dem Datensatz, in den der Wert geschrieben werden soll. Dann legen Sie den Wert für das Feld im Datensatz fest und aktualisieren den Datensatz in der Datenbanktabelle.

Physisch gesehen, werden Daten in Blöcken mit Hilfe eines Auslagerungspuffers (Cache) verschoben. Das Modul nimmt alle Datenverschiebungen automatisch vor, Sie können die Operationen allerdings auch selbst steuern.


Spezifikationen

Regeln zur Benennung

Datentypen

Initialisierung

Arbeiten mit Tabellen

Arbeiten mit Datensätzen

Arbeiten mit Feldern

Arbeiten mit BLOBs

Indizieren und Suchen

Gemeinsamer Zugriff auf Tabellen durch mehrere Benutzer

Fehlermeldungen


Spezifikationen
Paradox-Übersicht

Maximale Tabellengröße	256 MB
Maximale Anzahl Datensätze pro Tabelle	Gesamtgröße höchstens 256 MB
Maximale Anzahl Bytes pro Datensatz	4000 für nicht-indizierte Tabellen
	1350 für indizierte Tabellen
Maximale Anzahl Felder pro Datensatz	255
Maximale Feldgröße in der Tabelle	255 Zeichen
Maximale Größe eines BLOBs	256 MB
Maximale Größe der BLOB-Datei	256 MB
Maximale Anzahl Felder in einem zusammengesetzten Index	16
Maximale Anzahl Kennwörter	50
Maximale Kennwortlänge	15 Zeichen
Maximale Feldnamenlänge	25 Zeichen
Maximale Tabellennamenlänge	128 Zeichen


Regeln zur Benennung
Paradox-Übersicht

Tabellen

Die zugrundeliegende Datenbanktabelle (Basistabelle) ist eine DOS-Datei mit der Erweiterung .DB. Ihr Name muß den Standardkonventionen zur Benennung unter DOS entsprechen.

Wenn Index- und BLOB-Dateien mit der Basistabelle verbunden sind, erhalten sie denselben Namen mit unterschiedlichen Erweiterungen. BLOB-Dateien haben die Dateinamenerweiterung .MB.

Primärindizes haben die Erweiterung .PX. Sekundärindizes haben die Erweiterung .Xnn oder .Ynn, wobei nn eine vom Modul bereitgestellte Nummer ist.

Felder

Höchstens 25 Zeichen

Der Name kann Leerzeichen enthalten, darf aber nicht mit einem Leerzeichen beginnen

Der Name kann alle darstellbaren Zeichen außer Anführungszeichen ("), eckigen Klammern ([ ]), geschweiften Klammern ({ }), Nummernzeichen (#), linken oder rechten runden Klammern ( ) oder der Zeichenkombination -> enthalten.

Der Name darf nicht mit einem anderen Feldnamen in derselben Tabelle übereinstimmen


Datentypen
Datentypen///falsch in US///
Paradox-Übersicht

Fünf Feldtypen

Alphanumerisch (A)	Sämtliche ASCII-Zeichen außer der eingebetteten Null (ASCII 0). Maximale Länge 255 Zeichen Für jedes Zeichen wird ein Byte benötigt
Numerisch (N)	15 signifikante Ziffern (einschließlich Dezimalzeichen). Zahlen mit über 15 signifikanten Ziffern werden gerundet und in der wissenschaftlichen Schreibweise gespeichert. Reelle Zahlen von ±10 ^ -307 bis ±10 ^ 308 Für jedes Feld werden 8 Bytes benötigt
Währung ($)	15 signifikante Ziffern (einschließlich Dezimalzeichen) Reelle Zahlen von ±10 ^ -307 bis ±10 ^ 308 Es werden 8 Bytes benötigt Die Formatierung entspricht dem in der Windows-Systemsteuerung ausgewählten Währungsformat
Kurze Zahl (S)	Vorzeichenbehaftete Ganzzahlen von -32.767 bis 32.767 Es werden 2 Bytes benötigt
Datum (D)	Jedes gültige Datum vom 1. Januar 1 bis zum 31. Dezember 9999 Paradox speichert das Datum als Ganzzahl mit 4 Bytes, die der Anzahl der Tage seit dem 1. Januar 1 entspricht.
Drei BLOB-Typen

Memo (M)	Unformatierter Text
Binär (B)	Unstrukturierte binäre Daten (beliebige Daten wie Bit-Muster und Klänge)
Grafik (G)	Windows .DIB-Bitmaps


Initialisierung
Paradox-Übersicht

Bevor Sie das Paradox-Modul verwenden können, müssen Sie es durch Aufrufen von initializePX() initialisieren. Das Aufrufen von initializePX() setzt die folgenden Parameter auf ihre Standardwerte. Wenn Sie einen dieser Parameter auf einen anderen Wert setzen möchten, rufen Sie die entsprechende Funktion aus der folgenden Liste auf, bevor Sie initializePX() aufrufen.

Standardwert

Parameter	Beschreibung	(Bereich)	Änderung durch

Größe des Auslagerungspuffers	Menge des verfügbaren Speichers zum Auslagern und Wiedereinlesen von Daten aus und in den Hauptspeicher. Jede Tabelle benötigt 4 KB. Zusätzlich reservierter Speicher vermeidet Zugriffe auf den Datenträger, aber wenn zu viel Speicher reserviert wird, steht möglicherweise kein Speicher mehr für das Programm zur Verfügung.	32 KB (8 KB - 256 KB)	setPXINISwapSize()
Max. Anzahl Datei-Zugriffsnummern	Maximale Anzahl an Dateizugriffsnummern, die dem Modul zur Verfügung stehen.	10 (3 - 255)	getPXMaxFiles()
Max. Anzahl Tabellen	Maximale Anzahl an Tabellen, die gleichzeitig geöffnet werden können.	5 (1 - 64)	setPXINIMaxTables()
Max. Anzahl Sperren	Maximale Anzahl an Sperren pro Tabelle	32 (1 - 128)	setPXINIMaxLocks()
Sortier-reihenfolge	Die zu verwendende Art der Sortierung.	ASCII (siehe Funktionsbeschreibung)	setPXSortOrder()


Maximale Tabellen- und Blockgröße

Initialisierungs- und Endfunktionen

Modul-Voreinstellungen


Maximale Tabellen- und Blockgröße
Paradox-Übersicht

Die maximale Tabellengröße entspricht der Speichermenge, die eine Tabelle maximal belegen kann. Die Blockgröße ist die Datenmenge, die zu einem bestimmten Zeitpunkt in den bzw. aus dem Auslagerungspuffer verschoben wird. (Die Puffergröße kann von 8 bis 256 KB reichen; die Voreinstellung beträgt 32 KB.)

Die Blockgröße wird durch die maximale Tabellengröße bestimmt. Die Voreinstellung entspricht einer Blockgröße von 2 KB und einer maximalen Tabellengröße von 128 MB. Durch Aufrufen von setPXTableMaxSize() können Sie eine der folgenden Kombinationen auswählen:

Maximale Tabellengröße	Blockgröße

64 MB	1 KB

128 MB	2 KB

256 MB	4 KB


Arbeiten mit Tabellen
Paradox-Übersicht

Erstellen von Tabellen

Rufen Sie zum Erstellen einer Tabelle die Funktion createPXTable() auf, und übergeben Sie ihr den Tabellennamen, eine Liste der 1 bis 255 Feldnamen sowie eine Liste der entsprechenden Feldtypen und -größen.

Warnung

Falls bereits eine Tabelle mit demselben Namen im selben Verzeichnis vorhanden und nicht geöffnet ist, wird sie (und alle damit verbundenen BLOB- und Indexdateien) ohne Warnung gelöscht. Bevor Sie eine Tabelle erstellen, überprüfen Sie mit doesPXTableExist(), ob bereits eine Tabelle mit demselben Namen vorhanden ist.

Als Voreinstellung erstellt das Modul eine Tabelle im Format von Paradox 4.0. Wenn Sie eine Tabelle im Format von Paradox 3.5 erstellen möchten, rufen Sie zuerst setPXTableCreateMode() auf. Das Argument für die Funktion gibt die Art des zu verwendenden Formats an. Alle folgenden mit createPXTable() erstellten Tabellen haben das angegebene Format, bis Sie erneut setPXTableCreateMode() aufrufen und den Modus ändern. (Beim Initialisieren des Moduls wird der Modus zum Erstellen auf die Voreinstellung zurückgesetzt.)

Durch Aufrufen von setPXTableMaxSize() vor dem Aufrufen von createPXTable() können Sie eine Maximalgröße für eine Tabelle festlegen. Alle folgenden mit createPXTable() erstellten Tabellen sind auf diese Größe beschränkt, bis Sie erneut setPXTableCreateMode() aufrufen, um die Größenbeschränkung zu ändern.

Nach dem Erstellen einer Tabelle müssen Sie sie öffnen, bevor Sie damit arbeiten können.


Öffnen einer Tabelle

Schließen einer Tabelle

Löschen einer Tabelle

Operationen zum Abrufen von Tabelleninformationen

Andere Tabellenoperationen

Tabellenfunktionen


Öffnen einer Tabelle
Paradox-Übersicht

Rufen Sie openPXTable() auf, um eine Tabelle zu öffnen. Folgende Argumente sind für die Funktion verfügbar:

Ein Alias, der der Tabelle für weiteren Zugriff zugewiesen wird.

Der Dateiname der Tabelle (ohne Erweiterung).

Die Zugriffsnummer des Indexes, der zum Sortieren von Datensätzen verwendet werden soll. Verwenden Sie 0, wenn Sie keinen Index für die Tabelle erstellt haben.

Der Modus zum Speichern von Änderungen.

Falls ein Index für die Tabelle vorhanden ist, werden die Datensätze in der Reihenfolge des Indexes angezeigt. Andernfalls werden sie in der Reihenfolge angezeigt, in der sie in die Tabelle eingegeben wurden. Sie können dieselbe Tabelle mehrmals mit verschiedenen Indizes öffnen, um unterschiedliche Ansichten der Datensätze zu erhalten.


Schließen einer Tabelle
Paradox-Übersicht

Rufen Sie closePXTable() auf, um eine Tabelle zu schließen. Geben Sie den Alias der zu schließenden Tabelle an.

Wenn Sie vor dem Beenden der Anwendung nicht alle Tabellen schließen, schließt die DLL die Tabellen. Allerdings verlieren Sie dabei alle Daten, die noch nicht in der Tabelle gespeichert wurden.


Löschen einer Tabelle
Paradox-Übersicht

Wenn Sie eine Tabelle löschen möchten, rufen Sie deletePXTable() mit dem Dateinamen der zu löschenden Tabelle auf. Die Tabelle muß geschlossen sein. Falls Index- oder BLOB-Dateien mit der Tabelle verbunden sind, werden sie ebenfalls automatisch gelöscht.

Der Inhalt der Tabelle und damit verbundene BLOB- und Indexdateien werden physisch vom Datenträger entfernt.


Andere Tabellenoperationen
Paradox-Übersicht

Mit Funktionen aus TB30PDX.DLL können Sie eine Vielzahl von Operationen auf Tabellen ausführen. Für jede dieser Funktionen müssen die Tabellen mit ihrem Namen angegeben werden, nicht mit ihrem Alias.

copyPXTable()	Erstellt eine Kopie einer Tabellenfamilie (die Basistabelle einschließlich der mit ihr verbundenen BLOB- und Indexdateien) mit einem anderen Namen. Zusammengesetzte Indizes werden nicht kopiert. Wenn eine Tabelle mit dem angegebenen Namen bereits existiert und geschlossen ist, wird sie überschrieben.

renamePXTable()	Ändert den Namen der Basistabelle und aller mit ihr verbundenen BLOB- und Indexdateien.

addPXTable()	Fügt Datensätze aus einer Tabelle einer anderen hinzu. Datentypen einander entsprechenden Felder in den beiden Tabellen müssen übereinstimmen; BLOB-Felder müssen denselben Typ und gleichlange Anfangsdaten haben.

emptyPXTable()	Entfernt alle Datensätze aus einer Tabelle, indem sie physisch vom Datenträger entfernt werden. Die Tabellenstruktur bleibt intakt. Private BLOBs in verbundenen Datensatzpuffern werden freigegeben, und nicht abgeschlossene dropPXBlob()-Operationen werden nicht beachtet.


Operationen zum Abrufen von Tabelleninformationen
Paradox-Übersicht

Mit Funktionen aus TB30PDX.DLL können Informationen zu Tabellen abgerufen werden.

doesPXTableExist()	Ist die angegebene Tabelle vorhanden? (Geben Sie die Tabelle mit Namen, nicht mit Alias an.)

isPXTableProtected()	Ist die angegebene Tabelle verschlüsselt? (Geben Sie die Tabelle mit Alias an.)

isPXNetTableChanged()	Wurde die Tabelle seit dem letzten Aufruf von refreshPXNetTable() geändert? (Geben Sie die Tabelle mit Alias an.)

getPXRecordCount()	Wie viele Datensätze enthält die Tabelle? (Geben Sie die Tabelle mit Alias an.)

getPXFieldCount()	Wie viele Felder enthält die Tabelle? (Geben Sie die Tabelle mit Alias an.)

getPXFieldType()	Welchen Typ hat ein Feld? Gibt außerdem die Länge eines alphanumerischen und die Breite eines BLOB-Feldes zurück. (Geben Sie die Tabelle mit Alias und das Feld mit Namen an.)

getPXFieldNames()	Wie lauten die Namen der Felder in der Tabelle? (Geben Sie die Tabelle mit Alias an.)

getPXKeyFieldCount()	Wie viele Schlüsselfelder enthält die Tabelle? (Geben Sie die Tabelle mit Alias an.)


Arbeiten mit Datensätzen
Paradox-Übersicht

Wechseln zu einem Datensatz

Folgende Funktionen sind zum Wechseln zu bestimmten Datensätzen verfügbar:

gotoPXRecord()	Wechseln zum durch die Indexnummer angegebenen Datensatz. (Diese Methode ist unzuverlässig, wenn die Tabelle in einem Netzwerk von mehreren Benutzern verwendet wird, da Datensätze unbemerkt hinzugefügt oder gelöscht werden und sich so die Nummern der Datensätze ändern könnten.)

firstPXRecord()	Wechseln zum ersten Datensatz in der Tabelle oder im Index.

lastPXRecord()	Wechseln zum letzten Datensatz in der Tabelle oder im Index.

nextPXRecord()	Wechseln zum Datensatz nach dem aktuellen Datensatz in der Tabelle oder im Index.

previousPXRecord()	Wechseln zum Datensatz vor dem aktuellen Datensatz in der Tabelle oder im Index.

Das Ergebnis dieser Funktionen zum Wechseln zu einem bestimmten Datensatz hängt davon ab, ob ein Index für die Tabelle vorhanden ist, und wenn ja, von dem Index, den Sie beim Öffnen der Tabelle zugeordnet haben.

Wenn kein Index für die Tabelle vorhanden ist, wird auf Datensätze in der Reihenfolge zugegriffen, in der sie in die Tabelle eingegeben wurden. Der erste physische Datensatz ist Datensatz Nummer 1 (nicht 0), der nächste ist Datensatz Nummer 2 und so weiter. "Erster Datensatz" bezieht sich auf den ersten physischen Datensatz in der Tabelle; "nächster Datensatz" bezieht sich auf den nächsten physischen Datensatz nach dem aktuellen Datensatz.

Wenn Sie der Tabelle beim Öffnen einen Index zuordnen, wird auf Datensätze entsprechend ihrer Reihenfolge im Index verwiesen, die möglicherweise nicht mit ihrer physischen Reihenfolge in der Tabelle übereinstimmt. Der Datensatz mit der Nummer 1 ist also der erste Datensatz im Index, der Datensatz mit der Nummer 2 ist der nächste Datensatz im Index und so weiter. "Erster Datensatz" bezieht sich auf den ersten Datensatz im Index; "nächster Datensatz" bezieht sich auf den nächsten Datensatz im Index nach dem aktuellen Datensatz.

Wenn Sie einen Datensatz gesperrt haben, können Sie mit gotoPXNetRecordLock() zum gesperrten Datensatz wechseln.


Hinzufügen eines Datensatzes

Löschen von Datensätzen

Abrufen der Nummer des aktuellen Datensatzes

Löschen des Datensatzinhalts

Datensatzfunktionen


Hinzufügen eines Datensatzes
Paradox-Übersicht

So fügen Sie einer Tabelle einen Datensatz hinzu:

1.	Verwenden Sie setPXFieldValue(), um Werte in den Datensatzfeldern festzulegen.

2.	Rufen Sie appendPXRecord() oder insertPXRecord() auf, um der Tabelle den Datensatz hinzuzufügen.

Ist die Tabelle indiziert, so wird der Datensatz an seiner korrekten Position im Index hinzugefügt.

Ist die Tabelle nicht indiziert, so fügt appendPXRecord() den Datensatz am Ende der Tabelle hinzu, während insertPXRecord() den Datensatz vor dem aktuellen Datensatz einfügt.


Löschen von Datensätzen
Paradox-Übersicht

So löschen Sie einen Datensatz:

1.	Wenn die Tabelle nicht bereits geöffnet ist, öffnen Sie sie, und weisen Sie ihr einen Alias zu.

2.	Suchen Sie den zu löschenden Datensatz.

Wechseln Sie zu einem bestimmten Datensatz, oder suchen Sie nach dem Inhalt eines Schlüsselfeldes in einer indizierten Tabelle.

3.	Rufen Sie deletePXRecord() auf, um den Datensatz zu löschen.

Diese Funktion löscht jeweils einen Datensatz. Wenn Sie weitere Datensätze löschen möchten, wechseln Sie jeweils zu dem Datensatz, der gelöscht werden soll, und rufen Sie deletePXRecord() erneut für jeden Datensatz auf.

So löschen Sie alle Datensätze:

Rufen Sie bei geschlossener Tabelle die Funktion emptyPXTable() auf.


Abrufen der Nummer des aktuellen Datensatzes
Paradox-Übersicht

So rufen Sie die Nummer des aktuellen Datensatzes ab:

1.	Rufen Sie getPXRecordNumber() auf.

Diese Funktion gibt die Nummer des aktuellen Datensatzes in dem Index an, der der Tabelle momentan zugeordnet ist. Wenn Sie den Index für eine Tabelle wechseln, können die Datensätze andere Nummern erhalten. Es gibt keine Möglichkeit, die physische Datensatznummer abzurufen.

Die Datensatznummer ist kein zuverlässiges Mittel, um einen Datensatz in einer von mehreren Benutzern verwendeten Tabelle zu finden, da andere Benutzer unbemerkt Datensätze hinzufügen oder löschen können. Dadurch können sich einige oder alle Datensatznummern ändern.


Löschen des Datensatzinhalts
Paradox-Übersicht

Löschen des Datensatzinhalts bedeutet das Löschen der Daten in den Feldern, ohne daß der Datensatz aus der Tabelle gelöscht wird.

So löschen Sie den Inhalt eines Datensatzes:

1.	Wechseln Sie zu dem Datensatz, dessen Inhalt Sie löschen möchten.

2.	Rufen Sie emptyPXRecord() auf.


Arbeiten mit Feldern
Paradox-Übersicht

Abrufen der Informationen zu einem Feld

Es gibt zwei Funktionen, die Informationen zu Feldern zurückgeben:

getPXFieldNames() gibt eine Liste der Feldnamen in der angegebenen Tabelle zurück. Die Tabelle muß geöffnet sein.

getPXFieldType() gibt den Typ des benannten Feldes im aktuellen Datensatz sowie die Länge eines alphanumerischen und die Breite eines BLOB-Feldes zurück. Wenn Sie die Typen aller Felder eines Datensatzes abrufen möchten, verwenden Sie die Funktion getPXFieldType() in einer Schleife, wie im folgenden Beispiel.

Beispiel

to handle buttonClick

-- Blobs entfernen, damit der Benutzer ein Feld wählen kann, über den

-- die Tabelle indiziert werden kann

local temp

fieldNames = getPXfieldNames (DBTable of this book)

step i from 1 to itemCount(fieldNames)

testName = item i of fieldNames

get PXFieldType(testName)

if first char of it is in "MGBFO"

continue step

end if

put testName & "," after temp

end step

clear last char of temp

-- Alle Felder ausgeben, die einen Index haben können

request temp

end buttonClick


Lesen von Feldwerten

Schreiben von Feldwerten

Feldfunktionen


Lesen von Feldwerten
Paradox-Übersicht

So lesen Sie einen Feldwert:

1.	Wechseln Sie zu dem Datensatz, den Sie lesen möchten.

2.	Rufen Sie getPXFieldValue() einmal für jedes Feld auf, das Sie im aktuellen Datensatz lesen möchten.

Diese Funktion kann mit jedem Datentyp außer mit BLOBs verwendet werden.


Schreiben von Feldwerten
Paradox-Übersicht

So schreiben Sie einen Feldwert:

1.	Wechseln Sie zu dem Datensatz, den Sie schreiben möchten.

2.	Rufen Sie setPXFieldValue() auf, um den Wert eines bestimmten Feldes im aktuellen Datensatz zu ändern.

Diese Funktion kann mit jedem Datentyp außer mit BLOBs verwendet werden.

Rufen Sie nach dem Schreiben der Feldwerte updatePXRecord() auf, um die Änderungen in der Tabelle zu speichern.


Indizieren und Suchen
Paradox-Übersicht

Arbeiten mit Indizes

Ein Index über eine Tabelle ist wie das Buchstabenregister eines Telefonverzeichnisses und ermöglicht das schnelle Auffinden von Informationen. Wenn Sie im Telefonverzeichnis nach einem Begriff suchen, begrenzt das Buchstabenregister die Suche auf die Wörter, die mit demselben Buchstaben beginnen. Ebenso kann das Modul bei der Suche nach Daten in einer indizierten Tabelle direkt zu dem Teil der Tabelle springen, der die gewünschten Informationen enthält, bevor die einzelnen Datensätze durchsucht werden.

Wenn kein Index für die Tabelle vorhanden wäre, müßte das Modul bei jeder Suche nach Informationen alle Datensätze einzeln durchsuchen und dabei jedesmal von vorne beginnen.

Wenn das Modul Datensätze nach einem Index sortiert, geschieht dies im Arbeitsspeicher. Das Modul ordnet die Datensätze nicht physisch neu auf dem Datenträger an.


Erstellen von Indizes

Verwalten von Indizes

Löschen von Indizes

Sortierreihenfolge

Arten von Suchvorgängen

Durchführen einer Suche

Schlüssel- und Indexfunktionen

Suchfunktionen


Arten von Indizes
Paradox-Übersicht

Das Modul stellt zwei Haupttypen von Indizes bereit: Primär- und Sekundärindizes.

Ein Primärindex umfaßt immer das oder die ersten aufeinanderfolgenden Felder in einem Datensatz. Diese Felder ergeben zusammen den Schlüssel für den Datensatz. Mehrfache Schlüsselwerte sind nicht zulässig.

Jede Tabelle muß einen Primärindex besitzen. Wenn Sie selbst keinen erstellen, wird er vom Modul erstellt.

Sekundärindizes sind optional. Mit einem Sekundärindex können Sie die Datensätze in einer anderen Reihenfolge als mit dem Primärindex darstellen. Sekundärindizes können jedes Feld oder jede Feldgruppe umfassen.

BLOBs können in keinem Index verwendet werden.

Primärindizes werden immer automatisch verwaltet. Sobald Daten in einer Tabelle geändert werden, überprüft das Modul automatisch, ob Regeln für den Schlüssel nicht eingehalten wurden, sortiert die Tabelle nach den Schlüsselfeldern und aktualisiert den Index.

Ein Sekundärindex über einem einzelnen Feld kann zwischen Groß-/Kleinschreibung unterscheiden oder nicht.

Sekundärindizes können bei Bedarf automatisch verwaltet werden.

Für jede Tabelle kann es nur einen Primärindex geben, aber beliebig viele Sekundärindizes. Für jeden Tabellen-Alias kann jeweils nur ein Index zugeordnet sein. (Allerdings kann dieselbe Tabelle mehrmals mit jeweils einem anderen Alias geöffnet werden, und für jede Tabelleninstanz kann es einen anderen Index geben.)


Erstellen von Indizes
Paradox-Übersicht

So erstellen Sie einen Primärindex:

1.	Öffnen Sie die Tabelle.

2.	Rufen Sie addPXKey() auf.

Übergeben Sie die Nummern der Felder, über denen der Index angelegt werden soll, und den Code für den gewünschten Indextyp.

So erstellen Sie einen Sekundärindex:

1.	Öffnen Sie die Tabelle.

2.	Rufen Sie mapPXKey() mit den Nummern und Namen der Felder auf, die Sie für den Index verwenden möchten.

3.	Rufen Sie addPXKey() auf, um den Index zu erstellen.


Verwalten von Indizes
Paradox-Übersicht

Indizes werden automatisch ohne Eingriffe des Benutzers verwaltet.


Löschen von Indizes
Paradox-Übersicht

Rufen Sie dropPXKey() auf, um einen Index zu löschen. Die Tabelle muß beim Löschen des Indexes geöffnet sein. Wenn Sie einen Primärindex löschen, werden alle Sekundärindizes für dieselbe Tabelle ebenfalls gelöscht.


Sortierreihenfolge
Paradox-Übersicht

Wenn Sie die Sortierreihenfolge für eine Tabelle festlegen möchten, rufen Sie setPXSortOrder() auf, bevor Sie initializePX() aufrufen. (Wenn Sie setPXSortOrder() nicht aufrufen, wird als Voreinstellung die ASCII-Sortierreihenfolge verwendet.)

Sie können aus den folgenden Sortierreihenfolgen auswählen:

ASCII-Sortierreihenfolge

Internationale Sortierreihenfolge

Norwegische/dänische Sortierreihenfolge

Schwedische/finnische Sortierreihenfolge

Norwegische/dänische Sortierreihenfolge für Paradox 4.0


Arten von Suchvorgängen
Paradox-Übersicht

Sie können nach einem Datensatz suchen, der in einem Schlüsselfeld des Primärindexes oder Sekundärindexes mit dem gesuchten Wert übereinstimmt. Wenn Sie einen Primärindex verwenden, der auf einem Schlüssel über mehrere Felder basiert, können Sie angeben, wie viele dieser Felder (beginnend mit dem ersten) in die Suche einbezogen werden sollen.

Sie können nur nach genauen Übereinstimmungen suchen (obwohl Sie das Modul anweisen können, den naheliegendsten nicht-übereinstimmenden Datensatz zurückzugeben). Boolesche Operatoren -- z.B. Größer als, Kleiner als oder Ungleich -- sind nicht verfügbar. Sie können nicht nach BLOBs suchen.

Sie können einen der folgenden drei Suchmodi angeben:

Mode 0  -- Suche nach einer genauen Übereinstimmung ab dem Anfang der Tabelle.

Mode 1  -- Suche nach einer genauen Übereinstimmung ab dem nächsten Datensatz nach dem aktuellen Datensatz.

Mode 2  -- Suche nach der naheliegendsten Übereinstimmung ab dem Anfang der Tabelle.

In jedem der drei Fälle wird die Suche zum Ende der Tabelle hin durchgeführt.

Wenn das Modul in Modus 0 oder Modus 1 eine genaue Übereinstimmung findet, wird der entsprechende Datensatz zum aktuellen Datensatz. Wird keine genaue Übereinstimmung gefunden, bleibt der bisherige aktuelle Datensatz erhalten.

In Modus 2 sucht das Modul den ersten Datensatz, der einen Wert größer oder gleich dem Suchwert enthält. Nehmen Sie z.B. an, eine Reihe von Datensätzen enthält die folgenden Werte im ersten Feld:

Harry

Hartmut

Hubert

Wenn Sie nun im Modus 2 nach "Hermann" suchen, ist "Hubert" der erste Wert, der größer oder gleich dem Suchwert ist. Das Modul macht also diesen Datensatz zum aktuellen Datensatz. Wenn das Modul keinen Wert findet, der größer oder gleich dem Suchwert ist, wird der letzte Datensatz in der Tabelle zum aktuellen Datensatz.

Bedenken Sie, daß die Reihenfolge der Datensätze vom momentan verwendeten Index abhängt. Bei derselben Suche mit einem anderen Index können andere Ergebnisse erzielt werden.


Durchführen einer Suche
Paradox-Übersicht

Das Durchführen einer Suche erfolgt in zwei Schritten:

1.	Setzen Sie den Wert, für den eine Übereinstimmung gefunden werden soll, in das entsprechende Feld von setPXFieldValue().

2.	Rufen Sie searchPXKey() oder searchPXField() auf, um nach einem übereinstimmenden Wert zu suchen.

Beispiel

get setPXFieldValue("TestDatenbank", "name", text of field "name")

get searchPXField("TestDatenbank", "name", "nameIndex", 2)

if it < 0

request getPXErrorString(it)

end


Arbeiten mit BLOBs
Paradox-Übersicht

BLOBs (Binary Large Objects) sind binäre Objekte beliebiger Größe (z.B. ein Video-Clip, eine Klangdatei oder eine Bitmap) oder Textblöcke, die mehr als 255 Bytes umfassen. BLOBs können bis zu 256 MB groß sein.

Eine Tabelle kann maximal 255 BLOB-Felder enthalten.

BLOBs werden nicht in der Tabelle gespeichert, sondern in einer separaten Datei. Das BLOB-Feld in der Tabelle enthält einen Zeiger auf die BLOB-Daten in der separaten Datei.

Das BLOB-Feld kann auch maximal 240 Bytes große Anfangsdaten enthalten, die eine Kopie dieser Anzahl von Bytes ab dem Anfang des BLOBs enthalten. Wen das BLOB kleiner als die Anfangsdaten ist, kann das ganze BLOB in der Tabelle gespeichert werden.

TB30PDX.DLL unterstützt drei Arten von BLOBs:

M -- Memo (unformatierter Text)

B -- unstrukturierte binäre Daten (beliebige Daten wie Bit-Muster und Klang)

G -- strukturierte Grafiken (beliebige Daten mit einem Header oder Kopfsatz, der die Struktur definiert)

Wenn Sie createPXTable() aufrufen, um eine Tabelle zu erstellen, geben Sie die Art des BLOBs und ggf. die Größe der Anfangsdaten des BLOB-Feldes in Bytes in der Liste der Feldtypen an.


Öffentliche und private BLOBs

Kopieren von BLOBs

Lesen eines Memo-BLOBs

Lesen eines binären BLOBs

Lesen eines grafischen BLOBs

Schreiben eines Memo-BLOBs

Schreiben eines grafischen BLOBs

Schreiben eines binären BLOBs

Schreiben eines binären BLOBs aus einer Datei

Schreiben eines binären BLOBs in eine Datei

Anzeigen eines grafischen BLOBs

Schreiben und Lesen der BLOB-Anfangsdaten

BLOB-Funktionen


Öffentliche und private BLOBs
Paradox-Übersicht

Öffentliche BLOBs können von jeder Person gelesen werden, die Zugriff auf die Datenbanktabelle hat, mit der das BLOB verbunden ist. Ein privates BLOB ist eine lokale Kopie eines öffentlichen BLOBs oder ein neues BLOB, das noch nicht in der Tabelle gespeichert wurde. Auf ein privates BLOB kann nur von dem Benutzer zugegriffen werden, der es geöffnet hat. Wenn ein privates BLOB in eine Tabelle eingetragen wird, wird es zu einem öffentlichen BLOB.

TB30PDX.DLL und das Datenbankmodul verwalten öffentliche und private BLOBs.


Kopieren von BLOBs


Lesen eines Memo-BLOBs
Paradox-Übersicht

So lesen Sie ein Memo-BLOB:

1.	Wechseln Sie zum Datensatz, der die Referenz auf das BLOB enthält.

2.	Verwenden Sie openPXBlobRead(), um das zu lesende BLOB zu öffnen.

Das Modul gibt die Zugriffsnummer des BLOBs in der BLOB-Datei zurück.

3.	Verwenden Sie die Funktion getPXMemoBlob(), um das BLOB einer Variablen zuzuweisen.

4.	Verwenden Sie closePXBlob(), um das BLOB zu schließen.

5.	Zeigen Sie den Inhalt der Variablen mit einem geeigneten ToolBook-Verfahren an.

Beispiel

to handle buttonClick

hPrivateBlob = openPXBlobRead(DBTable, Feldname)

if hPrivateBlob < 0

send PXError hPrivateBlob

else

request getPXMemoBlob(hPrivateBlob)

get closePXBlob(hPrivateBlob, 0)

end

end


Lesen eines binären BLOBs
Paradox-Übersicht

So lesen Sie ein binäres BLOB:

1.	Wechseln Sie zu dem Datensatz, der die Referenz auf das BLOB enthält.

2.	Verwenden Sie openPXBlobRead(), um das BLOB zu öffnen.

Das Modul gibt die Zugriffsnummer des BLOBs in der BLOB-Datei zurück.

3.	Verwenden Sie die Funktion getPXBlob(), um das BLOB in den Arbeitsspeicher einzulesen.

Die Funktion gibt die Windows-Zugriffsnummer für das BLOB zurück.

4.	Verwenden Sie closePXBlob(), um das BLOB zu schließen.

5.	Verwenden Sie die Funktion globalLock() aus "Kernel", um einen Zeiger auf das BLOB im Arbeitsspeicher zu erhalten.

6.	Weisen Sie den Speicherinhalt an der Zeigerposition einer Variablen zu.

7.	Verwenden Sie die Funktion globalUnlock() aus "Kernel", um den Arbeitsspeicher freizugeben.

8.	Zeigen Sie den Inhalt der Variablen mit einem geeigneten ToolBook-Verfahren an.

9.	Verwenden Sie die Funktion globalFree() aus "Kernel", um das BLOB aus dem Arbeitsspeicher zu entfernen.

Beispiel

to handle buttonClick

request "Tabelle schließen:" && getPXErrorString(closePXTable("Bintest",1))

request "Tabelle öffnen:" && getPXErrorString(openPXTable("Bintest","Bintest",0,0))

linkDLL "kernel"

pointer globalLock(word)

word globalunlock(word)

word globalFree(word)

end linkDLL

-- Feldname ist bekannt, in diesem Fall wird "Binfield" verwendet

hBlob = openPXBlobRead("Bintest", "Binfield")

set bSize to getPXBlobSize(hBlob)

hB = getPXBlob(hBlob,bSize, 0)

get closePXBlob(hBlob, 0)

set pB to globalLock(hB)

request pointerString(0,pB)

get globalUnlock(hB)

get globalFree(hB)

request "Tabelle schließen:" && getPXErrorString(closePXTable("Bintest",1))

end


Lesen eines grafischen BLOBs
Paradox-Übersicht

So lesen Sie ein grafisches BLOB:

1.	Wechseln Sie zu dem Datensatz, der die Referenz auf das BLOB enthält.

2.	Verwenden Sie openPXBlobRead(), um das zu lesende BLOB zu öffnen.

Das Modul gibt die Zugriffsnummer des BLOBs in der BLOB-Datei zurück.

3.	Verwenden Sie die Funktion getPXGraphicBlob, um das BLOB in den Arbeitsspeicher einzulesen.

Die Funktion gibt die Windows-Zugriffsnummer für das BLOB zurück.

4.	Verwenden Sie closePXBlob(), um das BLOB zu schließen.

5.	Zeigen Sie das BLOB an.

6.	Verwenden Sie freePXGraphicBlob und freePXGraphicBlobPalette, um die Windows-Zugriffsnummer für die Bitmap und die Palette freizugeben.

Beispiel

-- "Tabelle" ist die momentan geöffnete Tabelle, "Feldname" ist der

-- Name des Feldes, das das BLOB enthält.

to handle showBitmap Tabelle,Feldname

system hBMP,hPal,hWndBMP

--Zugriffsnummer vom Typ PX für das BLOB bestimmen

hPXToBMP = openPXBlobRead(Tabelle,Feldname)

--BLOB in Arbeitsspeicher laden und Windows-Zugriffsnummer

--darauf bestimmen

hBMP = getPxGraphicBlob(hPXToBMP)

--Dasselbe gilt für die zugehörige Palette

hPal = getPxGraphicBlobPalette(hPXToBMP)

get closePXBlob(hPXToBMP, 0)

-- Fenster öffnen und grafisches BLOB anzeigen.

myParent = clientHandle of mainWindow

myPosition = pageUnitsToClient(position of ellipse "Center")

myColor = rgbFill of ellipse "Center"

hWndBMP = openPXBitmapWindow(hBMP, hPal, myParent, myPosition, 2, myColor)

--Angenommen, die Ellipse "center" ist ein Punkt. Mit dem Modus

--2 erscheint die Bitmap in ihrer normalen Größe, und zwar zentriert

--über der eindimensionalen Ellipse.

end showBitmap

to handle closeBitmap

system hBMP,hPal,hWndBMP

--Wenn die Bitmap und das Fenster nicht mehr benötigt werden,

--Fenster schließen

get closePXBitmapWindow(hWndBMP)

--Windows-Zugriffsnummer auf Bitmap freigeben

get freePXGraphicBlob(hBMP)

get freePXGraphicBlobPalette(hPal)	-- dasselbe für die Palette

end closeBitmap


Schreiben eines Memo-BLOBs
Paradox-Übersicht

So schreiben Sie ein Memo-BLOB:

1.	Wechseln Sie zu dem Datensatz, den Sie schreiben möchten.

2.	Verwenden Sie die Funktion charCount(), um die Größe des zu schreibenden BLOBs zu bestimmen.

3.	Verwenden Sie openPXBlobWrite(), um das zu schreibende BLOB zu öffnen.

4.	Verwenden Sie die Funktion setPXMemoBlob(), um das BLOB zu schreiben.

5.	Verwenden Sie closePXBlob(), um das BLOB zu schließen.

6.	Verwenden Sie appendPXRecord() oder insertPXRecord(), um einen neuen Datensatz hinzuzufügen, oder updatePXRecord(), um einen vorhandenen Datensatz zu aktualisieren.

Beispiel

blobSize = charCount(value)

blobHandle= openPXBlobWrite(DBTable of self, Feldname, BLOBSize, 0)

if blobHandle < 0

sysError = getPXErrorString(it)

else

get setPXMemoBlob(blobHandle, value)

sysError = getPXErrorString(it)

get closePXBlob(blobHandle, 1)

end


Schreiben eines grafischen BLOBs
Paradox-Übersicht

So schreiben Sie ein grafisches BLOB:

1.	Speichern Sie das zu schreibende BLOB als Datei.

2.	Wechseln Sie zu dem Datensatz, den Sie schreiben möchten.

3.	Verwenden Sie die Funktion getPXFileSize(), um die Größe des zu schreibenden BLOBs zu bestimmen.

4.	Fügen Sie 8 Bytes zu dieser Größe hinzu.

Die zusätzlichen 8 Bytes sind für einen Header bestimmt, der automatisch hinzugefügt wird und dem Modul mitteilt, welche Art von Grafik im BLOB gespeichert ist.

5.	Verwenden Sie openPXBlobWrite(), um das zu schreibende BLOB zu öffnen.

6.	Verwenden Sie die Funktion setPXGraphicBlobFromFile(), um das BLOB zu schreiben.

7.	Verwenden Sie closePXBlob(), um das BLOB zu schließen.

8.	Verwenden Sie appendPXRecord() oder insertPXRecord(), um einen neuen Datensatz hinzuzufügen, oder updatePXRecord(), um einen vorhandenen Datensatz zu aktualisieren.

Beispiel

blobSize = getPXFileSize(value) + 8

blobHandle= openPXBlobWrite(DBTable of self, Feldname, blobSize, 0)

if blobHandle< 0

send PXError blobHandle

else

get setPXGraphicBlobFromFile(blobHandle, value)

sysError = getPXErrorString(it)

get closePXBlob(blobHandle, 1)

end


Schreiben eines binären BLOBs
Paradox-Übersicht

Beispiel///Rick, fehlt vor dem Beispiel nicht was?///

to handle buttonClick

set foo to text of field "foo"

linkDLL "kernel"

WORD globalAlloc(word,dword)

POINTER globalLock(word)

WORD globalFree(word)

WORD globalUnlock(word)

end linkDLL

set hBuf to globalAlloc(68,512)

set pMemBuf to globalLock(hBuf)

request "Tabelle schließen:" && getPXErrorString(closePXTable("Bintest",1))

request "Tabelle öffnen:" && getPXErrorString(openPXTable("Bintest","Bintest",0,0))

get pointerString(0,pMemBuf,foo)

hBlob = openPXBlobWrite("Bintest", "BinField", 512, 0)

if hBlob < 0

request getPXErrorString(hBlob)

get globalUnlock(hBuf)

get globalFree(hBuf)

break

end

request "Blob setzen:" && getPXErrorString(setPXBlob(hBlob,512,0,hBuf))

get closePXBlob(hBlob, 1)

get globalUnlock(hBuf)

get globalFree(hBuf)

request "Blob aktualisieren:" && getPXErrorString(updatePXRecord("Bintest"))

request "Tabelle schließen:" && getPXErrorString(closePXTable("Bintest",1))

end


Anzeigen eines grafischen BLOBs
Paradox-Übersicht

Bevor Sie ein grafisches BLOB anzeigen können, müssen Sie ein Fenster dafür erstellen. Das Erstellen des Fensters und Anzeigen des BLOB kann gleichzeitig erfolgen, Sie können aber auch das Fenster erstellen, ohne das BLOB anzuzeigen. Das Fenster kann geöffnet bleiben, um eine Reihe von BLOBs anzuzeigen.

So erstellen Sie das Fenster und zeigen ein BLOB an:

1.	Rufen Sie openPXBitmapWindow() auf, um das Fenster zu erstellen.

Für die Funktion gibt es folgende Parameter:

<Bitmap-ZugrNr>	Die Zugriffsnummer auf das BLOB, die von getPXGraphicBlob() zurückgegeben wird

<Paletten-ZugrNr>	Die Palettenzugriffsnummer, die von getPXGraphicBlobPalette() zurückgegeben wird (Geben Sie 0 ein, um die ToolBook-Palette zu verwenden.)

<Umgebungs-ZugrNr>	Das Fenster, in dem das untergeordnete Fenster erstellt werden soll

<Position/Begrenzung>	Durch Kommas getrennte Liste aus zwei Bildschirmkoordinaten, die die Position angeben, oder vier Bildschirmkoordinaten, die die Begrenzung des untergeordneten Fensters angeben

<Modus>	Anzeigemodus für die Bitmap

0	Normal

1	Zentriert

2	Skaliert

<Hintergrundfarbe>	Durch Kommas getrennte Liste, die die RGB-Werte für die Hintergrundfarbe des Fensters angibt. Übergeben Sie Null oder "", um die System-Hintergrundfarbe für das Fenster zu verwenden.

Die Funktion gibt die Zugriffsnummer für das Fenster zurück.

So erstellen Sie das Fenster, ohne ein BLOB anzuzeigen:

Wenn Sie openPXBitmapWindow() aufrufen, übergeben Sie die Zugriffsnummer für eine Bitmap, die eine ToolBook-Ressource ist, und nicht die Zugriffsnummer für ein BLOB. Übergeben Sie 0, anstatt eine Zugriffsnummer für eine BLOB-Palette zu übergeben.

Die Ressource-Bitmap von ToolBook wird im Fenster angezeigt.

So zeigen Sie ein BLOB in einem vorhandenen Fenster an:

1.	Rufen Sie setPXBitmapWindowInfo() auf, um die Bitmap anzuzeigen.

Für die Funktion gibt es folgende Parameter:

<Fenster-ZugrNr>	Die Zugriffsnummer auf das Bitmap-Fenster, die von openPXBitmapWindow() zurückgegeben wird

<Bitmap-ZugrNr>	Die Zugriffsnummer auf das BLOB, die von getPXGraphicBlob() zurückgegeben wird

<Paletten-ZugrNr>	Die Palettenzugriffsnummer, die von getPXGraphicBlobPalette() zurückgegeben wird. (Geben Sie 0 ein, um die ToolBook-Palette zu verwenden.)

<Modus>	Anzeigemodus für die Bitmap

0	Normal

1	Zentriert

2	Skaliert

<Hintergrundfarbe>	Durch Kommas getrennte Liste, die die RGB-Werte für die Hintergrundfarbe des Fensters angibt

Nach dem Ansehen des BLOBs sollten Sie freePXgraphicBlob() und freePXGraphicBlobPalette() aufrufen, um den von der BLOB-Zugriffsnummer und der Palettenzugriffsnummer benötigten Arbeitsspeicher freizugeben. Außerdem sollten Sie den Bildschirm aktualisieren, um das BLOB-Bild zu entfernen.

Beispiel

--"Tabelle" ist die momentan geöffnete Tabelle, "Feldname" ist der

--Name des Feldes, das das BLOB enthält.

to handle showBitmap Tabelle,Feldname

system hBMP,hPal,hWndBMP

--Zugriffsnummer vom Typ PX für das BLOB bestimmen

hPXToBMP = openPXBlobRead(Tabelle,Feldname)

--BLOB in Arbeitsspeicher laden und Windows-Zugriffsnummer

--darauf bestimmen

hBMP = getPxGraphicBlob(hPXToBMP)

--Dasselbe gilt für die zugehörige Palette

hPal = getPxGraphicBlobPalette(hPXToBMP)

--PX-Zugriffsnummer wird nicht mehr benötigt

get closePXBlob(hPXToBMP, 0)

-- Fenster öffnen und grafisches BLOB anzeigen.

hWndBMP = openPXBitmapWindow(hBMP, hPal, clientHandle of \

mainWindow, pageUnitsToClient(position of ellipse "Center"), \

2,rgbFill of ellipse "Center")

--Angenommen, die Ellipse "center" ist ein Punkt. Mit dem Modus

--2 erscheint die Bitmap in ihrer normalen Größe, und zwar zentriert

--über der eindimensionalen Ellipse.

end showBitmap

So schließen Sie das Fenster:

Beispiel

to handle closeBitmap

system hBMP,hPal,hWndBMP

--Wenn die Bitmap und das Fenster nicht mehr benötigt werden,

--Fenster schließen

get closePXBitmapWindow(hWndBMP)

--Windows-Zugriffsnummer auf Bitmap...

get freePXGraphicBlob(hBMP)

--... und auf Palette freigeben

get freePXGraphicBlobPalette(hPal)

end closeBitmap


Schreiben und Lesen der BLOB-Anfangsdaten
Paradox-Übersicht

Die BLOB-Anfangsdaten sind ein Teil des BLOBs, der sowohl in der Datenbanktabelle als auch in der BLOB-Datei gespeichert wird. Die Anfangsdaten sind optional und können bis zu 240 Bytes lang sein. Sie legen die Länge der Anfangsdaten fest, wenn Sie mit createPXTable() die Tabelle erstellen.

Beispiel

get createPXTable("c:\data\CDbase", "Titel, Künstler, Lieder, \
Cover", "A25, A25, M240, G0")

Dieses Beispiel erstellt zwei BLOB-Felder: ein Memofeld mit 240 Bytes Anfangsdaten sowie ein Grafikfeld mit 0 Byte Anfangsdaten.

Die Anfangsdaten sind hilfreich zum Speichern einer Beschreibung oder anderer Daten zum BLOB. Wenn das BLOB kleiner als 240 Bytes ist, kann es vollständig in den Anfangsdaten gespeichert werden, wobei es aber auch in der BLOB-Datei gespeichert  wird.

So schreiben Sie die BLOB-Anfangsdaten:

1.	Wenn die Anfangsdaten für ein BLOB-Feld länger als 0 Bytes sind, werden diese automatisch mit dem ersten Teil des BLOBs aufgefüllt, wenn Sie den BLOB in die BLOB-Datei schreiben. Das gesamte BLOB wird in der BLOB-Datei gespeichert; der Teil des BLOBs, der in den Anfangsdaten gespeichert wird, ist eine Kopie.

Sie können die BLOB-Anfangsdaten lesen, ohne das gesamte BLOB zu lesen.

So lesen Sie die BLOB-Anfangsdaten

1.	Wechseln Sie zu dem Datensatz, von dem aus Sie die BLOB-Anfangsdaten lesen möchten.

2.	Verwenden Sie die Funktion getPXBlobQuick(), um die Anfangsdaten zu lesen.

Beispiel

to handle buttonClick

linkDLL "kernel"

pointer globalLock(word)

word globalunlock(word)

word globalFree(word)

end linkDLL

request "Tabelle schließen:" && getPXErrorString(closePXTable("Bintest",1))

request "Tabelle öffnen:" && getPXErrorString(openPXTable("Bintest","Bintest",0,0))

-- Feldname ist bekannt, in diesem Fall wird "home_address"

-- verwendet

fieldSize = getPXFieldType("Bintest","home_address")

clear first char of fieldSize

hQuickBlob = getPXBlobQuick("Bintest","home_address",fieldSize)

pQB = globalLock(hQuickBlob)

request pointerString(0,pQB)

get globalUnlock(hQuickBlob)

get globalFree(hQuickBlob)

end


Gemeinsamer Zugriff auf Tabellen durch mehrere Benutzer
Paradox-Übersicht

Paradox-Datenbanktabellen können über ein Netzwerk oder auch von mehreren ToolBook-Anwendungen, die auf demselben Computer ausgeführt werden, gemeinsam genutzt werden. Das Modul verfügt über mehrere Funktionen, mit denen Sie mehreren Benutzern den Zugriff auf Tabellen erlauben können, während gleichzeitig die Datenintegrität geschützt wird.


Sperren

Verwalten paralleler Operationen

Verwalten der Sicherheitsmechanismen

Funktionen für Mehrbenutzerzugriff und parallele Operationen

Kennwort- und Zugriffsschutzfunktionen


Sperren
Paradox-Übersicht

Zum sicheren und erfolgreichen Zugriff auf Tabellen durch mehrere Benutzer/Anwendungen ist ein Verfahren zum geordneten Sperren und Freigeben von Datensätzen und Tabellen zwingend erforderlich. Es gibt vier Arten von Sperren. Einige Sperren werden automatisch vom Modul gesetzt und entfernt, aber die meisten müssen explizit von der ToolBook-Anwendung gesetzt und entfernt werden.

Sperren können auf Tabellen, auf andere Arten von Dateien und auf Datensätze gesetzt werden.

Ein Benutzer kann ein Objekt jeweils nur einmal sperren, aber mehrere Benutzer können Sperren auf dasselbe Objekt setzen, solange die Sperren nicht miteinander in Konflikt stehen. Wenn Sie z.B. eine vollständige Sperre auf eine Tabelle setzen, kann ein anderer Benutzer eine Schreibsperre auf dieselbe Tabelle setzen, aber es kann niemand vollständige Sperren auf der Tabelle unterbinden.

Jeder Benutzer kann jeweils nur eine Sperre auf ein Objekt setzen. Allerdings kann ein Benutzer bis zu 128 Datensätze auf einmal in jeder geöffneten Tabelle sperren.

Der Sperrschema muß Datensicherheit und Zugriffsmöglichkeiten auf Daten gleichermaßen berücksichtigen. Strikte Sperren bieten eine größere Sicherheit für die Datenintegrität, erschweren aber den Zugriff durch mehrere Benutzer. Wenn Sie z.B. eine Schreibsperre auf eine ganze Tabelle setzen, während Sie an einem einzigen Datensatz arbeiten, kann kein anderer Benutzer einen Datensatz in der Tabelle schreiben.

Eine vollständige Sperre wird im allgemeinen dann gesetzt, wenn ein anderer Benutzer möglicherweise ungültige Daten nicht sehen soll, oder wenn Operationen zum Sortieren, Umstrukturieren, Leeren oder Löschen einer Tabelle durchgeführt werden.

Unterbundene Sperren verhindern, daß andere Benutzer Sperren auf Objekte setzen. Eine unterbundene vollständige Sperre auf einer Tabelle bedeutet, daß kein anderer Benutzer die Tabelle vollständig sperren kann; eine Schreibsperre ist aber nach wie vor möglich. Durch das Setzen einer unterbundenen Schreibsperre oder einer unterbundenen vollständigen Sperre auf ein Objekt sorgen Sie dafür, daß Sie jederzeit Zugriff auf das Objekt haben. Allerdings können unterbundene Sperren die Operationen anderer Benutzer beeinträchtigen. Wenn z.B. ein anderer Benutzer eine Operation durchführen möchte, die das Setzen einer Schreibsperre auf eine Tabelle erfordert, und Sie eine unterbundene Schreibsperre auf die Tabelle gesetzt haben, kann der andere Benutzer erst fortfahren, wenn Sie die unterbundene Sperre nicht mehr vorhanden ist.

Das Sperren einer Tabelle oder Datei ist nicht dasselbe wie das Schützen mit einem Kennwort.


Arten von Sperren

Automatische Sperren

Manuelle Sperren

Überprüfen des Sperrzustands

Wechseln zu einem gesperrten Datensatz


Arten von Sperren
Paradox-Übersicht

Es gibt zwei Arten von Sperren und zwei Arten von "unterbundenen" Sperren:

Sperre	Auswirkungen	Gilt für

Vollständige Sperre	Hindert alle anderen Benutzer am Zugriff auf das Objekt	Tabellen, Dateien
Schreibsperre	Ermöglicht anderen Benutzern das Lesen aus dem Objekt, verhindert aber das Ändern der Struktur oder des Inhalts	Tabellen, Dateien, Datensätze
Unterbundene Schreibsperre	Hindert andere Benutzer daran, eine vollständige Sperre oder Schreibsperre auf das Objekt zu setzen	Tabellen, Dateien
Unterbundene vollständige Sperre	Hindert andere Benutzer daran, eine vollständige Sperre auf ein Objekt zu setzen. Schreibsperren sind möglich.	Tabellen, Dateien


Automatische Sperren
Paradox-Übersicht

Das Modul sperrt Objekte automatisch, wenn die folgenden Funktionen aufgerufen werden:

Funktion	Sperre

addPXTable()	Schreibsperre auf Quelltabelle, vollständige Sperre auf Zieltabelle
copyPXTable()	Schreibsperre auf Quelltabelle, vollständige Sperre auf Zieltabelle
createPXTable()	Vollständige Sperre auf der Tabelle, die gerade erstellt wird
deletePXTable()	Vollständige Sperre auf der Tabelle, die gerade gelöscht wird
emptyPXTable()	Vollständige Sperre auf der Tabelle, die gerade geleert wird
openPXTable()	Unterbundene vollständige Sperre auf der Tabelle, die gerade geöffnet wird
renamePXTable()	Vollständige Sperre auf Quelltabelle, vollständige Sperre auf Zieltabelle
addPXKey()	Vollständige Sperre auf Tabelle
dropPXKey()	Vollständige Sperre auf Tabelle


Manuelle Sperren
Paradox-Übersicht

Verwenden Sie die folgenden Funktionen, um Sperren auf Dateien, Tabellen und Datensätze zu setzen oder zu entfernen:

Funktion	Verwendung

lockPXNetFile()	Setzen einer vollständigen bzw. Schreibsperre oder einer unterbundenen vollständigen bzw. Schreibsperre auf die angegebene Datei
unlockPXNetFile()	Entfernen einer Sperre von der angegebenen Datei
lockPXNetTable()	Setzen einer vollständigen bzw. Schreibsperre oder einer unterbundenen vollständigen bzw. Schreibsperre auf die angegebene Tabelle
unlockPXNetTable()	Entfernen einer Sperre von der angegebenen Tabelle
lockPXNetRecord()	Setzen einer Schreibsperre auf den aktuellen Datensatz in der angegebenen Tabelle. Gibt die Sperrzugriffsnummer für den gesperrten Datensatz zurück.
unlockPXNetRecord()	Entfernen einer Sperre von dem Datensatz, der durch die von lockPXNetRecord() zurückgegebene Sperrzugriffsnummer angegeben wird
Sie können einen Datensatz nur einmal sperren. Sie können bis zu 128 Datensätze gleichzeitig in jeder geöffneten Tabelle sperren.


Überprüfen des Sperrzustands
Paradox-Übersicht

Durch Aufrufen von isPXNetRecordLocked() können Sie herausfinden, ob der aktuelle Datensatz gesperrt ist. Die Funktion gibt 1 zurück, wenn der Datensatz gesperrt ist, und 0, wenn er nicht gesperrt ist.

Beispiel

to handle buttonClick

set DB to DBTable of this book

get isPXNetRecordLocked(DB)

if it < 0

request getPXErrorString(it)

else

request it

end if

get isPXNetTableChanged(DB)

if it < 0

request getPXErrorString(it)

else

request it

end if

get isPXTableProtected(DB)

if it < 0

request getPXErrorString(it)

else

request it

end if

end


Wechseln zu einem gesperrten Datensatz
Paradox-Übersicht

Sie wechseln zu einem gesperrten Datensatz, indem Sie gotoPXNetRecordLock() aufrufen und dabei die von lockPXNetRecord() zurückgegebene Sperr-Zugriffsnummer angeben.


Verwalten paralleler Operationen
Paradox-Übersicht

Es gibt vier Funktionen, die beim Verwalten paralleler Operationen hilfreich sind:

isPXNetTableChanged()	Gibt an, ob die Tabelle von einem anderen Benutzer geändert wurde, seit Sie das letzte Mal daraus gelesen haben; Sie werden benachrichtigt, wenn der aktuelle Datensatz gelöscht oder die Datensatznummer geändert wurde.
refreshPXNetTable()	Ruft aktuelle Daten für den aktuellen Datensatz ab; Sie werden benachrichtigt, wenn der aktuelle Datensatz gelöscht wurde.
getPXNetUserName()	Ruft den Namen des Benutzers aus der Datei WIN.INI ab.
getPXNetErrorUser()	Ruft den Namen des Benutzers ab, der einen Sperrfehler verursacht hat.


Verwalten der Sicherheitsmechanismen
Paradox-Übersicht

Das Modul stellt Kennwortschutz auf Tabellenebene bereit. Wenn Sie einer Tabelle ein Kennwort zuweisen, ist die Tabelle verschlüsselt, und alle Benutzer müssen das korrekte Kennwort angeben, bevor sie die Tabelle öffnen können. Nachdem das Kennwort angegeben wurde, werden Daten beim Lesen aus der Tabelle entschlüsselt und beim Schreiben in die Tabelle verschlüsselt.

Ein Kennwort kann maximal 15 Zeichen lang sein.

Die folgenden Funktionen werden zum Verwalten der Sicherheitsmechanismen verwendet:

encryptPXTable()	Versieht eine Tabelle mit Kennwortschutz. Die Tabelle wird mit dem von Ihnen gewählten Kennwort verschlüsselt. Die Tabelle muß geschlossen sein, wenn der Kennwortschutz hinzugefügt wird.
decryptPTTable()	Entfernt den Kennwortschutz von einer Tabelle. Die Tabelle wird entschlüsselt und kann von jedem Benutzer geöffnet werden. Die Tabelle muß geschlossen sein, wenn der Kennwortschutz entfernt wird.
isPXTableProtected()	Stellt fest, ob eine Tabelle durch ein Kennwort geschützt ist.
addPXPassword()	Übergibt ein Kennwort an das Modul, damit Sie eine kennwortgeschützte Tabelle öffnen können. Sie können mehrere Kennwörter übergeben (aber nur eines pro Funktionsaufruf), um mehrere kennwortgeschützte Tabellen zu öffnen.
deletePXPassword()	Deaktiviert ein Kennwort, so daß es nicht länger zum Öffnen kennwortgeschützter Tabellen verwendet werden kann. Sie können weiterhin mit allen Tabellen arbeiten, die mit dem Kennwort geöffnet wurden.


Alias

Ein Name, den Sie einer Tabelle beim Öffnen geben. Der Alias wird verwendet, um auf die Tabelle in Funktionen zu verweisen, solange sie geöffnet ist.


Normaler Bitmap-Anzeigemodus

Die Bitmap wird in der oberen linken Ecke des Fensters angezeigt. Wenn <Position/Begrenzung> ein Punkt ist, wird das Fenster an die Größe der Bitmap angepaßt. Wenn <Position/Begrenzung> ein Rechteck ist, wird das Fenster wie angegeben gezeichnet. Ist die Bitmap kleiner als das Fenster, so ist die Hintergrundfarbe sichtbar. Ist die Bitmap größer als das Fenster, so wird sie an den Rändern abgeschnitten.


Zentrierter Bitmap-Anzeigemodus

Wenn <Position/Begrenzung> ein Punkt ist, wird die Bitmap an diesem Punkt zentriert, und das Fenster wird an die Größe der Bitmap angepaßt. Wenn <Position/Begrenzung> ein Rechteck ist, wird das Fenster wie angegeben gezeichnet, und die Bitmap wird im Fenster zentriert. Ist die Bitmap kleiner als das Fenster, so ist die Hintergrundfarbe sichtbar. Ist die Bitmap größer als das Fenster, so wird sie an den Rändern abgeschnitten.


Skalierter Bitmap-Anzeigemodus

Wenn <Position/Begrenzung> ein Punkt ist, wird das Fenster an die Größe der Bitmap angepaßt. Wenn <Position/Begrenzung> ein Rechteck ist, wird das Fenster wie angegeben gezeichnet, und die Bitmap wird so skaliert, daß sie das Fenster ausfüllt.


Zugriffsnummer

Eine Nummer, mit der auf eine Datei, einen Index oder ein BLOB verwiesen werden kann.


BLOB

Ein BLOB (Binary Large Object) ist ein beliebiger Block binärer Daten (z.B. eine Grafik, ein Video-Clip oder ein Klang) oder ein Block von Textdaten, der mehr als 255 Bytes umfaßt. BLOBs werden in einer separaten Datei gespeichert, und die Zugriffsnummer des BLOBs wird in einem Feld der Tabelle gespeichert.


Modus

0	Änderungen werden in einem Auslagerungspuffer gespeichert

1	Änderungen werden auf dem Datenträger gespeichert

Änderungen an einer von mehreren Benutzern verwendeten Tabelle werden immer auf dem Datenträger gespeichert, unabhängig vom Modus.


Index-Zugriffsnummer

0	für den Primärindex einer Tabelle

1 - 255	(die Feldnummer) für Sekundärindizes über einem einzelnen Feld, die zwischen Groß- und
Kleinschreibung unterscheiden

>256	Feldzugriffsnummer für zusammengesetzte Indizes oder Indizes über ein einzelnes Feld, die
nicht zwischen Groß- und Kleinschreibung unterscheiden


Kopieren von BLOBs
Paradox-Übersicht

Wenn Sie ein BLOB aus einem Datensatz lesen, wird der Inhalt des BLOBs beim Wechsel zu einem anderen Datensatz aus dem Arbeitsspeicher gelöscht. Wenn das BLOB beim Wechsel zu einem anderen Datensatz im Arbeitsspeicher bleiben soll, können Sie es mit clonePXBlob() kopieren.

Beim Kopieren eines BLOBs erstellen Sie eine private Kopie eines öffentlichen BLOB.


Schreiben eines binären BLOBs aus einer Datei
Paradox-Übersicht

Beispiel

to handle buttonClick

request "Tabelle schließen:" && getPXErrorString(closePXTable("Bintest",1))

request "Tabelle öffnen:" && getPXErrorString(openPXTable("Bintest","Bintest",0,0))

set blobSize to getPXFileSize("blob.txt")

hBlob = openPXBlobWrite("Bintest", "BinField", blobSize, 0)

if hBlob < 0

request getPXErrorString(hBlob)

get globalUnlock(hBuf)

get globalFree(hBuf)

break

end

request "Blob aus Datei festlegen:" && getPXErrorString(setPXBlobFromFile(hBlob,blobSize,0,0,"blob.txt"))

get closePXBlob(hBlob, 1)

request "Blob aktualisieren:" && getPXErrorString(updatePXRecord("Bintest"))

request "Tabelle schließen:" && getPXErrorString(closePXTable("Bintest",1))

get globalUnlock(hBuf)

get globalFree(hBuf)

end


Schreiben eines binären BLOBs in eine Datei
Paradox-Übersicht

Beispiel

to handle buttonClick

request "Tabelle schließen:" && getPXErrorString(closePXTable("Bintest",1))

request "Tabelle öffnen:" && getPXErrorString(openPXTable("Bintest","Bintest",0,0))

--Feldname ist bekannt, in diesem Fall wird "Binfield" verwendet

hBlob = openPXBlobRead("Bintest", "Binfield")

set wE to writePXBlobToFile(hBlob,"c:\database\blob2.txt",2)

if wE < 0

request "In Datei schreiben:" && \

getPXErrorString(wE)

else

request "Geschriebene Dateigröße:" && wE

end if

request "Tabelle schließen:" && \

getPXErrorString(closePXTable("Bintest",1))

end


Modul-Voreinstellungen

Wenn die erste Modulfunktion aufgerufen wird, werden die Einträge MaxFiles, MaxLocks, MaxTables und SwapSize aus dem Abschnitt [Paradox-Modul] in der Datei WIN.INI eingelesen und in der Datei PDOXWIN.DLL gespeichert, solange sie sich im Arbeitsspeicher befindet. Alle Anwendungen, die mit dem Paradox-Modul arbeiten, verwenden diese Instanz von PDOXWIN.DLL gemeinsam. Sobald also eine Anwendung die DLL geladen und eine Modulfunktion aufgerufen hat, besteht die einzige Möglichkeit zum Ändern des Wertes einer dieser Variablen darin, alle Anwendungen, die das Modul verwenden, zu beenden, und die Einstellungen in der Datei WIN.INI zu ändern. Die folgenden Funktionen können aufgerufen werden, um die Datei WIN.INI abzufragen und zu ändern, ohne daß das Modul die Voreinstellungen liest.

getPXSwapSizeFromINI()

getPXMaxTablesFromINI()

getPXMaxFilesFromINI()

getPXMaxLocksFromINI()

setPXINIMaxFiles()

setPXINIMaxLocks()

setPXINIMaxTables()

setPXINISwapSize()