Dienst SFDatabases.Database

Der Dienst Database bietet Zugriff auf Datenbanken, die entweder eingebettet oder in Base-Dokumenten 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, das die Datenbank enth├Ąlt. Um auf Formulare in einem Base-Dokument zuzugreifen, verwenden Sie die Methode FormDocuments des Dienstes Base.

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 eckige Klammern "[]" verwenden, um Namen von Tabellen, Abfragen und Feldern einzuschlie├čen, anstatt andere einschlie├čende Zeichen zu verwenden, die m├Âglicherweise nur f├╝r bestimmte relationale Datenbankverwaltungssysteme (RDBMS) gelten. Beachten Sie jedoch, dass umschlie├čende Zeichen in diesem Zusammenhang obligatorisch sind.


Dienstaufruf

Vor der Verwendung des Dienstes Database muss die Bibliothek ScriptForge geladen oder importiert werden:

note

ÔÇó Grundlegende Makros erfordern das Laden der Bibliothek ScriptForge mit der folgenden Anweisung:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

ÔÇó Python-Skripte erfordern einen Import aus dem Modul scriptforge:
from scriptforge import CreateScriptService


Syntax:

Um eine Instanz des Dienstes Database zu erstellen, k├Ânnen Sie die Methode CreateScriptService verwenden:

CreateScriptService("SFDatabases.Database", [filename: str], [registrationname], [readonly], [user, [password]]): svc

note

In der oben beschriebenen Syntax k├Ânnen Sie entweder "SFDatabases.Database" oder einfach "Database" als erstes Argument der Methode CreateScriptService verwenden.


Parameter:

filename: Der Name der Base-Datei. Muss in der Notation SF_FileSystem.FileNaming ausgedr├╝ckt werden.

registrationname: Der Name einer registrierten Datenbank. Wenn filename angegeben wird, sollte dieses Argument nicht verwendet werden.

Wenn hingegen 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.

Beispiel:

In Basic

      GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
      Dim myDatabase as Object
      Set myDatabase = CreateScriptService("Database", "/home/user/Documents/myDB.odb")
      ' Abfragen, SQL-Anweisungen, ÔÇŽ ausf├╝hren
      myDatabase.CloseDatabase()
    
In Python

      from scriptforge import CreateScriptService
      myDatabase = CreateScriptService("Database", "/home/user/Documents/myDB.odb")
      # Abfragen, SQL-Anweisungen, ÔÇŽ ausf├╝hren
      myDatabase.CloseDatabase()
    

Zugriff auf Datenbanken mit dem Dienst "UI"

Es ist auch m├Âglich, ├╝ber den Dienst ScriptForge.UI auf die mit einem Base-Dokument verkn├╝pfte Datenbank zuzugreifen, wie in den folgenden Beispielen gezeigt:

In Basic

      Dim myDoc As Object, myDatabase As Object, ui As Object
      Set ui = CreateScriptService("UI")
      Set myDoc = ui.OpenBaseDocument("/home/user/Documents/myDB.odb")
      ' Benutzer und Kennwort werden unten angegeben, falls erforderlich
      Set myDatabase = myDoc.GetDatabase()
      ' Abfragen, SQL-Anweisungen, ÔÇŽ ausf├╝hren
      myDatabase.CloseDatabase()
      myDoc.CloseDocument()
    
In Python

      ui = CreateScriptService("UI")
      doc = ui.OpenBaseDocument("/home/user/Documents/myDB.odb")
      # Benutzer und Kennwort werden unten angegeben, falls erforderlich
      myDatabase = doc.GetDatabase()
      # Abfragen, SQL-Anweisungen, ÔÇŽ ausf├╝hren
      myDatabase.CloseDatabase()
      doc.CloseDocument()
    
tip

Die im obigen Beispiel verwendete Methode GetDatabase ist Teil von ScriptForges Dienst Base.


Eigenschaften

Name

Schreibgesch├╝tzt

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:

db.CloseDatabase()

Beispiel:


    myDatabase.CloseDatabase() ' Basic
  

    myDatabase.CloseDatabase() # Python
  

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:

db.DAvg(expression: str, tablename: str, [criteria: str]): any

db.DCount(expression: str, tablename: str, [criteria: str]): any

db.DMin(expression: str, tablename: str, [criteria: str]): any

db.DMax(expression: str, tablename: str, [criteria: str]): any

db.DSum(expression: str, tablename: str, [criteria: str]): any

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 in eckige Klammern eingeschlossen sind.

Beispiel:

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

In Basic

      GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
      Dim myDB as Variant
      Set myDB = CreateScriptService("Database", "/home/user/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%'")
    
In Python

      myDB = CreateScriptService("Database", "/home/user/Databases/Employees.odb")
      bas = CreateScriptService("Basic")
      bas.MsgBox(myDB.DCount("[ID]", "EmployeeData"))
      bas.MsgBox(myDB.DSum("[Salary]", "EmployeeData"))
      bas.MsgBox(myDB.DCount("[ID]", "EmployeeData", "[Position] = 'Manager'"))
      bas.MsgBox(myDB.DCount("[ID]", "EmployeeData", "[Position] = 'Sales' AND [City] = 'Chicago'"))
      bas.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:

db.DLookup(expression: str, tablename: str, [criteria:str], [orderclause: str]): any

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 in eckige Klammern eingeschlossen sind.

orderclause: Eine Klausel ORDER BY ohne die Schl├╝sselw├Ârter "ORDER BY". Feldnamen sollten in eckige Klammern eingeschlossen werden.

Beispiel:

In Basic

      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'")
    
In Python

      bas = CreateScriptService("Basic")
      bas.MsgBox(myDB.DLookup("[FirstName]", "EmployeeData", criteria = "[LastName] LIKE 'Smith'", orderclause = "[FirstName] DESC"))
      bas.MsgBox(myDB.DLookup("[Salary]", "EmployeeData", criteria = "[ID] = '3'"))
      bas.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:

db.GetRows(sqlcommand: str, directsql: bool = False, header: bool = False, maxrows: int = 0): any

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:

In Basic

      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)
    
In Python

      queryResults = myDB.GetRows("EmployeeData", header = True)
      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:

db.RunSql(sqlcommand: str, directsql: bool = False): bool

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:

In Basic

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

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

Alle ScriptForge Basic-Routinen oder Bezeichner, denen ein Unterstrich "_" vorangestellt ist, sind f├╝r den internen Gebrauch reserviert. Sie sind nicht f├╝r die Verwendung in Basic-Makros oder Python-Skripten vorgesehen.


Bitte unterst├╝tzen Sie uns!