Tulong sa LibreOffice 25.8
Ang Database nagbibigay ng access ang serbisyo sa mga database na naka-embed o inilarawan sa mga Base na dokumento. Nagbibigay ang serbisyong ito ng mga pamamaraan upang:
Kumuha ng access sa data sa mga talahanayan ng database.
Takbo PUMILI mga query at magsagawa ng mga pinagsama-samang function.
Patakbuhin ang mga pahayag ng pagkilos ng SQL tulad ng INSERT , I-UPDATE , I-DELETE , atbp.
Ang bawat pagkakataon ng Database Ang serbisyo ay kumakatawan sa isang solong database at nagbibigay ng access sa mga talahanayan, query at data nito.
Ang serbisyong ito ay hindi nagbibigay ng access sa mga form o ulat sa Base na dokumento na naglalaman ng database. Upang ma-access ang mga form sa isang Base na dokumento, sumangguni sa pamamaraan FormDocuments ng Base serbisyo.
Ang lahat ng palitan sa pagitan ng serbisyong ito at ng database ay ginagawa gamit lamang ang SQL.
Maaaring tumakbo ang mga SQL statement direkta o hindi direkta mode. Sa direktang mode ang pahayag ay inililipat sa database engine nang walang anumang pagsusuri o pagsusuri ng syntax.
Kasama sa mga ibinigay na interface ang mga simpleng talahanayan at listahan ng mga query, pati na rin ang pag-access sa data ng database.
Upang gawing mas madaling mabasa ang mga SQL statement, maaari kang gumamit ng mga square bracket na "[ ]" upang ilakip ang mga pangalan ng mga talahanayan, query at field sa halip na gumamit ng iba pang mga nakalakip na character na maaaring eksklusibo sa ilang Relational Database Management Systems (RDBMS). Ngunit mag-ingat na ang pagsasama ng mga character ay sapilitan sa kontekstong ito.
Bilang default, pinangangasiwaan ng database ang mga transaksyon sa auto-commit mode, ibig sabihin, ang commit ay ginagawa pagkatapos ng bawat SQL statement.
Gamitin ang Itakda angTransactionMode paraan upang baguhin ang default na gawi, na nagbibigay-daan para sa mga manu-manong commit at rollback.
Ang mga pamamaraan Mangako at Rollback ay ginagamit upang limitahan ang mga transaksyon.
Sa LibreOffice, mayroong limang uri ng mga mode ng paghihiwalay ng transaksyon, gaya ng tinukoy sa com.sun.star.sdbc.TransactionIsolation pare-parehong pangkat:
| pare-pareho | Halaga | Interpretasyon | 
|---|---|---|
| NONE | 0 | Ang paghawak ng transaksyon ay hindi pinagana at ang database ay nakatakda sa default na auto-commit mode. | 
| READ_UNCOMMITTED | 1 | Maaaring mangyari ang mga maruruming pagbabasa, hindi nauulit na pagbabasa, at mga phantom read. Kung ang isang row ay binago ng isang transaksyon, mababasa ng isa pang transaksyon ang mga pagbabagong ito kahit na hindi pa ito ginawa. | 
| READ_COMMITTED | 2 | Ang mga maruruming pagbabasa ay pinipigilan, gayunpaman ang mga hindi nauulit na pagbabasa at phantom na pagbabasa ay maaaring mangyari. Pinipigilan ng antas na ito na basahin ang mga hilera na may mga hindi nakasaad na pagbabago. | 
| REPEATABLE_READ | 4 | Ang mga maruruming pagbabasa at hindi nauulit na pagbabasa ay pinipigilan. Gayunpaman, maaaring mangyari ang mga phantom reads. Bukod sa pagpigil sa hindi naka-commit na data na mabasa, pinipigilan din nito na ang dalawang read operation sa parehong transaksyon ay magbabalik ng magkaibang resulta. | 
| SERIALIZABLE | 8 | Ang mga maruruming pagbabasa, hindi nauulit na pagbabasa at mga phantom na pagbasa ay pinipigilan. Bilang karagdagan sa mga hadlang ng nakaraang antas, tinitiyak din nito na ang hanay ng mga talaan na tumutugma sa a SAAN sugnay ay nananatiling hindi nagbabago sa loob ng parehong transaksyon. | 
Basahin ang pahina ng Wikipedia sa Paghihiwalay sa mga Sistema ng Database para matuto pa tungkol sa integridad ng transaksyon.
Bago gamitin ang Database serbisyo ang ScriptForge kailangang i-load o i-import ang library:
Upang lumikha ng isang halimbawa ng Database serbisyong magagamit mo ang CreateScriptService paraan:
CreateScriptService("SFDatabases.Database", [filename: str], [registrationname], [readonly], [user, [password]]): svc
Sa syntax na inilarawan sa itaas maaari mong gamitin ang alinman sa "SFDatabases.Database" o simpleng "Database" bilang unang argumento ng CreateScriptService paraan.
filename : Ang pangalan ng Base file. Dapat ipahayag gamit ang SF_FileSystem.FileNaming notasyon.
pangalan ng pagpaparehistro : Ang pangalan ng isang nakarehistrong database. Kung filename ay ibinigay, ang argumentong ito ay hindi dapat gamitin.
Sa kabaligtaran, kung a pangalan ng pagpaparehistro ay tinukoy, ang filename hindi dapat tukuyin ang parameter.
readonly : Tinutukoy kung ang database ay bubuksan bilang readonly (Default = totoo ).
user, password : Karagdagang mga parameter ng koneksyon sa server ng database.
      GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
      Dim myDatabase as Object
      Set myDatabase = CreateScriptService("Database", "/home/user/Documents/myDB.odb")
      ' Magpatakbo ng mga query, SQL statement, ...
      myDatabase.CloseDatabase()
    
      from scriptforge import CreateScriptService
      myDatabase = CreateScriptService("Database", "/home/user/Documents/myDB.odb")
      # Magpatakbo ng mga query, SQL statement, ...
      myDatabase.CloseDatabase()
    Posible ring ma-access ang database na nauugnay sa isang Base na dokumento gamit ang ScriptForge.UI serbisyo, tulad ng ipinapakita sa mga halimbawa sa ibaba:
      Dim myDoc As Object, myDatabase As Object, ui As Object
      Set ui = CreateScriptService("UI")
      Set myDoc = ui.OpenBaseDocument("/home/user/Documents/myDB.odb")
      ' Ang user at password ay ibinibigay sa ibaba, kung kinakailangan
      Set myDatabase = myDoc.GetDatabase()
      ' Magpatakbo ng mga query, SQL statement, ...
      myDatabase.CloseDatabase()
      myDoc.CloseDocument()
    
      ui = CreateScriptService("UI")
      doc = ui.OpenBaseDocument("/home/user/Documents/myDB.odb")
      # User at password ay ibinibigay sa ibaba, kung kinakailangan
      myDatabase = doc.GetDatabase()
      # Magpatakbo ng mga query, SQL statement, ...
      myDatabase.CloseDatabase()
      doc.CloseDocument()
    Ang GetDatabase paraan na ginamit sa halimbawa sa itaas ay bahagi ng ScriptForge's Base serbisyo.
| Pangalan | Readonly | Type | Mga nilalaman | 
|---|---|---|---|
| Queries | Mayroon | Array ng mga string | Ang listahan ng mga nakaimbak na query. | 
| Tables | Mayroon | Array ng mga string | Ang listahan ng mga nakaimbak na talahanayan. | 
| XConnection | Mayroon | Ang UNO object na kumakatawan sa kasalukuyang koneksyon sa database. | |
| XMetaData | Mayroon | Ang UNO object na kumakatawan sa metadata na naglalarawan sa mga katangian ng database system. | 
| Listahan ng Mga Paraan sa Serbisyo ng Database | ||
|---|---|---|
Isinasara ang kasalukuyang koneksyon sa database.
db.CloseDatabase()
    myDatabase.CloseDatabase() ' Basic
  
    myDatabase.CloseDatabase() # Python
  Ipinangako ang lahat ng mga pag-update na ginawa mula noong nakaraan Mangako o Rollback tawag.
Ang pamamaraang ito ay hindi papansinin kung ang mga commit ay awtomatikong ginagawa pagkatapos ng bawat SQL statement, ibig sabihin, ang database ay nakatakda sa default na auto-commit mode.
db.Commit()
      ' Itakda ang REPEATABLE_READ na antas ng transaksyon
      myDB.SetTransactionMode(4)
      myDB.RunSql("UPDATE ...")
      myDB.Commit()
      myDB.RunSql("DELETE ...")
      ' Subukan ang ilang kundisyon bago gumawa
      If bSomeCondition Then
          myDB.Commit()
      Else
          myDB.Rollback()
      End If
      ' Ibalik ang auto-commit mode
      myDB.SetTransactionMode()
    
      myDB.SetTransactionMode(4)
      myDB.RunSql("UPDATE ...")
      myDB.Commit()
      myDB.RunSql("DELETE ...")
      if some_condition:
          myDB.Commit()
      else:
          myDB.Rollback()
      myDB.SetTransactionMode()
    Lumilikha ng a Dataset instance ng serbisyo batay sa isang talahanayan, query o SQL PUMILI pahayag.
db.CreateDataset(sqlcommand: str, opt directsql: bool, opt filter: str, opt orderby: str): svc
sqlcommand : Isang pangalan ng talahanayan, isang pangalan ng query o isang wastong SQL PUMILI pahayag. Ang mga pagkakakilanlan ay maaaring kalakip ng mga square bracket. Ang argumentong ito ay case-sensitive.
directsql : Itakda ang argumentong ito sa totoo upang direktang ipadala ang pahayag sa database engine nang hindi pinoproseso ng LibreOffice (Default = Mali ).
salain : Tinutukoy ang kundisyon na dapat tumugma ang mga tala upang maisama sa ibinalik na dataset. Ang argumentong ito ay ipinahayag bilang isang SQL SAAN statement na walang "WHERE" keyword.
orderby : Tinutukoy ang pagkakasunud-sunod ng dataset bilang isang SQL ORDER NI statement na walang keyword na "ORDER BY".
Ang mga sumusunod na halimbawa sa Basic at Python ay nagbabalik ng isang dataset na may mga talaan ng isang talahanayan na pinangalanang "Mga Customer".
      oDataset = myDatabase.CreateDataset("Mga Customer", Filter := "[Pangalan] KATULAD ng 'A'")
    
      dataset = myDatabase.CreateDataset("Mga Customer", Filter = "[Pangalan] KATULAD ng 'A'")
    Kinakalkula ang ibinigay na pinagsama-samang function sa isang field o expression na kabilang sa isang talahanayan.
Opsyonal, isang SQL SAAN Maaaring tukuyin ang sugnay bilang isang filter na ilalapat bago ang pinagsama-samang function.
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
pagpapahayag : Isang SQL expression kung saan ang mga pangalan ng field ay napapalibutan ng mga square bracket.
tablename : Isang pangalan ng talahanayan (walang mga square bracket).
pamantayan : A SAAN sugnay na walang "WHERE" na keyword, kung saan ang mga pangalan ng field ay napapalibutan ng mga square bracket.
Ipinapalagay ng halimbawa sa ibaba ang file Mga empleyado.odb may table na pinangalanan EmployeeData .
      GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
      Dim myDB as Variant
      Set myDB = CreateScriptService("Database", "/home/user/Databases/Employees.odb")
      ' Binibilang ang bilang ng mga empleyado sa talahanayan
      MsgBox myDB.DCount("[ID]", "EmployeeData")
      ' Ibinabalik ang kabuuan ng lahat ng suweldo sa talahanayan
      MsgBox myDB.DSum("[Salary]", "EmployeeData")
      ' Nasa ibaba ang ilang mga halimbawa kung paano ma-filter ang mga talahanayan
      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%'")
    
      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%'"))
    Kinuwenta ang isang SQL expression sa isang tala na ibinalik ng a SAAN sugnay na tinukoy ng Pamantayan parameter.
Kung ang query ay nagbabalik ng maraming tala, ang una lang ang isasaalang-alang. Gamitin ang OrderClause parameter upang matukoy kung paano pinagbukud-bukod ang mga resulta ng query.
db.DLookup(expression: str, tablename: str, [criteria:str], [orderclause: str]): any
pagpapahayag : Isang SQL expression kung saan ang mga pangalan ng field ay napapalibutan ng mga square bracket.
tablename : Isang pangalan ng talahanayan (walang mga square bracket).
pamantayan : A SAAN sugnay na walang "WHERE" na keyword, kung saan ang mga pangalan ng field ay napapalibutan ng mga square bracket.
orderclause : Isang ORDER NI sugnay na walang mga keyword na "ORDER BY". Ang mga pangalan ng field ay dapat na napapalibutan ng mga square bracket.
      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'")
    
      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'"))
    Iniimbak ang mga nilalaman ng isang talahanayan o ang mga resulta ng a PUMILI query o ng isang SQL statement sa isang two-dimensional array. Ang unang index sa array ay tumutugma sa mga row at ang pangalawang index ay tumutukoy sa mga column.
Maaaring tukuyin ang pinakamataas na limitasyon sa bilang ng mga ibinalik na row. Opsyonal, maaaring ilagay ang mga pangalan ng column sa unang hilera ng array.
Ang ibinalik na array ay walang laman kung walang mga row na ibinalik at ang mga header ng column ay hindi kinakailangan.
db.GetRows(sqlcommand: str, directsql: bool = False, header: bool = False, maxrows: int = 0): any
sqlcommand : Isang talahanayan o pangalan ng query (walang mga square bracket) o a PUMILI SQL na pahayag.
directsql : Kailan totoo , ang SQL command ay ipinadala sa database engine nang walang pre-analysis. Default ay Mali . Ang argumentong ito ay hindi pinapansin para sa mga talahanayan. Para sa mga query, ang inilapat na opsyon ay ang itinakda noong tinukoy ang query.
header : Kailan totoo , ang unang row ng ibinalik na array ay naglalaman ng mga header ng column.
maxrows : Ang maximum na bilang ng mga row na ibabalik. Ang default ay zero, ibig sabihin ay walang limitasyon sa bilang ng mga ibinalik na row.
Nasa ibaba ang ilang halimbawa kung paano ang GetRows maaaring gamitin ang pamamaraan:
      Dim queryResults as Variant
      ' Ibinabalik ang lahat ng mga hilera sa talahanayan na may mga header ng hanay
      queryResults = myDB.GetRows("EmployeeData", Header := True)
      ' Ibinabalik ang unang 50 talaan ng empleyado na na-order ng field na 'FirstName'
      queryResults = myDB.GetRows("SELECT * FROM EmployeeData ORDER BY [FirstName]", MaxRows := 50)
    
      queryResults = myDB.GetRows("EmployeeData", header = True)
      queryResults = myDB.GetRows("SELECT * FROM EmployeeData ORDER BY [FirstName]", maxrows = 50)
    Binubuksan ang tinukoy na dokumento ng form sa normal na mode. Ang pamamaraang ito ay nagbabalik ng a FormDocument halimbawa ng serbisyo na naaayon sa tinukoy na dokumento ng form.
Kung ang dokumento ng form ay bukas na, ang window ng dokumento ng form ay isinaaktibo.
Kung ang tinukoy na dokumento ng form ay hindi umiiral, kung gayon wala ay ibinalik.
svc.OpenFormDocument(formdocument: str): svc
formdocument: Ang pangalan ng FormDocument na bubuksan, bilang isang case-sensitive na string.
Karamihan sa mga form na dokumento ay naka-imbak sa ugat ng Base na dokumento at mabubuksan ang mga ito gamit ang kanilang mga pangalan, tulad ng sa halimbawa sa ibaba:
    Dim oFormDoc As Object
    oFormDoc = myDB.OpenFormDocument("myFormDocument")
  Kung ang mga dokumento ng form ay nakaayos sa mga folder, kinakailangan na isama ang pangalan ng folder upang tukuyin ang dokumento ng form na bubuksan, gaya ng inilalarawan sa sumusunod na halimbawa:
    oFormDoc = myDB.OpenFormDocument("myFolder/myFormDocument")
  
    formDoc = myDB.OpenFormDocument("myFormDocument")
  
    formDoc = myDB.OpenFormDocument("myFolder/myFormDocument")
  Binubuksan ang window ng Data View ng tinukoy na query at nagbabalik ng isang instance ng Datasheet serbisyo.
Kung hindi mabuksan ang query, kung gayon wala ay ibinalik.
db.OpenQuery(queryname: str): obj
queryname : Ang pangalan ng isang umiiral na query bilang isang case-sensitive na String.
      myDatabase.OpenQuery("MyQuery")
    
      myDatabase.OpenQuery("MyQuery")
    Nagpapatakbo ng SQL PUMILI command, nagbubukas ng window ng Data View na may mga resulta at nagbabalik ng isang instance ng Datasheet serbisyo.
db.OpenSql(sql: str, directsql: bool): obj
sql : Isang string na naglalaman ng wastong SQL SELECT statement. Ang mga identifier ay maaaring ilakip ng mga square bracket.
directsql : Kailan totoo , ang SQL command ay ipinadala sa database engine nang walang pre-analysis (Default = Mali ).
      myDatabase.OpenSql("SELECT * FROM [Customers] ORDER BY [CITY]")
    
      myDatabase.OpenSql("SELECT * FROM [Customers] ORDER BY [CITY]")
    Binubuksan ang window ng Data View ng tinukoy na talahanayan at nagbabalik ng isang instance ng Datasheet serbisyo.
db.OpenTable(tablename: str): obj
tablename : Ang pangalan ng isang umiiral na talahanayan bilang isang case-sensitive na String.
      myDatabase.OpenTable("MyTable")
    
      myDatabase.OpenTable("MyTable")
    Kinakansela ang lahat ng mga pagbabagong ginawa sa database mula noong huli Mangako o Rollback tawag.
db.Rollback()
      myDB.SetTransactionMode(1)
      myDB.RunSql("UPDATE ...")
      ' ...
      If bSomeCondition Then
          myDB.Rollback()
      End If
    
      myDB.SetTransactionMode(1)
      myDB.RunSql("UPDATE ...")
      # ...
      if bSomeCondition:
          myDB.Rollback()
    Nagsasagawa ng isang query ng aksyon ng isang SQL statement tulad ng paggawa ng isang talahanayan, pati na rin ang pagpasok, pag-update at pagtanggal ng mga tala.
Ang pamamaraan ay nagbabalik totoo kapag matagumpay.
Ang RunSql ang pamamaraan ay tinanggihan na may mensahe ng error kung sakaling ang database ay nabuksan dati sa read-only na mode.
db.RunSql(sqlcommand: str, directsql: bool = False): bool
sqlcommand : Isang pangalan ng query (walang mga square bracket) o isang SQL statement.
directsql : Kailan totoo , ang SQL command ay ipinadala sa database engine nang walang pre-analysis. (Default = Mali ). Para sa mga query, ang inilapat na opsyon ay ang itinakda noong tinukoy ang query.
      myDatabase.RunSql("INSERT INTO [EmployeeData] VALUES(25, 'Smith', 'John')", DirectSQL := True)
    
      myDatabase.RunSql("INSERT INTO [EmployeeData] VALUES(25, 'Smith', 'John')", directsql = True)
    Tinutukoy ang antas ng paghihiwalay sa mga transaksyon sa database.
Bilang default, pinamamahalaan ng mga database ang mga transaksyon sa auto-commit mode, na nangangahulugang a Mangako ay awtomatikong ginagawa pagkatapos ng bawat SQL statement.
Gamitin ang paraang ito upang manu-manong matukoy ang antas ng paghihiwalay ng mga transaksyon. Kapag ang isang transaction mode maliban sa WALA ay nakatakda, kailangang tahasang tawagan ng script ang Mangako paraan upang ilapat ang mga pagbabago sa database.
Nagbabalik ang pamamaraang ito totoo kapag matagumpay.
Ang pagpapalit ng transaction mode ay magsasara ng lahat Dataset mga pagkakataong nilikha mula sa kasalukuyang database.
db.SetTransactionMode(transactionmode: int = 0): bool
transactionmode : Tinutukoy ang mode ng transaksyon. Ang argumentong ito ay dapat isa sa mga constant na tinukoy sa com.sun.star.sdbc.TransactionIsolation (Default = WALA )
Basahin ang seksyon Paghawak ng transaksyon sa itaas upang matuto nang higit pa tungkol sa mga antas ng paghihiwalay ng transaksyon na ginagamit sa LibreOffice.
      myDB.SetTransactionMode(com.sun.star.sdbc.TransactionIsolation.REPEATABLE_READ)
      oDataset = myDB.CreateDataset("SELECT ...")
      ' ...
      ' I-reset ang transaction mode sa default
      myDB.SetTransactionMode()
    
      from com.sun.star.sdbc import TransactionIsolation
      myDB.SetTransactionMode(TransactionIsolation.REPEATABLE_READ)
      dataset = myDB.CreateDataset("SELECT ...")
      # ...
      myDB.SetTransactionMode()