Dienst SFDatabases.Database

Der Dienst Database bietet Zugriff auf Datenbanken, die entweder eingebettet oder in Basisdokumenten beschrieben sind. Dieser Dienst bietet Methoden für Folgendes:

Jede Instanz des Dienstes Database stellt eine einzelne Datenbank dar und gewährt Zugriff auf ihre Tabellen, Abfragen und Daten. Dieser Dienst bietet keinen Zugriff auf Formulare oder Berichte im Base-Dokument.

note

Der gesamte Austausch zwischen diesem Dienst und der Datenbank erfolgt ausschließlich über SQL.


SQL-Anweisungen können im direkten oder indirekten Modus ausgeführt werden. Im direkten Modus wird die Anweisung ohne Syntaxprüfung oder -überprüfung an die Datenbank-Engine übertragen.

Die bereitgestellten Schnittstellen umfassen einfache Tabellen und Abfragelisten sowie den Zugriff auf Datenbankdaten.

tip

Um SQL-Anweisungen besser lesbar zu machen, können Sie optionale eckige Klammern verwenden, um Tabellen, Abfragen und Felder einzuschließen, anstatt andere einschließende Zeichen zu verwenden, die möglicherweise exklusiv für bestimmte relationale Datenbankverwaltungssysteme (RDBMS) sind.


Dienstaufruf

Syntax:

Das folgende Code-Schnipsel zeigt, wie Sie mit dem Dienst Database auf eine beliebige Datenbank zugreifen.


        Dim myDatabase As Object
        Set myDatabase = CreateScriptService("SFDatabases.Database", [FileName], [RegistrationName], [ReadOnly], [User, [Password]])
        ' … Abfragen, SQL-Anweisungen, … ausführen
        myDatabase.CloseDatabase()
    

Parameter:

FileName: Der Name der Base-Datei. Muss in der Notation SF_FileSystem.FileNaming ausgedrückt werden.

RegistrationName: Der Name einer registrierten Datenbank. Wenn ein Dateiname angegeben wird, sollte dieses Argument nicht verwendet werden.

Wenn dagegen ein RegistrationName angegeben ist, sollte der Parameter FileName nicht definiert werden.

ReadOnly: Legt fest, ob die Datenbank schreibgeschützt geöffnet wird (Standard = True).

User, Password: Zusätzliche Verbindungsparameter zum Datenbankserver.

note

Dieser Dienst wird sowohl in der Sprache Basic als auch in Python vollständig unterstützt. Alle Beispiele sind in der Programmiersprache Basic geschrieben und können leicht in Python umgewandelt werden.


Zugriff auf Datenbanken mit dem Dienst "UI"

Es ist auch möglich, mit dem Dienst ScriptForge.UI auf die mit einem Base-Dokument verknüpfte Datenbank zuzugreifen, wie im folgenden Beispiel gezeigt:


        Dim myDoc As Object, myDatabase As Object, ui As Object
        Set ui = CreateScriptService("UI")
        Set myDoc = ui.OpenBaseDocument("myDb.odb")
        ' Benutzer und Kennwort werden unten angegeben, falls erforderlich
        Set myDatabase = myDoc.GetDatabase()
        ' … Abfragen, SQL-Anweisungen, … ausführen
        myDoc.CloseDocument()
    
tip

Die im obigen Beispiel verwendete Methode GetDatabase ist Teil des Services ScriptForge in Base.


Eigenschaften

Name

ReadOnly

Typ

Beschreibung

Queries

Ja

Matrix mit Zeichenfolgen

Die Liste der gespeicherten Abfragen.

Tables

Ja

Matrix mit Zeichenfolgen

Die Liste der gespeicherten Tabellen.

XConnection

Ja

XConnection

Das UNO-Objekt, welches die aktuelle Datenbankverbindung darstellt.

XMetaData

Ja

XDatabaseMetaData

Das UNO-Objekt, das die Metadaten darstellt, welche die Datenbanksystemattribute beschreiben.


Liste der Methoden im Datenbankdienst

CloseDatabase
DAvg
DCount

DMin
DMax
DSum

DLookup
GetRows
RunSql


CloseDatabase

Schließt die aktuelle Datenbankverbindung.

Syntax:


       myDatabase.CloseDatabase()
     

DAvg, DCount, DMin, DMax, DSum

Berechnet die angegebene Funktion Aggregat für ein Feld oder einen Ausdruck, der zu einer Tabelle gehört.

Optional, die SQL-Klausel WHERE kann als Filter angegeben werden, der vor der Funktion Aggregat angewendet wird.

Syntax:


        myDatabase.DAvg(Expression As String, TableName As String, [Criteria As String]) As Variant
    

Parameter:

Expression: Ein SQL-Ausdruck, in dem die Feldnamen in eckige Klammern eingeschlossen sind.

TableName: Ein Tabellenname (ohne eckige Klammern).

Criteria: Eine Klausel WHERE ohne das Schlüsselwort "WHERE", in der/m Feldnamen von eckigen Klammern umgeben sind.

Beispiel:

Das folgende Beispiel geht davon aus, dass die Datei Employees.odb eine Tabelle mit dem Namen EmployeeData enthält.


      GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
      Dim myDB as Variant
      Set myDB = CreateScriptService("Database", "~/Databases/Employees.odb")
      ' Zählt die Anzahl der Mitarbeiter in der Tabelle
      MsgBox myDB.DCount("[ID]", "EmployeeData")
      ' Gibt die Summe aller Gehälter in der Tabelle zurück
      MsgBox myDB.DSum("[Salary]", "EmployeeData")
      ' Im Folgenden finden Sie einige Beispiele dafür, wie Tabellen gefiltert werden können
      MsgBox myDB.DCount("[ID]", "EmployeeData", "[Position] = 'Manager'")
      MsgBox myDB.DCount("[ID]", "EmployeeData", "[Position] = 'Sales' AND [City] = 'Chicago'")
      MsgBox myDB.DCount("[ID]", "EmployeeData", "[FirstName] LIKE 'Paul%'")
    

DLookup

Berechnet einen SQL-Ausdruck für einen einzelnen Datensatz, der von einer Klausel WHERE zurückgegeben wird, die durch den Parameter Criteria definiert ist.

Wenn die Abfrage mehrere Datensätze zurückgibt, wird nur der erste berücksichtigt. Verwenden Sie den Parameter OrderClause, um festzulegen, wie die Abfrageergebnisse sortiert werden.

Syntax:


        myDatabase.DLookup(Expression As String, TableName As String, [Criteria As String], [OrderClause As String]) As Variant
    

Parameter:

Expression: Ein SQL-Ausdruck, in dem die Feldnamen in eckige Klammern eingeschlossen sind.

TableName: Ein Tabellenname (ohne eckige Klammern).

Criteria : Eine Klausel WHERE ohne das Schlüsselwort "WHERE", in der Feldnamen von eckigen Klammern umgeben sind.

OrderClause: Eine Klausel ORDER BY ohne die Schlüsselwörter "ORDER BY". Feldnamen sollten in eckige Klammern eingeschlossen werden.

Beispiel:


        MsgBox myDB.DLookup("[FirstName]", "EmployeeData", Criteria := "[LastName] LIKE 'Smith'", OrderClause := "[FirstName] DESC")
        MsgBox myDB.DLookup("[Salary]", "EmployeeData", Criteria := "[ID] = '3'")
        MsgBox myDB.DLookup("[Quantity] * [Value]", "Sales", Criteria := "[SaleID] = '5014'")
    

GetRows

Speichert den Inhalt einer Tabelle oder die Ergebnisse einer Abfrage SELECT oder einer SQL-Anweisung in einer zweidimensionalen Matrix. Der erste Index in der Matrix entspricht den Zeilen und der zweite Index bezieht sich auf die Spalten.

Für die Anzahl der zurückgegebenen Zeilen kann eine Obergrenze angegeben werden. Optional können Spaltennamen in die erste Zeile der Matrix eingefügt werden.

Die zurückgegebene Matrix ist leer, wenn keine Zeilen zurückgegeben werden und die Spaltenüberschriften nicht erforderlich sind.

Syntax:


        myDatabase.GetRows(SQLCommand As String, [DirectSQL As Boolean], [Header As Boolean], [MaxRows As Long]) As Variant
    

Parameter:

SQLCommand: Ein Tabellen- oder Abfragename (ohne eckige Klammern) oder eine SQL-Anweisung SELECT.

DirectSQL: Bei True wird der SQL-Befehl ohne Voranalyse an die Datenbank-Engine gesendet. Der Standardwert ist False. Dieses Argument wird für Tabellen ignoriert. Bei Abfragen ist die angewandte Option diejenige, die festgelegt wurde, als die Abfrage definiert wurde.

Header: Wenn True, enthält die erste Zeile der zurückgegebenen Matrix die Spaltenüberschriften.

MaxRows: Die maximale Anzahl der zurückzugebenden Zeilen. Der Standardwert ist null, was bedeutet, dass die Anzahl der zurückgegebenen Zeilen unbegrenzt ist.

Beispiel:

Im Folgenden finden Sie einige Beispiele dafür, wie die Methode GetRows verwendet werden kann:


        Dim queryResults as Variant
        ' Gibt alle Zeilen in der Tabelle mit Spaltenüberschriften zurück
        queryResults = myDB.GetRows("EmployeeData", Header := True)
        ' Gibt die ersten 50 Mitarbeiterdatensätze geordnet nach dem Feld 'FirstName' zurück
        queryResults = myDB.GetRows("SELECT * FROM EmployeeData ORDER BY [FirstName]", MaxRows := 50)
    

RunSql

Führt eine Aktionsabfrage einer SQL-Anweisung aus, beispielsweise das Erstellen einer Tabelle sowie das Einfügen, Aktualisieren und Löschen von Datensätzen.

Die Methode gibt bei Erfolg True zurück.

tip

Die Methode RunSql wurde mit einer Fehlermeldung abgelehnt, falls die Datenbank zuvor im Modus "read-only" geöffnet wurde.


Syntax:


        myDatabase.RunSql(SQLCommand As String, [DirectSQL As Boolean]) As Boolean
    

Parameter:

SQLCommand: Ein Abfragename (ohne eckige Klammern) oder eine SQL-Anweisung.

DirectSQL: Bei True wird der SQL-Befehl ohne Voranalyse an die Datenbank-Engine gesendet. (Standard = False ). Bei Abfragen ist die angewandte Option diejenige, die festgelegt wurde, als die Abfrage definiert wurde.

Beispiel:


        myDatabase.RunSql("INSERT INTO [EmployeeData] VALUES(25, 'Smith', 'John')", DirectSQL := True)
    
warning

Alle Basic-Routinen oder -Identifikatoren von ScriptForge mit einem Unterstrich "_" sind für internen Gebrauch reserviert. Sie sind nicht für den Einsatz in Basic-Macros gedacht.