Innhald
Innhaldsliste 🔎︎

# Tenesta SFDatabases.Database

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

- Få tilgang til data i databasetabellar

- Køyr SELECT-spørjingar og utfør SAMANDRAG-funksjonar.

- Køyr SQL-handlingsuttrykk som INSERT (set inn), UPDATE (oppdater), DELETE (slett) og så vidare.

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.

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.

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.

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

Det er også råd å få tilgang til databasen som er knytt til eit Base-dokument ved hjelp av tenesta ScriptForge.UI som vist i eksempelet nedanfor:

            Dim myDoc As Object, myDatabase As Object, ui As Object
            Set ui = CreateScriptService("UI")
            Set myDoc = ui.OpenBaseDocument("myDb.odb")
            ' Brukar og passord vert oppgjeve nedanfor om nødvendig
            Set myDatabase = myDoc.GetDatabase()
            '   … Køyr spørjingar, SQL-uttrykk, …
            myDoc.CloseDocument()

Metoden GetDatabase som er brukt i eksempelet ovanfor er ein del av ScriptForge-tenesta Base.

## Eigenskapar

Namn | Skriveverna | Type | Beskriving
Queries | Ja | Matrise av strengar | Lista over lagra spørjingar.
Tables | Ja | Matrise av strengar | Lista over lagra tabellar.
XConnection | Ja | XConnection | UNO-objektet som representerer den gjeldande databasekoplinga.
XMetaData | Ja | XDatabaseMetaData | UNO-objektet som representerer metadataa som forklarer attributta for databasesystemet.

Liste over metodar i tenesta database
CloseDatabase DAvg DCount | DMin DMax DSum | DLookup GetRows RunSql

## CloseDatabase

Lukkar den gjeldande databasekoplinga.

### Syntaks:

           myDatabase.CloseDatabase()

## DAvg, DCount, DMin, DMax, DSum

Reknar ut den gjevne samandragsfunksjonen for eit felt eller uttrykk som høyrer til ein tabell.

Ein SQL WHERE-setningsdel kan eventuelt setjast som eit filter som skal brukast før samandragsfunksjonen

### Syntaks:

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

### Parametrar:

Uttrykk: Eit SQL-uttrykk der feltnamna er omgjevne av hakeparentesar.

Tabellnamn: Eit tabellnamn (utan hakeparentesar).

Kriteria: Ein WHERE-setning utan «WHERE»-nøkkelordet, der feltnamna er omgjevne av hakeparentesar.

### Eksempel:

Eksempelet nedanfor går ut frå at fila Employees.odb har ein tabell med namnet EmployeeData.

          GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
          Dim myDB as Variant
          Set myDB = CreateScriptService("Database", "~/Databases/Employees.odb")
          ' Tel kor mange tilsette i tabellen
          MsgBox myDB.DCount("[ID]", "EmployeeData")
          ' Returnerer summen av alle lønningane i tabellen
          MsgBox myDB.DSum("[Salary]", "EmployeeData")
          ' Nedanfor vert det vist nokre eksempel på filtrering av tabellar
          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

Reknar ut eit SQL-uttrykk på ein enkelt post som vert returnert av ein WHERE-setning definert av parameteren Kriterium.

Viss spørjinga returnerer fleire postar, vert berre den første rekna med. Bruk parameterenOrderClause til å bestemma korleis spørjingsresultata skal sorterast.

### Syntaks:

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

### Parametrar:

Uttrykk: Eit SQL-uttrykk der feltnamna er omgjevne av hakeparentesar.

Tabellnamn: Eit tabellnamn (utan hakeparentesar).

Kriteria: Ein WHERE-setning utan «WHERE»-nøkkelordet, der feltnamna er omgjevne av hakeparentesar.

OrdeClause: Ein ORDER BY-setning utan nøkkelorda «ORDER BY». Feltnamn bør vera omgjevne av hakeparentesar.

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

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)

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.

Liknande emne

Tenesta SFDocuments.Document

Tenesta ScriptForge.UI