Słužba SFDatabases.Database

Słužba Database přistup k datowym bankam skići, kotrež su pak zasadźene pak w dokumentach Base wopisane. Tuta słužba metody skići, kotrež:

Kóžda instanca słužby Database jednotliwu datowu banku reprezentuje a skići přistup k jeje tabelam, wotprašowanjam a datam.

Tuta słužba přistup k formularam abo rozprawam w dokumenće Base njeskići, kotryž datowu banku wobsahuje. Zo byšće přistup k formularam w dokumenće Base dóstał, wužiwajće metodu FormDocuments słužby Base.

note

Wšě wuměny mjez tutej słužbu a datowej banku so jenož z pomocu SQL stawaja.


SQL-instrukcije dadźa so w direktnym abo indirektnym modusu wuwjesć. W direktnym modusu so instrukcija do engine datoweje banki přenošuje, bjez kontrole abo přepruwowanja syntaksy.

K dispoziciji stajene tykački jednore tabele a lisćiny wotprašowanjow wopřijimaja kaž tež přistup k datam datoweje banki.

tip

Zo byšće SQL-instrukcije čitajomniše činił, móžeće róžkate spinki "[]" wužiwać, zo byšće mjena tabelow, wotprašowanjow a polow wobdał, město toho, zo byšće druhe wobdawace znamješka wužiwał, kotrež su jenož za wěste relacionalne systemy za rjadowanje datowych bankow (RDBMS). Ale dźiwajće na to, zo wobdawace znamješka w tutym konteksće zawjazne su.


Wobchadźenje z transakcijemi

Po standardźe datowa banka z transakcijemi w modusu „auto-commit“ wobchadźa, to rěka, zo so po kóždej SQL-instrukciji sfiksowanje (commit) přewjedźe.

Wužiwajće metodu SetTransactionMode, zo byšće standardne zadźerženje změnił, kotrež manuelne sfiksowanja (commits) a cofnjenja (rollbacks) zmóžnja.

Metodźe Commit a Rollback so wužiwatej, zo byštej transakcije wobmjezowałoj.

W LibreOffice je pjeć typow modusow transakciskeje izolacije, kaž su w skupinje konstantow com.sun.star.sdbc.TransactionIsolation definowane:

Konstanta

Hódnota

Interpretacija

NONE

0

Wobchadźenje z transakcijemi je znjemóžnjene a datowa banka je do standardneho modusa „auto-commit“ stajena.

READ_UNCOMMITTED

1

Móža „dirty reads“ (špatne čitanja), „non-repeatable reads“ (njewospjetujomne čitanja) a „phantom reads“ (fantomowe čitanja) wustupować.

Jeli linka so přez transakciju měnja, móže druha transakcija tute změny čitać, samo hdyž njejsu so sfiksowali.

READ_COMMITTED

2

Zadźěwa špatnym čitanjam („dirty reads“) , ale njewospjetujomne čitanja (non-repeatable reads) a fantomowe čitanja (phantom reads) móža wustupować.

Tuta runina tomu zadźěwa, zo so linki z njesfiksowanymi změnami čitaja.

REPEATABLE_READ

4

Zadźěwa špatnym čitanjam („dirty reads“) a njewospjetujomnym čitanjam („non-repeatable reads“). Fantomowe čitanja („phantom reads“) wšak móža wustupować.

Njezadźěwa jenož tomu, zo so njesfiksowane daty čitaja, zadźěwa tež tomu, zo dwě čitanskej operaciji w samsnej transakciji rozdźělnej wuslědkaj wudawatej.

SERIALIZABLE

8

Zadźěwa špatnym čitanjam („dirty reads“), njewospjetujomnym čitanjam („non-repeatable reads“) a fantomowym čitanjam („phantom reads“).

Přidatnje k wobmjezowanjam předchadneje runiny, so tež zaručuje, zo datowa sadźba, kotraž klawsli WHERE wotpowěduje, w samsnej transakciji njezměnjena wostawa.


tip

Čitajće stronu Wikipedije wo izolaciji w systemach datowych bankow (němsce), zo byšće wjace wo transakciskej integriće zhonił.


Słužbowe wuwołanje

Před wužiwanjom słužby Database dyrbi so biblioteka ScriptForge začitać abo importować:

note

• Makra Basic sej wužaduja, zo so biblioteka ScriptForge z pomocu slědowaceho přikaza začituje:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Skripty Python sej import z modula scriptforge wužaduja:
from scriptforge import CreateScriptService


Syntaksa:

Zo byšće instancu słužby Database wutworił, móžeće metodu CreateScriptService wužiwać:

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

note

W horjeka wopisanej syntaksy móžeće pak „SFDatabases.Database“ pak „Database“ jako prěni argument metody CreateScriptService wužiwać.


Parametry:

filename: Mjeno dataje Base. Dyrbi so w notaciji SF_FileSystem.FileNaming zwuraznić.

registrationname: Mjeno zregistrowaneje datoweje banki. Jeli filename je podate, njeměł so tutón argument wužiwać.

Jeli wšak registrationname je podate, njeměł so parameter filename definować.

readonly: Postaja, hač so datowa banka jako přećiwo pisanju škitana wočinja (standard = True).

user, password: Přidatnej zwiskowej parametraj serwera datoweje banki.

Přikład:

W Basic

      GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
      Dim myDatabase as Object
      Set myDatabase = CreateScriptService("Database", "/home/user/Documents/myDB.odb")
      ' Wotprašowanja, SQL-instrukcije, … wuwjesć
      myDatabase.CloseDatabase()
    
W Python

      from scriptforge import CreateScriptService
      myDatabase = CreateScriptService("Database", "/home/user/Documents/myDB.odb")
      # Wotprašowanja, SQL-instrukcije, … wuwjesć
      myDatabase.CloseDatabase()
    

Přistup k datowym bankam ze słužbu UI

Je tež móžno, přez słužbu ScriptForge.UIpřistup k datowej bance dóstać, kotraž je z dokumentom zwjazana, kak so w slědowacymaj přikładomaj pokazuje:

W Basic

      Dim myDoc As Object, myDatabase As Object, ui As Object
      Set ui = CreateScriptService("UI")
      Set myDoc = ui.OpenBaseDocument("/home/user/Documents/myDB.odb")
      ' Wužiwar a hesło so deleka podawatej, jeli trjeba
      Set myDatabase = myDoc.GetDatabase()
      ' Wotprašowanja, SQL-instrukcije, … wuwjesć
      myDatabase.CloseDatabase()
      myDoc.CloseDocument()
    
W Python

      ui = CreateScriptService("UI")
      doc = ui.OpenBaseDocument("/home/user/Documents/myDB.odb")
      # Wužiwar a hesło so deleka podawatej, jeli trjeba
      myDatabase = doc.GetDatabase()
      # Wotprašowanja, SQL-instrukcije, … wuwjesć
      myDatabase.CloseDatabase()
      doc.CloseDocument()
    
tip

Metoda GetDatabase, kotraž so horjeka w přikładźe wužiwa, je dźěl słužby Base ScriptForge.


Kajkosće

Mjeno

Přećiwo pisanju škitany

Typ

Wopisanje

Queries

Haj

Matriks znamješkowych rjećazkow

Lisćina składowanych wotprašowanjow.

Tables

Haj

Matriks znamješkowych rjećazkow

Lisćina składowanych tabelow.

XConnection

Haj

XConnection

Objekt UNO, kotryž aktualny zwisk datoweje banki reprezentuje.

XMetaData

Haj

XDatabaseMetaData

Objekt UNO, kotryž metadaty reprezentuje, kotrež atributy systema datoweho banka wopisuja.


Lisćina metodow w słužbje datoweje banki

CloseDatabase
Commit
CreateDataset
DAvg
DCount
DMin

DMax
DSum
DLookup
GetRows
OpenFormDocument
OpenQuery

OpenSql
OpenTable
Rollback
RunSql
SetTransactionMode


CloseDatabase

Začinja aktualny zwisk datoweje banki.

Syntaksa:

db.CloseDatabase()

Přikład:


    myDatabase.CloseDatabase() ' Basic
  

    myDatabase.CloseDatabase() # Python
  

Commit

Fiksuje wšě aktualizacije, kotrež su so w předchadnym wołanju Commit abo Rollback přewjedli.

note

Tuta metoda so ignoruje, jeli sfiksowanja so po kóždej SQL-instrukciji awtomatisce přewjedu, t. r. datowa banka je na modus „auto-commit“ nastajena.


Syntaksa:

db.Commit()

Přikład:

W Basic

      ' Transakcisku runinu „REPEATABLE_READ“ nastajić
      myDB.SetTransactionMode(4)
      myDB.RunSql("UPDATE ...")
      myDB.Commit()
      myDB.RunSql("DELETE ...")
      ' Někajke wuměnjenje testować, prjedy hač so sfiksowanje přewjedźe
      If bSomeCondition Then
          myDB.Commit()
      Else
          myDB.Rollback()
      End If
      ' Modus „auto-commit“ wobnowić
      myDB.SetTransactionMode()
    
W Python

      myDB.SetTransactionMode(4)
      myDB.RunSql("UPDATE ...")
      myDB.Commit()
      myDB.RunSql("DELETE ...")
      if some_condition:
          myDB.Commit()
      else:
          myDB.Rollback()
      myDB.SetTransactionMode()
    

CreateDataset

Wutwori słužbowu instancu Dataset na zakładźe tabele, wotprašowanja abo SQL-přikaza SELECT.

Syntaksa:

db.CreateDataset(sqlcommand: str, opt directsql: bool, opt filter: str, opt orderby: str): svc

Parametry:

sqlcommand: Mjeno tabele, mjeno wotprašowanja bo płaćiwy SQL-přikaz SELECT. Identifikuje dadźa so přez róžkate spinki wobdać. Tutón argument na wulkopisanje dźiwa.

directsql: Stajće tutón argument na True, zo byšće přikaz bjez předźěłanja do toho přez LibreOffice direktnje na engine datoweje banki pósłał (standard = False).

filter: Podawa wuměnjenje, kotremuž datowe sadźby dyrbja wotpowědować, zo bychu so do wróćeneje datoweje sadźby přijeli. Tutón argument so jako SQL-přikaz WHERE bjez klučoweho słowa „WHERE“ zwuraznja.

orderby: Podawa porjad datoweho wobstatka jako SQL-přikaz ORDER BY bjez klučoweho słowa „ORDER BY“.

Přikład:

Slědowace přikłady w Basic a Python datowy wobstatk z datowymi sadźbami tabele z mjenom „Kupcy“ wróća.

W Basic

      oDataset = myDatabase.CreateDataset("Kupcy", Filter := "[Name] LIKE 'A'")
    
W Python

      dataset = myDatabase.CreateDataset("Kupcy", Filter = "[Name] LIKE 'A'")
    

DAvg, DCount, DMin, DMax, DSum

Wobličuje podatu agregatnu funkciju za polo abo wuraz, kotryž k tabeli słuša.

Na přeće móžeće SQL-klawslu WHERE jako filter podać, kotryž so před agregatnej funkciju nałožuje.

Syntaksa:

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

Parametry:

expression: SQL-wuraz, w kotrymž su pólne mjena z róžkatymi spinkami wobdate.

tablename: Mjeno tabele (bjez róžkatych spinkow).

criteria: Klawsla WHERE bjez klučoweho słowa „WHERE“, w kotrejž su pólne mjena z róžkatymi spinkami wobdate.

Přikład:

Slědowacy přikład připušća, zo dataja Employees.odb ma tabelu z mjenom EmployeeData.

W Basic

      GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
      Dim myDB as Variant
      Set myDB = CreateScriptService("Database", "/home/user/Databases/Employees.odb")
      ' Liči ličbu sobudźěłaćerjow w tabeli
      MsgBox myDB.DCount("[ID]", "EmployeeData")
      ' Wróći sumu wšěch mzdow w tabeli
      MsgBox myDB.DSum("[Salary]", "EmployeeData")
      ' Deleka su někotre přikłady za to, kak tabele dadźa so filtrować
      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%'")
    
W 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

Wobličuje SQL-wuraz za jednotliwu datowu sadźbu, kotraž so přez klawslu WHERE wróća, kotraž je přez parameter Criteria definowana.

Jeli wotprašowanje wjacore datowe sadźby wróća, so jenož prěnja wobkedźbuje. Wužiwajće parameter OrderClause, zo byšće postajił, kak so maja wuslědki wotprašowanja sortěrować.

Syntaksa:

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

Parametry:

expression: SQL-wuraz, w kotrymž su pólne mjena z róžkatymi spinkami wobdate.

tablename: Mjeno tabele (bjez róžkatych spinkow).

criteria: Klawsla WHERE bjez klučoweho słowa „WHERE“, w kotrejž su pólne mjena z róžkatymi spinkami wobdate.

orderclause: Klawsla ORDER BY bjez klučoweju słowow „ORDER BY“. Pólne mjena měli so z róžkatymi spinkami wobdać.

Přikład:

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

Składuje wobsah tabele abo wuslědki wotprašowanja SELECT abo SQL-přikaz w dwudimensionalnej matriksy. Prěni indeks w matriksy linkam wotpowěduje a druhi indeks so na špalty poćahuje.

Hornja mjeza da so za ličbu wróćenych linkow podać. Na přeće dadźa so špaltowe mjeno w prěnjej lince matriksy zasadźić.

Wróćena matriks budźe prózdna, jeli so žane linki njewróćeja a špaltowe hłowy trěbne njejsu.

Syntaksa:

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

Parametry:

sqlcommand: Mjeno tabele abo wotprašowanja (bjez róžkatych spinkow) abo SQL-přikaz SELECT.

directsql: Hdyž hódnota nastajenja je True, so přikaz SQL na jednotku datoweje banki bjez analyzy do toho sćele. Standard je False. Tutón argument so za tabele ignoruje. Za wotprašowanja so te nastajenje nałožuje, kotrež je so postajiło, hdyž je so wotprašowanje definowało.

header: Hdyž to je True, prěnja linka wróćeneje matriksy špaltowe hłowy wobsahuje.

maxrows: Maksimalna ličba linkow, kotrež so maja wróćić. Standard je nul, štož rěka, zo limit za ličbu wróćenych linkow njeje.

Přikład:

Deleka su někotre přikłady za to, kak metoda GetRows da so wužiwać:

W Basic

      Dim queryResults as Variant
      ' Wróći wšě linki w tabeli ze špaltowymi hłowami
      queryResults = myDB.GetRows("EmployeeData", Header := True)
      ' Wróći prěnje 50 datowych sadźbow sobudźěłaćerjow, zrjadowane po polu ‚FirstName‘
      queryResults = myDB.GetRows("SELECT * FROM EmployeeData ORDER BY [FirstName]", MaxRows := 50)
    
W Python

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

OpenFormDocument

Wočinja podaty formularowy dokument w normalnym modusu. Tuta metoda słužbowu instancu FormDocument wróća, kotraž podatemu formularowemu dokumentej wotpowěduje.

Jeli formularowy dokument je hižo wočinjeny, so wokno formularoweho dokumenta aktiwizuje.

Jeli podaty formularowy dokument njeeksistuje, so Nothing wróći.

Syntaksa:

svc.OpenFormDocument(formdocument: str): svc

Parametry:

formDocument: Mjeno za FormDocument, kotryž so ma wočinić, jako znamješkowy rjećazk, kotryž wulkopisanje wobkedźbuje.

Přikład:

W Basic

Najwjace formularowych dokumentow so w korjenjowym zapisu dokumenta Base składuje a da so prosće z pomocu jich mjenow wočinić, kaž w slědowacym přikładźe:


    Dim oFormDoc As Object
    oFormDoc = myDB.OpenFormDocument("myFormDocument")
  

Jeli formularowe dokumenty su w rjadowakach organizowane, dyrbi so mjeno rjadowaka zapřijeć, zo by so formularowy dokument jako wočinjeny postajił, kaž so w slědowacym přikładźe pokazuje:


    oFormDoc = myDB.OpenFormDocument("myFolder/myFormDocument")
  
W Python

    formDoc = myDB.OpenFormDocument("myFormDocument")
  

    formDoc = myDB.OpenFormDocument("myFolder/myFormDocument")
  

OpenQuery

Wočinja wokno datoweho napohlada podateho wotprašowanja a wróći instancu słužby Datasheet.

Jeli wotprašowanje njeda so wočinić, so Nothing wróći.

Syntaksa:

db.OpenQuery(queryname: str): obj

Parametry:

queryname: Mjeno eksistowaceho wotprašowanja jako znamješkowy rjećazk, kotryž wulkopisanje wobkedźbuje.

Přikład:

W Basic

      myDatabase.OpenQuery("MyQuery")
    
W Python

      myDatabase.OpenQuery("MyQuery")
    

OpenSql

Wuwjedźe SQL-přikaz SELECT, wočinja wokno Datowy napohlad z wuslědkami a wróća instancu słužby Datasheet.

Syntaksa:

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

Parametry:

sql: Znamješkowy rjećazk, kotryž płaćiwy SQL-přikaz SELECT wobsahuje. Identifikatory dadźa so z róžkatymi spinkami wobdać.

directsql: Hdyz to je True, so SQL-přikaz na engine datoweje banki bjez analyzy do toho sćele (standard = False).

Přikład:

W Basic

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

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

OpenTable

Wočinja wokno datoweho napohlada podateje tabele a wróći instancu słužby Datasheet.

Syntaksa:

db.OpenTable(tablename: str): obj

Parametry:

tablename: Mjeno eksistowaceje tabele jako znamješkowy rjećazk, kotryž wulkopisanje wobkedźbuje.

Přikład:

W Basic

      myDatabase.OpenTable("MyTable")
    
W Python

      myDatabase.OpenTable("MyTable")
    

Rollback

Přetorhnje wšě změny, kotrež su so na datowej bance wot poslednjeho wołanja Commit abo Rollback přewjedli.

Syntaksa:

db.Rollback()

Přikład:

W Basic

      myDB.SetTransactionMode(1)
      myDB.RunSql("UPDATE ...")
      ' ...
      If bSomeCondition Then
          myDB.Rollback()
      End If
    
W Python

      myDB.SetTransactionMode(1)
      myDB.RunSql("UPDATE ...")
      # ...
      if bSomeCondition:
          myDB.Rollback()
    

RunSql

Wuwjedźe akciske wotprašowanje SQL-přikaza kaž wutworjenje tabele kaž tež zasadźowanje, aktualizowanje a hašenje datowych sadźbow.

Metoda True wróća, hdyž je wuspěšne.

tip

Metoda RunSql so ze zmylkowej zdźělenku wotpokazuje, jeli datowa banka je so do toho w modusu „read-only“ wočiniła.


Syntaksa:

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

Parametry:

sqlcommand: Mjeno wotprašowanja (bjez róžkatych spinkow) abo SQL-přikaz.

directsql: Hdyž to je True so SQL-přikaz na engine datoweje banki bjez analyzy do toho sćele. (standard = False). Za wotprašowanja je nałožene nastajenje te, kotrež je so stajiło, hdyž je so wotprašowanje definowało.

Přikład:

W Basic

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

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

SetTransactionMode

Definuje runinu izolacije w transakcijach datoweje banki.

Po standardźe datowe banki transakcije w modusu „auto-commit“ rjaduja, to rěka, zo so Commit awtomatisce po kóždym SQL-přikazu wuwjedźe.

Wužiwajće tutu metodu, zo byšće izolacisku runinu transakcijow manuelnje postajił. Hdyž druhi transakciski modus hač NONE je nastajeny, dyrbi skript eksplicitnje metodu Commit wuwołać, zo by změny na datowu banku nałožił.

Tuta metoda True wróća, hdyž je wuspěšna.

warning

Hdyž so transakciski modus měnja, so wšě instancy Dataset začinjeja, kotrež su so z aktualneje datoweje banki wutworili.


Syntaksa:

db.SetTransactionMode(transactionmode: int = 0): bool

Parametry:

transactionmode: Podawa transakciski modus. Tutón argument dyrbi jedna z konstantow być, kotrež su w com.sun.star.sdbc.TranslationIsolation definowane (standard = NONE)

note

Čitajće wotrězk Wobchadźenje z transakcijemi horjeka, zo byšće wjace wo runinach transakciskeje izolacije zhonił, kotrež so w LibreOffice wužiwaja.


Přikład:

W Basic

      myDB.SetTransactionMode(com.sun.star.sdbc.TransactionIsolation.REPEATABLE_READ)
      oDataset = myDB.CreateDataset("SELECT ...")
      ' ...
      ' Transakciski modus na standard wróćo stajić
      myDB.SetTransactionMode()
    
W Python

      from com.sun.star.sdbc import TransactionIsolation
      myDB.SetTransactionMode(TransactionIsolation.REPEATABLE_READ)
      dataset = myDB.CreateDataset("SELECT ...")
      # ...
      myDB.SetTransactionMode()
    
warning

Wšě rutiny Basic ScriptForge abo identifikatory, kotrež so z podsmužku „_“ započinaja, su za interne wužiwanje wuměnjene. Njejsu za to myslene, so w makrach Basic abo skriptach Python wužiwać.


Prošu podpěrajće nas!