Tenesta SFDatabases.Database

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

Kvart eksemplar av tenesta Database representerer ein enkelt database og gjev tilgang til tabellane, spørjingane og dataa i databasen.

Denne tenesta gjev ikkje tilgang til skjema eller rapportar i Base-dokumentet som inneheld databasen. For å få tilgang til eit Base-dokument, sjå metoden FormDocuments i tenesta Base.

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 SQL-setningar enklare å lesa, kan du bruka hakeparentesar «[ ]» rundt namn på tabellar, spørjingar og felt i staden for å bruka andre omsluttande teikn som kan vera spesifikke for visse Relational Database Management Systems (RDBMS). Men merk at omsluttande teikn er obligatorisk i denne samanhengen.


Oppkall av tenester

Før du brukar tenesta Database må biblioteket ScriptForge vera lasta inn eller importert:

note

• Grunnleggjande makroar krev innlasting av biblioteket ScriptForge ved hjelp av denne setninga:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Python-skript krev import frå scriptforge-modulen:
from scriptforge import CreateScriptService


Syntaks:

For å laga eit eksemplar av tenesta Database kan du bruka metoden CreateScriptService:

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

note

I syntaksen omtalt ovanfor, kan du bruka anten «SFDatabases.Database» eller ganske enkelt «Database» som det første argumentet i metoden CreateScriptService.


Parametrar:

filnamn: Namnet på Base-fila. 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.

Omvendt, 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.

Eksempel:

I Basic

      GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
      Dim myDatabase as Object
      Set myDatabase = CreateScriptService("Database", "/home/user/Documents/myDB.odb")
      ' Køyr spørjingar, SQL-uttrykk, …
      myDatabase.CloseDatabase()
    
I Python

      from scriptforge import CreateScriptService
      myDatabase = CreateScriptService("Database", "/home/user/Documents/myDB.odb")
      # Køyr spørjingar, SQL-uttrykk, …
      myDatabase.CloseDatabase()
    

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:

I Basic

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

      ui = CreateScriptService("UI")
      doc = ui.OpenBaseDocument("/home/user/Documents/myDB.odb")
      ' Brukar og passord vert oppgjeve nedanfor om nødvendig
      myDatabase = doc.GetDatabase()
      # Køyr spørjingar, SQL-uttrykk, …
      myDatabase.CloseDatabase()
      doc.CloseDocument()
    
tip

GetDatabase-metoden brukt i eksempelet ovanfor er ein del av ScriptForge si Base-teneste.


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

OpenQuery
OpenSql
OpenTable
RunSql


CloseDatabase

Lukkar den gjeldande databasekoplinga.

Syntaks:

db.CloseDatabase()

Eksempel:


    myDatabase.CloseDatabase() ' Basic
  

    myDatabase.CloseDatabase() # Python
  

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:

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

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.

I Basic

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

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:

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

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 må vera omgjevne av hakeparentesar.

Eksempel:

I 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'")
    
I 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

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:

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

Parametrar:

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

direkte_sql: 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:

I Basic

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

      queryResults = myDB.GetRows("EmployeeData", header = True)
      queryResults = myDB.GetRows("SELECT * FROM EmployeeData ORDER BY [FirstName]", maxrows = 50)
    

OpenQuery

Opnar datavisingsvindauget for den spesifiserte spørjinga og returnerer ein førekomst av tenesta Datasheet.

Viss spørjinga ikkje kunne opnast, vert Nothing returnert.

Syntaks:

db.OpenQuery(queryname: str): obj

Parametrar:

queryname: Namnet på ei eksisterande spørjing som ein streng som skil mellom store og små bokstavar.

Eksempel:

I Basic

      myDatabase.OpenQuery("MyQuery")
    
I Python

      myDatabase.OpenQuery("MyQuery")
    

OpenSql

Køyrer ein SQL SELECT-kommando, opnar eit datavisings-vindauge med resultata og returnerer ein førekomst av tenseta Datasheet.

Syntaks:

db.OpenSql(sql: str, directsql: bool): obj

Parametrar:

sql: Ein streng som inneheld ein gyldig SQL SELECT-setning. Identifikatorane kan vera omslutta av hakeparentesar.

directsql: Når Sann,vert SQL-kommandoen sendt til databasemotoren utan førehandsanalyse (Standard = Usann).

Eksempel:

I Basic

      myDatabase.OpenSql("SELECT * FROM [Customers] ORDER BY [CITY]")
    
I Python

      myDatabase.OpenSql("SELECT * FROM [Customers] ORDER BY [CITY]")
    

OpenTable

Opnar datavisings-vindauget for den gjevne tabellen og returnerer ein førekomst av Datasheet-tenesta.

Syntaks:

db.OpenTable(tablename: str): obj

Parametrar:

tablename: Namnet på ein eksisterande tabell som ein streng som skil mellom store og små bokstavar.

Eksempel:

I Basic

      myDatabase.OpenTable("MyTable")
    
I Python

      myDatabase.OpenTable("MyTable")
    

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:

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

Parametrar:

sqlkommando: 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:

I Basic

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

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

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