Indhold
Indholdsfortegnelse 🔎︎

# Tjenesten SFDatabases.Database

Tjenesten Database giver adgang til databaser enten indlejrede eller beskrevet i Base-dokumenter. Denne tjeneste leverer metoder til:

- Få adgang til data i databasetabeller

- Kør SELECT (udvælg) forespørgsler og foretag AGGREGER-funktioner.

- Kør SQL-handlingsudtryk såsom INSERT (indsæt), UPDATE (opdater), DELETE (slet) og så videre.

Hver forekomst af tjenesten Database repræsenterer en enkelt database og giver adgang til dens tabeller, forespørgsler og data. Denne tjeneste giver ikke adgang til formularer eller rapporter i Base-dokumentet.

Alle udvekslinger mellem denne tjeneste og databaser udføres udelukkende med SQL.

SQL-udtryk kan udføres i direct (direkte) eller indirect (indirekte) tilstand. I direkte tilstand overføres udtrykket til databasemotoren uden noget syntaks-tjek eller -gennemsyn.

De leverede brugerflader inkluderer tabel- og forespørgsels-lister så vel som adgang til databasens data.

For at gøre SQL-udtryk mere læselige kan du bruge firkantede klammer til at omslutte tabeller, forespørgsler og felter i stedet for at bruge andre omsluttende tegn, der kan være særegne for visse Relationsdatabase administrationssystemer (Relational Database Management Systems = RDBMS).

## Kald af tjeneste

### Syntaks:

Kodestumpen herunder viser, hvordan du tilgår en vilkårlig database med tjenesten Database.

            Dim myDatabase As Object
            Set myDatabase = CreateScriptService("SFDatabases.Database", [FileName], [RegistrationName], [ReadOnly], [User, [Password]])
            '   ... Kør forespørgsler, SQL-udtryk ...
            myDatabase.CloseDatabase()

### Parametre:

FileName (filnavn): Basefilens navn. Skal udtrykkes i SF_FileSystem.FileNaming (filnavngivelse)-notation.

RegistrationName (registreringsnavn): Navnet på en registreret database. Hvis der er givet et filnavn, bør dette argument ikke bruges.

Hvis der modsætningsvis er angivet et RegistrationName (registreringsnavn), bør parametren FileName (filnavn) ikke defineres.

Skrivebeskyttet: Bestemmer, om databasen bliver åbner som skrivebeskyttet (Standard = True (sand)).

User, Password (bruger, adgangskode): Ydeligere forbindelsesparametre til database-serveren.

Denne tjeneste er fuldt understøttet i sprogene Basic og Python. Alle eksempler udtrykkes med programmeringssproget Basic og kan let konverteres til Python.

## Tilgang til databaser med tjenesten UI

Det er også muligt at tilgå den database, der er tilknyttet et Base-dokument med tjenesten ScriptForge.UI, som vist i eksemplet herunder:

            Dim myDoc As Object, myDatabase As Object, ui As Object
            Set ui = CreateScriptService("UI")
            Set myDoc = ui.OpenBaseDocument("myDb.odb")
            ' Bruger og adgangskode opgives, om nødvendigt, herunder
            Set myDatabase = myDoc.GetDatabase()
            '   ... Kør forespørgsler, SQL-udtryk ...
            myDoc.CloseDocument()

Metoden GetDatabase, der bruges i eksemplet ovenfor er en del af ScriptForge-tjenesten Base.

## Egenskaber

Navn | Readonly (skrivebeskyttet) | Type (type) | Description (beskrivelse)
Queries | Yes (ja) | Array of strings (matrix af strenge) | Listen over gemte forespørgsler.
Tables | Yes (ja) | Array of strings (matrix af strenge) | Listen over gemte tabeller.
XConnection | Yes (ja) | XConnection | UNO-objektet, der repræsenterer den aktuelle dataforbindelse.
XMetaData | Yes (ja) | XDatabaseMetaData | UNO-objektet, der repræsenterer de metadata, der beskriver databasens systemattributter.

Liste over metoder i tjenesten Database
CloseDatabase DAvg DCount | DMin DMax DSum | DLookup GetRows RunSql

## CloseDatabase

Lukker den aktuelle database-forbindelse.

### Syntaks:

           myDatabase.CloseDatabase()

## DAvg, DCount, DMin, DMax, DSum

Beregner den givne aggreger-funktion på et felt eller udtryk, der hører til en tabel.

Valgfrit kan en SQL WHERE (hvor)-sætning angives som et filer, der anvendes forud for aggreger-funktionen.

### Syntaks:

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

### Parametre:

Expression (udtryk): Et SQL-udtryk, hvor feltnavnene er omsluttet af kantede klammer.

TableName (tabelnavn): Et tabelnavn (uden kantede klammer).

Criteria (kriterier): En WHERE-sætning uden nøgleordet "WHERE", hvor feltnavne er omsluttet med kantede klammer.

### Eksempel:

Eksemplet herunder antager, at filen Employees.odb (ansatte.odb) har en tabel med navnet EmployeeData (ansattes data).

          GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
          Dim myDB as Variant
          Set myDB = CreateScriptService("Database", "~/Databases/Employees.odb")
          ' Tæller antallet af ansatte i tabellen
          MsgBox myDB.DCount("[ID]", "EmployeeData")
          ' Returnerer summen af alle lønninger i tabellen
          MsgBox myDB.DSum("[Salary]", "EmployeeData")
          ' Herunder ses nogle eksempler på, hvordan tabeller kan filtreres
          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

Beregner et SQL-udtryk i en enkelt post, returneret af en WHERE (hvor)-sætning, defineret af parameteren Criteria (Kriterier).

Hvis forespørgslen returnerer flere poster, tages kun den første i betragtning. Brug parameteren OrderClause (rækkefølge-sætning) for at afgøre, hvordan resultaterne af forespørgslen er sorteret.

### Syntaks:

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

### Parametre:

Expression (udtryk): Et SQL-udtryk, hvor feltnavne er omsluttet af kantede klammer.

TableName (tabelnavn): Et tabelnavn (uden klammer).

Criteria (kriterier): En WHERE (hvor)-sætning uden nøgleordet "WHERE", hvor feltnavne er omsluttet med klammer.

OrderClause (rækkefølge-sætning): En ORDER BY (sorter efter)-sætning uden nøgleordene "ORDER BY". Feltnavne bør være omsluttet af klammer.

### 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

Gemmer indholdet af en tabel eller resultater af en SELECT (udvælg)-forespøgsel eller af et SQL-udtryk i en todimensionel matrix. Det første indeks i matrixen svarer til rækkerne og det andet indeks til kolonnerne.

Der kan angives en øvre grænse for antallet af returnerede rækker. Valgfrit kan kolonnenavne indsættes i matrixens første række.

Den returnerede matrix er tom, hvis ingen rækker returneres og der ikke kræves kolonneoverskrifter.

### Syntaks:

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

### Parametre:

SQLCommand (SQL-kommando): Et tabel- eller forespørgselsnavn (uden klammer) eller et SELECT (udvælg) SQL-udtryk.

DirectSQL (direkte SQL): Når True (sand), sendes SQL-kommandoen til databasemotoren uden forhåndsanalyse. Standard er False (falsk). Dette argument ignoreres ved tabeller. Ved forespørgsler er den anvendte indstilling den, der blev sat, da forespørgslen blev defineret.

Header (overskrift): Når True (sand), indeholder den første række i den returnerede matrixen kolonneoverskrifterne.

MaxRows (maks-rækker): Det maksimale antal rækker, der skal returneres. Standard er nul, hvilket betyder, at der ikke er nogen grænse for antallet af returnerede rækker.

### Eksempel:

Herunder er der nogle få eksempler på, hvordan metoden GetRows kan bruges:

            Dim queryResults as Variant
            ' Returnerer alle rækker i tabellen med kolonneoverskrifter
            queryResults = myDB.GetRows("EmployeeData", Header := True)
            ' Returnerer de første 50 poster sorteret efter feltet 'FirstName' (fornavn)
            queryResults = myDB.GetRows("SELECT * FROM EmployeeData ORDER BY [FirstName]", MaxRows := 50)

## RunSql

Udfører en SQL-erklærings handlingsforespørgsel såsom at oprette en tabel, såvel som indsættelse, opdatering og sletning af poster.

Metoden returnerer True (sand), når den lykkes.

Metoden RunSql (kør SQL) forkastes med en fejlmeddelelse i det tilfælde, at databasen tidligere blev åbnet i skrivebeskyttet tilstand.

### Syntaks:

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

### Parametre:

SQLCommand (SQL-kommando): et forespørgselsnavn (uden klammer) eller en SQL-erklæring.

DirectSQL (direkte SQL): Når True (sand), sendes SQL-kommando til databasemotoren uden forhåndsanalyse. (Standard = False (falsk)). Ved forespørgsler er den anvendte indstilling den, der blev sat, da forespørgslen blev defineret.

### Eksempel:

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

Alle ScriptForge Basic-rutiner eller identifikatorer, som indledes med et understregningstegn "_" er reserveret til internt brug. De er ikke beregnet til brug i Basic-makroer.

Relaterede emner

Tjenesten SFDocuments.Document

Tjenesten ScriptForge.UI (brugerflade)