Tenesta SFDatabases.Database

Tenesta Database gjev tilgang til databasar anten innebygde eller omtalte i Base-dokument. Denne tenesta leverer metodar til:

Kvar førekomst av tenesta Database representerer éin database og gjev tilgang til tabellar, spørjingar og data i denne. Denne tenesta gjev ikkje tilgang til skjema eller rapportar i Base-dokumentet.

note

Alle utvekslingar mellom denne tenesta og databasen vert gjort berre ved hjelp av SQL.


SQL-uttrykk kan køyrast i direct (direkte) eller indirect (indirekte) modus. I direkte tilstand vert uttrykket overført til databasemotoren utan kontroll av syntaksen eller gjennomsyn.

Grensesnitta som føljer med, inkluderer enkle tabellar og spørjingar i tillegg til tilgang til databasedata.

tip

For å gjera det lettare å lesa SQL-setningar, kan du bruka valfrie hakeparentesar rundt tabellar, spørjingar og felt i staden for å bruke andre omsluttande teikn som kan vera eksklusive for visse RDBMS (Relational Database Management Systems).


Oppkall av tenester

Syntaks:

Kodesnutten nedanfor viser korleis du kan få tilgang til ein vilkårleg database med tenesta Database.


        Dim myDatabase As Object
        Set myDatabase = CreateScriptService("SFDatabases.Database", [FileName], [RegistrationName], [ReadOnly], [User, [Password]])
        '   … Køyr spørjingar, SQL-uttrykk, …
        myDatabase.CloseDatabase()
    

Parametrar:

Filnamn: Namnet på basisfila. Må uttrykkjast ved hjelp av SF_FileSystem.FileNaming-notasjon.

Registreringsnamn: Namnet på ein registrert database. Dette argumentet bør ikkje brukast viss det er gjeve eit filnamn.

Viss det er gjeve eit Registreringsnamn, bør ikkje parameteren Filnamn definerast.

Skriveverna: Bestemmer om databasen skal opnast som skriveverna. (Standard = Sann).

Brukar, passord: Fleire tilkoplingsparameter til databasetenaren.

note

Denne tenesta har full støtte både i Basic og Python. Alle eksempla er skrivne i programmeringsspråket Basic og kan enkelt omformast til Python.


Tilgang til databasen med tenesta UI

It is also possible to access the database associated with a Base document using the ScriptForge.UI service, as shown in the example below:


        Dim myDoc As Object, myDatabase As Object, ui As Object
        Set ui = CreateScriptService("UI")
        Set myDoc = ui.OpenBaseDocument("myDb.odb")
        ' User and password are supplied below, if needed
        Set myDatabase = myDoc.GetDatabase()
        '   ... Run queries, SQL statements, ...
        myDoc.CloseDocument()
    
tip

The GetDatabase method used in the example above is part of ScriptForge's Base service.


Properties

Name

Skriveverna

Type

Beskriving

Queries

Yes

Array of strings

The list of stored queries.

Tables

Yes

Array of strings

The list of stored tables.

XConnection

Yes

XConnection

The UNO object representing the current database connection.

XMetaData

Yes

XDatabaseMetaData

The UNO object representing the metadata describing the database system attributes.


List of Methods in the Database Service

CloseDatabase
DAvg
DCount

DMin
DMax
DSum

DLookup
GetRows
RunSql


CloseDatabase

Closes the current database connection.

Syntaks:


       myDatabase.CloseDatabase()
     

DAvg, DCount, DMin, DMax, DSum

Computes the given aggregate function on a field or expression belonging to a table.

Optionally, a SQL WHERE clause can be specified as a filter that will be applied prior to the aggregate function.

Syntaks:


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

Parametrar:

Expression: A SQL expression in which the field names are surrounded with square brackets.

TableName: A table name (without square brackets).

Criteria: A WHERE clause without the "WHERE" keyword, in which field names are surrounded with square brackets.

Eksempel:

The example below assumes the file Employees.odb has a table named EmployeeData.


      GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
      Dim myDB as Variant
      Set myDB = CreateScriptService("Database", "~/Databases/Employees.odb")
      ' Counts the number of employees in the table
      MsgBox myDB.DCount("[ID]", "EmployeeData")
      ' Returns the sum of all salaries in the table
      MsgBox myDB.DSum("[Salary]", "EmployeeData")
      ' Below are some examples of how tables can be filtered
      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

Computes a SQL expression on a single record returned by a WHERE clause defined by the Criteria parameter.

If the query returns multiple records, only the first one is considered. Use the OrderClause parameter to determine how query results are sorted.

Syntaks:


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

Parametrar:

Expression: A SQL expression in which the field names are surrounded with square brackets.

TableName: A table name (without square brackets).

Criteria: A WHERE clause without the "WHERE" keyword, in which field names are surrounded with square brackets.

OrderClause: An ORDER BY clause without the "ORDER BY" keywords. Field names should be surrounded with square brackets.

Eksempel:


        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

Lagrar innhaldet i ein tabell eller resultatet av ei SELECT-spørjing eller av eit SQL-uttrykk i ei todimensjonal matrise. Den første indeksen i matrisa svarar til radene og den andre indeksen til kolonnane.

Du kan setja ei øvre grense for kor mange rader som skal returnerast. Kolonnenamn kan eventuelt setjast inn i den første rada i matrisa.

Den returnerte matrisa vil vera tom viss det ikkje vert returnert rader og det ikkje krevst kolonneoverskrifter.

Syntaks:


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

Parametrar:

SQLCommand (SQL-kommando): Eit tabell- eller spørjingsnamn (utan hakeparentesar) eller eit SELECT SQL-uytrykk.

DirectSQL: Når denne er Sann, vert SQL-kommandoen sendt til databasemotoren utan førehandsanalyse. Standard er Usann. Argumentet vert ignorert for tabellar. For spørjingar er det brukte alternativet det som vart sett då spørjinga vart definert.

Header (overskrift): Når denne er Sann inneheld den første rada i den returnerte matrisa kolonneoverskriftene.

MaxRows (maks-rader): Det høgste talet på rader som kan returnerast. Standard er null, som tyder at det er inga grense for kor mange rader som kan returnerast.

Eksempel:

Nedføre er det nokre eksempel på korleis metoden GetRows kan brukast:


        Dim queryResults as Variant
        ' Returnerer alle radene i tabellen med kolonneoverskrifter
        queryResults = myDB.GetRows("EmployeeData", Header := True)
        ' Returnerer dei første 50 tilsettepostane sortert etter feltet «Fornamn»
        queryResults = myDB.GetRows("SELECT * FROM EmployeeData ORDER BY [FirstName]", MaxRows := 50)
    

RunSql

Utfører ei handlingsspørjing for ei SQL-setning, for eksempel oppretting av ein tabell, i tillegg til å setja inn, oppdatera og sletta postar.

Metoden returnerer Sann når han lukkast.

tip

Metoden RunSql vert avvist med ei feilmelding dersom databasen tidlegare vart opna som skriveverna.


Syntaks:


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

Parametrar:

SQLCommand: Eit spørjingsnamn (utan hakeparentesar) eller eit SQL-uttrykk.

DirectSQL: Når denne er Sann, vert SQL-kommandoen sendt til databasemotoren utan førehandsanalyse. (Standard er Usann). For spørjingar er det brukte alternativet det som vart sett då spørjinga vart definert.

Eksempel:


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

Alle Basic-rutinane og -identifikatorane i ScriptForge som vert innleidde med understrek «_» er reserverte for internt bruk. Dei er ikkje tenkt brukte i Basic-makroar.