Difference between revisions of "NL/Documentation/BASIC Guide/Database Access"

From Apache OpenOffice Wiki
Jump to: navigation, search
m (De varianten ResultSet)
 
(7 intermediate revisions by the same user not shown)
Line 10: Line 10:
 
Een verbinding met een gegevensbron is nodig voor toegang tot de gegevensbron. Dit is een overdrachtskanaal dat directe communicatie met de gegevensbron toestaat. Anders dan de in het voorgaande gedeelte gepresenteerde gegevensbron, moet de verbinding naar de gegevensbron daarom elke keer opnieuw worden gemaakt, iedere keer als het programma opnieuw wordt gestart.
 
Een verbinding met een gegevensbron is nodig voor toegang tot de gegevensbron. Dit is een overdrachtskanaal dat directe communicatie met de gegevensbron toestaat. Anders dan de in het voorgaande gedeelte gepresenteerde gegevensbron, moet de verbinding naar de gegevensbron daarom elke keer opnieuw worden gemaakt, iedere keer als het programma opnieuw wordt gestart.
  
{{OOo}} verschaft verschillende manieren voor het maken van verbindingen met een gegevensbron. Dit voorbeeld geeft weer hoe een verbinding met een bestaande gegevensbron kan worden gemaakt
+
{{AOo}} verschaft verschillende manieren voor het maken van verbindingen met een gegevensbron. Dit voorbeeld geeft weer hoe een verbinding met een bestaande gegevensbron kan worden gemaakt
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim DatabaseContext As Object
 
Dim DatabaseContext As Object
 
Dim GegevensBron As Object
 
Dim GegevensBron As Object
Line 27: Line 27:
 
   Verbinding = GegevensBron.ConnectWithCompletion(InteractieHandelaar)
 
   Verbinding = GegevensBron.ConnectWithCompletion(InteractieHandelaar)
 
End If
 
End If
</source>
+
</syntaxhighlight>
  
 
De in het voorbeeld gebruikte code controleert eerst of de gegevensbron met een wachtwoord beveiligd is. Als dat niet het geval is maakt het de verbinding met de gegevensbron met behulp van de aanroep <tt>GetConnection</tt>. De twee lege tekenreeksen in de commandoregel staan voor de gebruikersnaam en het wachtwoord.
 
De in het voorbeeld gebruikte code controleert eerst of de gegevensbron met een wachtwoord beveiligd is. Als dat niet het geval is maakt het de verbinding met de gegevensbron met behulp van de aanroep <tt>GetConnection</tt>. De twee lege tekenreeksen in de commandoregel staan voor de gebruikersnaam en het wachtwoord.
Als de gegevensbron wachtwoord-beveiligd is, maakt het voorbeeld een <tt>InteractieHandelaar</tt> en opent de verbinding net de gegevensbron met behulp van de methode <tt>ConnectWithCompletion</tt>. De InteractieHandelaar
+
Als de gegevensbron wachtwoord-beveiligd is, maakt het voorbeeld een <tt>InteractieHandelaar</tt> en opent de verbinding met de gegevensbron met de methode <tt>ConnectWithCompletion</tt>. De InteractieHandelaar
zorgt ervoor dat {{OOo}} de gebruiker vraagt naar de vereiste gegevens voor toegang (login).
+
zorgt ervoor dat {{AOo}} de gebruiker vraagt naar de vereiste gegevens voor toegang (login).
  
 
== Iteratie van tabellen ==
 
== Iteratie van tabellen ==
Een tabel wordt normaal gesproken in {{OOo}} benaderd via het object <tt>ResultSet</tt>. Een <tt>ResultSet</tt> is een type van aanduiding dat een huidige reeks van gegevens aangeeft binnen een reeks met resultaten welke is verkregen met met behulp van de opdracht <tt>SELECT</tt>.
+
Een tabel wordt normaal gesproken in {{AOo}} benaderd via het object <tt>ResultSet</tt>. Een <tt>ResultSet</tt> is een type van aanduiding dat een huidige reeks van gegevens aangeeft binnen een reeks met resultaten welke is verkregen met met behulp van de opdracht <tt>SELECT</tt>.
  
 
Dit voorbeeld toont hoe een <tt>ResultSet</tt> kan worden gebruikt om waarden uit een tabel van de gegevensbron te bevragen.
 
Dit voorbeeld toont hoe een <tt>ResultSet</tt> kan worden gebruikt om waarden uit een tabel van de gegevensbron te bevragen.
  
<source lang="oobas">
+
<syntaxhighlight lang="oobas">
 
Dim DatabaseContext As Object
 
Dim DatabaseContext As Object
 
Dim GegevensBron As Object
 
Dim GegevensBron As Object
Line 64: Line 64:
 
   Wend
 
   Wend
 
End If
 
End If
</source>
+
</syntaxhighlight>
  
 
Als de verbinding met de gegevensbron eenmaal is gemaakt, gebruikt de in het voorbeeld gebruikte code eerst de aanroep <tt>Verbinding.createObject</tt> om een object <tt>Argument</tt> te maken. Dit object <tt>Argument</tt> gebruikt dan de  aanroep <tt>executeQuery</tt> om de actuele <tt>ResultatenSet</tt> weer te geven. Het programma controleert nu of de <tt>ResultatenSet</tt> daadwerkelijk bestaat en gaat door de records van de gegevensbron door middel van een lus. De vereiste waarden (in het voorbeeld die vanuit het veld <tt>KlantNummer</tt>-) geven de <tt>ResultatenSet</tt> weer door middel van de methode <tt>getString</tt>, waarbij de parameter 1 bepaalt dat de aanroep gerelateerd is aan de waarden uit de eerste kolom.
 
Als de verbinding met de gegevensbron eenmaal is gemaakt, gebruikt de in het voorbeeld gebruikte code eerst de aanroep <tt>Verbinding.createObject</tt> om een object <tt>Argument</tt> te maken. Dit object <tt>Argument</tt> gebruikt dan de  aanroep <tt>executeQuery</tt> om de actuele <tt>ResultatenSet</tt> weer te geven. Het programma controleert nu of de <tt>ResultatenSet</tt> daadwerkelijk bestaat en gaat door de records van de gegevensbron door middel van een lus. De vereiste waarden (in het voorbeeld die vanuit het veld <tt>KlantNummer</tt>-) geven de <tt>ResultatenSet</tt> weer door middel van de methode <tt>getString</tt>, waarbij de parameter 1 bepaalt dat de aanroep gerelateerd is aan de waarden uit de eerste kolom.
Line 70: Line 70:
 
{{Documentation/VBAnote|Het object <tt>ResultSet</tt> uit SDBC is te vergelijken met het object <tt>Recordset</tt> in DAO en ADO, omdat dit ook iteratieve toegang verschaft tot een database.}}
 
{{Documentation/VBAnote|Het object <tt>ResultSet</tt> uit SDBC is te vergelijken met het object <tt>Recordset</tt> in DAO en ADO, omdat dit ook iteratieve toegang verschaft tot een database.}}
  
{{Documentation/SO5note|Toegang tot de database wordt actueel in {{OOo}} verkregen door een object <tt>ResultSet</tt>. Dit reflecteert de inhoud van een tabel of het resultaat van een opdracht SELECT in SQL. In het verleden verschafte het object <tt>ResultSet</tt> de residente methoden en het object <tt>Application</tt> om te navigeren binnen de gegevens, bijvoorbeeld: <tt>DataNextRecord</tt> ).}}
+
{{Documentation/SO5note|Toegang tot de database wordt actueel in {{AOo}} verkregen door een object <tt>ResultSet</tt>. Dit reflecteert de inhoud van een tabel of het resultaat van een opdracht SELECT in SQL. In het verleden verschafte het object <tt>ResultSet</tt> de residente methoden in het object <tt>Application</tt> om te navigeren binnen de gegevens, bijvoorbeeld: <tt>DataNextRecord</tt> ).}}
  
 
== Type-specifieke methoden voor het ophalen van waarden ==
 
== Type-specifieke methoden voor het ophalen van waarden ==
  
As can be seen in the example from the previous section, {{OOo}} provides a <tt>getString</tt> method for accessing table contents. The method provides the result in the form of a string. The following <tt>get</tt> methods are available:
+
Zoals kan worden gezien in het voorbeeld uit het voorgaande gedeelte, verschaft {{AOo}} een methode <tt>getString</tt> voor toegang tot de inhoud van tabellen. De methode verschaft het resultaat in de vorm van een tekenreeks. De volgende methoden <tt>get</tt> zijn beschikbaar:
  
;<tt>getByte()</tt>:supports the SQL data types for numbers, characters and strings
+
;<tt>getByte()</tt>:ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen
;<tt>getShort()</tt>:supports the SQL data types for numbers, characters and strings
+
;<tt>getShort()</tt>:ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen
;<tt>getInt()</tt>:supports the SQL data types for numbers, characters and strings
+
;<tt>getInt()</tt>:ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen
;<tt>getLong()</tt>:supports the SQL data types for numbers, characters and strings
+
;<tt>getLong()</tt>:ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen
;<tt>getFloat()</tt>:supports the SQL data types for numbers, characters and strings
+
;<tt>getFloat()</tt>:ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen
;<tt>getDouble()</tt>:supports the SQL data types for numbers, characters and strings
+
;<tt>getDouble()</tt>:ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen
;<tt>getBoolean()</tt>:supports the SQL data types for numbers, characters and strings
+
;<tt>getBoolean()</tt>:ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen
;<tt>getString()</tt>:supports all SQL data types
+
;<tt>getString()</tt>:ondersteunt alle gegevenstypen in SQL
;<tt>getBytes()</tt>:supports the SQL data types for binary values
+
;<tt>getBytes()</tt>:ondersteunt de gegevenstypen in SQL voor binaire waarden
;<tt>getDate()</tt>:supports the SQL data types for numbers, strings, date and time stamp
+
;<tt>getDate()</tt>:ondersteunt de gegevenstypen in SQL voor getallen, tekenreeksen en datum-/tijdstempel
;<tt>getTime()</tt>:supports the SQL data types for numbers, strings, date and time stamp
+
;<tt>getTime()</tt>:ondersteunt de gegevenstypen in SQL voor getallen, tekenreeksen en datum-/tijdstempel
;<tt>getTimestamp()</tt>:supports the SQL data types for numbers, strings, date and time stamp
+
;<tt>getTimestamp()</tt>:ondersteunt de gegevenstypen in SQL voor getallen, tekenreeksen en datum-/tijdstempel
;<tt>getCharacterStream()</tt>:supports the SQL data types for numbers, strings and binary values
+
;<tt>getCharacterStream()</tt>:ondersteunt de gegevenstypen in SQL voor getallen, tekenreeksen en binaire waarden
;<tt>getUnicodeStream()</tt>:supports the SQL data types for numbers, strings and binary values
+
;<tt>getUnicodeStream()</tt>:ondersteunt de gegevenstypen in SQL voor getallen, tekenreeksen en binaire waarden
;<tt>getBinaryStream()</tt>:binary values
+
;<tt>getBinaryStream()</tt>:binaire waarden
;<tt>getObject()</tt>:supports all SQL data types
+
;<tt>getObject()</tt>:ondersteunt alle gegevenstypen in SQL
  
In all instances, the number of columns should be listed as a parameter whose values should be queried.
+
In alle gevallen zou het aantal kolommen, waarvan de waarden zouden moeten worden bevraagd, moeten worden opgenomen als een parameter.
  
== The ResultSet Variants ==
+
== De varianten ResultSet ==
  
Accessing databases is often a matter of critical speed. {{OOo}} provides several ways of optimizing <tt>ResultSets</tt> and thereby controlling the speed of access. The more functions a <tt>ResultSet</tt> provides, the more complex its implementation usually is and therefore the slower the functions are.
+
Toegang tot gegevensbronnen is vaak een zaak van kritieke snelheid. Daarom verschaft {{AOo}} verschillende manieren om <tt>ResultSets</tt> te optimaliseren en daar de snelheid van de toegang te beheren. Des te meer functies een <tt>ResultSet</tt> verschaft, des te complexer is normaal gesproken zijn implementatie, met als gevolg dat de functies trager worden.
  
A simple <tt>ResultSet,</tt> provides the minimum scope of functions available. It only allows iteration to be applied forward, and for values to be interrogated. More extensive navigation options, such as the possibility of modifying values, are therefore not included.
+
Een eenvoudige <tt>ResultSet,</tt> verschaft het minimale bereik aan beschikbare functies. Het staat alleen toe dat de herhaling voorwaarts wordt toegepast en dat waarden worden bevraagd. Meer uitgebreidere opties voor navigatie, zoals de mogelijkheid om waarden te wijzigen, zijn daarom niet opgenomen.
  
The Statement object used to create the <tt>ResultSet</tt> provides some properties which allow the functions of the <tt>ResultSet</tt> to be influenced:
+
Het object Statement, gebruikt om de <tt>ResultSet</tt> te maken, verschaft enkele eigenschappen die het mogelijk maken de functies van de <tt>ResultSet</tt> te beïnvloeden:
  
;<tt>ResultSetConcurrency (const)</tt>:specifications as to whether the data can be modified (specifications in accordance with <idl>com.sun.star.sdbc.ResultSetConcurrency</idl>).
+
;<tt>ResultSetConcurrency (const)</tt>:specificaties of de gegevens al dan niet gewijzigd kunnen worden (specificaties overeenkomend met <idl>com.sun.star.sdbc.ResultSetConcurrency</idl>).
;<tt>ResultSetType (const)</tt>:specifications regarding type of <tt>ResultSets</tt> ( specifications in accordance with <idl>com.sun.star.sdbc.ResultSetType</idl>).
+
;<tt>ResultSetType (const)</tt>:specificaties met betrekking tot het type ResultSet (specificaties overeenkomend met  <idl>com.sun.star.sdbc.ResultSetType</idl>).
  
The values defined in <idl>com.sun.star.sdbc.ResultSetConcurrency</idl> are:
+
De waarden, gedefinieerd in <idl>com.sun.star.sdbc.ResultSetConcurrency</idl>, zijn:
  
;<tt>UPDATABLE</tt>:<tt>ResultSet</tt> permits values to be modified
+
;<tt>UPDATABLE</tt>:<tt>ResultSet</tt> staat toe dat waarden worden gewijzigd
;<tt>READ_ONLY</tt>:<tt>ResultSet</tt> does not permit modifications
+
;<tt>READ_ONLY</tt>:<tt>ResultSet</tt> staat wijzigingen niet toe
  
The <idl>com.sun.star.sdbc.ResultSetConcurrency</idl> group of constants provides the following specifications:
+
De groep van constanten <idl>com.sun.star.sdbc.ResultSetType</idl> verschaft de volgende specificaties:
  
;<tt>FORWARD_ONLY</tt>:<tt>ResultSet</tt> only permits forward navigation
+
;<tt>FORWARD_ONLY</tt>:<tt>ResultSet</tt> staat alleen voorwaartse navigatie toe
;<tt>SCROLL_INSENSITIVE</tt>:<tt>ResultSet</tt> permits any type of navigation, changes to the original data are, however, not noted
+
;<tt>SCROLL_INSENSITIVE</tt>:<tt>ResultSet</tt> staat elk type navigatie toe, wijzigingen in de originele gegevens worden echter niet verwerkt
;<tt>SCROLL_SENSITIVE</tt>:<tt>ResultSet</tt> permits any type of navigation, changes to the original data impact on the <tt>ResultSet</tt>
+
;<tt>SCROLL_SENSITIVE</tt>:<tt>ResultSet</tt> staat elk type navigatie toe, wijzigingen in de originele gegevens heeft invloed op de <tt>ResultSet</tt>
  
{{Documentation/VBAnote|A <tt>ResultSet</tt> containing the <tt>READ_ONLY</tt> and <tt>SCROLL_INSENSITIVE</tt> properties corresponds to a record set of the <tt>Snapshot</tt> type in ADO and DAO. }}
+
{{Documentation/VBAnote|Een <tt>ResultSet</tt> die de eigenschappen <tt>READ_ONLY</tt> en <tt>SCROLL_INSENSITIVE</tt> bevat correspondeert met een record-reeks van het type <tt>Snapshot</tt> in ADO en DAO.}}
  
When using the <tt>ResultSet's</tt> <tt>UPDATEABLE</tt> and <tt>SCROLL_SENSITIVE</tt> properties, the scope of function of a <tt>ResultSet</tt> is comparable with a <tt>Dynaset</tt> type <tt>Recordset</tt> from ADO and DAO.
+
Bij gebruik van de <tt>ResultSet's</tt> eigenschappen <tt>UPDATEABLE</tt> en <tt>SCROLL_SENSITIVE</tt>, is het functiebereik van een <tt>ResultSet</tt> vergelijkbaar met een <tt>Dynaset</tt> type <tt>Recordset</tt> uit ADO en DAO.
  
== Methods for Navigation in ResultSets ==
+
== Methoden voor navigatie in ResultSets ==
  
If a <tt>ResultSet</tt> is a <tt>SCROLL_INSENSITIVE</tt> or <tt>SCROLL_SENSITIVE</tt> type, it supports a whole range of methods for navigation in the stock of data. The central methods are:
+
Als een <tt>ResultSet</tt> van het type <tt>SCROLL_INSENSITIVE</tt> of <tt>SCROLL_SENSITIVE</tt> is, ondersteunt het een heel bereik aan methoden voor navigatie in de opgeslagen gegevens. De centrale methoden zijn:
  
;<tt>next()</tt>:navigation to the next data record
+
;<tt>next()</tt>:navigatie naar het volgende record met gegevens
;<tt>previous()</tt>:navigation to the previous data record
+
;<tt>previous()</tt>:navigatie naar het vorige record met gegevens
;<tt>first()</tt>:navigation to the first data record
+
;<tt>first()</tt>:navigatie naar het eerste record met gegevens
;<tt>last()</tt>:navigation to the last data record
+
;<tt>last()</tt>:navigatie naar het laatste record met gegevens
;<tt>beforeFirst()</tt>:navigation to before the first data record
+
;<tt>beforeFirst()</tt>:navigatie tot vóór het eerste record met gegevens
;<tt>afterLast()</tt>:navigation to after the last data record
+
;<tt>afterLast()</tt>:navigatie tot na het laatste record met gegevens
  
All methods return a Boolean parameter which specifies whether the navigation was successful.
+
Alle methoden geven een Booleaanse parameter terug die specificeert of de navigatie succesvol was.
  
To determine the current cursor position, the following test methods are provided and all return a Boolean value:
+
De volgende testmethoden zijn beschikbaar en zij geven alle een Booleaanse waarde terug om de huidige positie van de cursor te bepalen:
  
;<tt>isBeforeFirst()</tt>:<tt>ResultSet</tt> is before the first data record
+
;<tt>isBeforeFirst()</tt>:<tt>ResultSet</tt> staat vóór het eerste record met gegevens
;<tt>isAfterLast()</tt>:<tt>ResultSet</tt> is after the last data record
+
;<tt>isAfterLast()</tt>:<tt>ResultSet</tt> staat na het eerste record met gegevens
;<tt>isFirst()</tt>:<tt>ResultSet</tt> is the first data record
+
;<tt>isFirst()</tt>:<tt>ResultSet</tt> is het eerste record met gegevens
;<tt>isLast()</tt>:<tt>ResultSet</tt> is the last data record
+
;<tt>isLast()</tt>:<tt>ResultSet</tt> is het laatste record met gegevens
  
== Modifying Data Records ==
+
== Aanpassen van records met gegevens ==
  
If a <tt>ResultSet</tt> has been created with the <tt>ResultSetConcurrency</tt> = <tt>UPDATEABLE</tt> value, then its content can be edited. This only applies for as long as the SQL command allows the data to be re-written to the database (depends on principle). This is not, for example, possible with complex SQL commands with linked columns or accumulated values.
+
Als een <tt>ResultSet</tt> werd gemaakt met de waarde <tt>ResultSetConcurrency</tt> = <tt>UPDATEABLE</tt>, dan kan zijn inhoud worden bewerkt. Dit is alleen van toepassing voor zolang als de opdrachten in SQL toestaan dat de gegevens worden herschreven naar de gegevensbron (afhankelijk van het principe). Dit is, bijvoorbeeld, niet mogelijk met complexe opdrachten in SQL met gekoppelde kolommen of geaccumuleerde waarden.
  
The <tt>ResultSet</tt> object provides <tt>Update</tt> methods for modifying values, which are structured in the same way as the <tt>get</tt> methods for retrieving values. The <tt>updateString</tt> method, for example, allows a string to be written.
+
Het object <tt>ResultSet</tt> verschaft methoden <tt>Update</tt> voor het wijzigen van waarden, die op dezelfde wijze zijn gestructureerd als de methoden <tt>get</tt> voor het opzoeken van waarden. De methode <tt>updateString</tt> staat, bijvoorbeeld, toe dat een tekenreeks wordt geschreven.
  
After modification, the values must be transferred into the database using the <tt>updateRow()</tt>method. The call must take place before the next navigation command, otherwise the values will be lost.
+
Na wijziging moeten de waarden worden overgebracht naar de gegevensbron met behulp van de methode <tt>updateRow()</tt>. De aanroep moet plaatsvinden vóór het volgende opdracht voor navigatie, anders gaan de waarden verloren.
  
If an error is made during the modifications, this can be undone using the <tt>cancelRowUpdates()</tt>method. This call is only available provided that the data has not be re-written into the database using <tt>updateRow()</tt>.
+
Als een fout wordt gemaakt tijdens de wijzigingen, kan dit ongedaan worden gemaakt met behulp van de methode <tt>cancelRowUpdates()</tt>. Deze aanroep is alleen beschikbaar indien de gegevens nog niet zijn geschreven naar de gegevensbron met behulp van <tt>updateRow()</tt>.
  
 
{{InterWiki Languages BasicGuide|articletitle=Documentation/BASIC Guide/Database Access}}
 
{{InterWiki Languages BasicGuide|articletitle=Documentation/BASIC Guide/Database Access}}
 
{{PDL1}}
 
{{PDL1}}

Latest revision as of 14:37, 18 May 2022

Book.png


Een verbinding met een gegevensbron is nodig voor toegang tot de gegevensbron. Dit is een overdrachtskanaal dat directe communicatie met de gegevensbron toestaat. Anders dan de in het voorgaande gedeelte gepresenteerde gegevensbron, moet de verbinding naar de gegevensbron daarom elke keer opnieuw worden gemaakt, iedere keer als het programma opnieuw wordt gestart.

Apache OpenOffice verschaft verschillende manieren voor het maken van verbindingen met een gegevensbron. Dit voorbeeld geeft weer hoe een verbinding met een bestaande gegevensbron kan worden gemaakt

Dim DatabaseContext As Object
Dim GegevensBron As Object
Dim Verbinding As Object
Dim InteractieHandelaar as Object
 
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
GegevensBron = DatabaseContext.getByName("Customers")
 
If Not GegevensBron.IsPasswordRequired Then
  Verbinding = GegevensBron.GetConnection("","")
Else
  InteractieHandelaar = createUnoService("com.sun.star.sdb.InteractionHandler")
  Verbinding = GegevensBron.ConnectWithCompletion(InteractieHandelaar)
End If

De in het voorbeeld gebruikte code controleert eerst of de gegevensbron met een wachtwoord beveiligd is. Als dat niet het geval is maakt het de verbinding met de gegevensbron met behulp van de aanroep GetConnection. De twee lege tekenreeksen in de commandoregel staan voor de gebruikersnaam en het wachtwoord. Als de gegevensbron wachtwoord-beveiligd is, maakt het voorbeeld een InteractieHandelaar en opent de verbinding met de gegevensbron met de methode ConnectWithCompletion. De InteractieHandelaar zorgt ervoor dat Apache OpenOffice de gebruiker vraagt naar de vereiste gegevens voor toegang (login).

Iteratie van tabellen

Een tabel wordt normaal gesproken in Apache OpenOffice benaderd via het object ResultSet. Een ResultSet is een type van aanduiding dat een huidige reeks van gegevens aangeeft binnen een reeks met resultaten welke is verkregen met met behulp van de opdracht SELECT.

Dit voorbeeld toont hoe een ResultSet kan worden gebruikt om waarden uit een tabel van de gegevensbron te bevragen.

Dim DatabaseContext As Object
Dim GegevensBron As Object
Dim Verbinding As Object
Dim InteractieHandelaar as Object
Dim Argument As Object
Dim ResultatenSet As Object
 
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
GegevensBron = DatabaseContext.getByName("Klanten")
 
If Not DataSource.IsPasswordRequired Then
  Connection = GegevensBron.GetConnection("","")
Else
  InteractieHandelaar = createUnoService("com.sun.star.sdb.InteractionHandler")
  Connection = GegevensBron.ConnectWithCompletion(InteractieHandelaar)
End If
 
Argument = Verbinding.createStatement()
ResultatenSet = Argument.executeQuery("SELECT ""KlantNummer"" FROM ""Klanten""") 
 
If Not IsNull(ResultatenSet) Then
  While ResultatenSet.next
    MsgBox ResultatenSet.getString(1)
  Wend
End If

Als de verbinding met de gegevensbron eenmaal is gemaakt, gebruikt de in het voorbeeld gebruikte code eerst de aanroep Verbinding.createObject om een object Argument te maken. Dit object Argument gebruikt dan de aanroep executeQuery om de actuele ResultatenSet weer te geven. Het programma controleert nu of de ResultatenSet daadwerkelijk bestaat en gaat door de records van de gegevensbron door middel van een lus. De vereiste waarden (in het voorbeeld die vanuit het veld KlantNummer-) geven de ResultatenSet weer door middel van de methode getString, waarbij de parameter 1 bepaalt dat de aanroep gerelateerd is aan de waarden uit de eerste kolom.

Documentation note.png VBA : Het object ResultSet uit SDBC is te vergelijken met het object Recordset in DAO en ADO, omdat dit ook iteratieve toegang verschaft tot een database.


Documentation note.png StarOffice 5 : Toegang tot de database wordt actueel in Apache OpenOffice verkregen door een object ResultSet. Dit reflecteert de inhoud van een tabel of het resultaat van een opdracht SELECT in SQL. In het verleden verschafte het object ResultSet de residente methoden in het object Application om te navigeren binnen de gegevens, bijvoorbeeld: DataNextRecord ).


Type-specifieke methoden voor het ophalen van waarden

Zoals kan worden gezien in het voorbeeld uit het voorgaande gedeelte, verschaft Apache OpenOffice een methode getString voor toegang tot de inhoud van tabellen. De methode verschaft het resultaat in de vorm van een tekenreeks. De volgende methoden get zijn beschikbaar:

getByte()
ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen
getShort()
ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen
getInt()
ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen
getLong()
ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen
getFloat()
ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen
getDouble()
ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen
getBoolean()
ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen
getString()
ondersteunt alle gegevenstypen in SQL
getBytes()
ondersteunt de gegevenstypen in SQL voor binaire waarden
getDate()
ondersteunt de gegevenstypen in SQL voor getallen, tekenreeksen en datum-/tijdstempel
getTime()
ondersteunt de gegevenstypen in SQL voor getallen, tekenreeksen en datum-/tijdstempel
getTimestamp()
ondersteunt de gegevenstypen in SQL voor getallen, tekenreeksen en datum-/tijdstempel
getCharacterStream()
ondersteunt de gegevenstypen in SQL voor getallen, tekenreeksen en binaire waarden
getUnicodeStream()
ondersteunt de gegevenstypen in SQL voor getallen, tekenreeksen en binaire waarden
getBinaryStream()
binaire waarden
getObject()
ondersteunt alle gegevenstypen in SQL

In alle gevallen zou het aantal kolommen, waarvan de waarden zouden moeten worden bevraagd, moeten worden opgenomen als een parameter.

De varianten ResultSet

Toegang tot gegevensbronnen is vaak een zaak van kritieke snelheid. Daarom verschaft Apache OpenOffice verschillende manieren om ResultSets te optimaliseren en daar de snelheid van de toegang te beheren. Des te meer functies een ResultSet verschaft, des te complexer is normaal gesproken zijn implementatie, met als gevolg dat de functies trager worden.

Een eenvoudige ResultSet, verschaft het minimale bereik aan beschikbare functies. Het staat alleen toe dat de herhaling voorwaarts wordt toegepast en dat waarden worden bevraagd. Meer uitgebreidere opties voor navigatie, zoals de mogelijkheid om waarden te wijzigen, zijn daarom niet opgenomen.

Het object Statement, gebruikt om de ResultSet te maken, verschaft enkele eigenschappen die het mogelijk maken de functies van de ResultSet te beïnvloeden:

ResultSetConcurrency (const)
specificaties of de gegevens al dan niet gewijzigd kunnen worden (specificaties overeenkomend met com.sun.star.sdbc.ResultSetConcurrency).
ResultSetType (const)
specificaties met betrekking tot het type ResultSet (specificaties overeenkomend met com.sun.star.sdbc.ResultSetType).

De waarden, gedefinieerd in com.sun.star.sdbc.ResultSetConcurrency, zijn:

UPDATABLE
ResultSet staat toe dat waarden worden gewijzigd
READ_ONLY
ResultSet staat wijzigingen niet toe

De groep van constanten com.sun.star.sdbc.ResultSetType verschaft de volgende specificaties:

FORWARD_ONLY
ResultSet staat alleen voorwaartse navigatie toe
SCROLL_INSENSITIVE
ResultSet staat elk type navigatie toe, wijzigingen in de originele gegevens worden echter niet verwerkt
SCROLL_SENSITIVE
ResultSet staat elk type navigatie toe, wijzigingen in de originele gegevens heeft invloed op de ResultSet
Documentation note.png VBA : Een ResultSet die de eigenschappen READ_ONLY en SCROLL_INSENSITIVE bevat correspondeert met een record-reeks van het type Snapshot in ADO en DAO.


Bij gebruik van de ResultSet's eigenschappen UPDATEABLE en SCROLL_SENSITIVE, is het functiebereik van een ResultSet vergelijkbaar met een Dynaset type Recordset uit ADO en DAO.

Methoden voor navigatie in ResultSets

Als een ResultSet van het type SCROLL_INSENSITIVE of SCROLL_SENSITIVE is, ondersteunt het een heel bereik aan methoden voor navigatie in de opgeslagen gegevens. De centrale methoden zijn:

next()
navigatie naar het volgende record met gegevens
previous()
navigatie naar het vorige record met gegevens
first()
navigatie naar het eerste record met gegevens
last()
navigatie naar het laatste record met gegevens
beforeFirst()
navigatie tot vóór het eerste record met gegevens
afterLast()
navigatie tot na het laatste record met gegevens

Alle methoden geven een Booleaanse parameter terug die specificeert of de navigatie succesvol was.

De volgende testmethoden zijn beschikbaar en zij geven alle een Booleaanse waarde terug om de huidige positie van de cursor te bepalen:

isBeforeFirst()
ResultSet staat vóór het eerste record met gegevens
isAfterLast()
ResultSet staat na het eerste record met gegevens
isFirst()
ResultSet is het eerste record met gegevens
isLast()
ResultSet is het laatste record met gegevens

Aanpassen van records met gegevens

Als een ResultSet werd gemaakt met de waarde ResultSetConcurrency = UPDATEABLE, dan kan zijn inhoud worden bewerkt. Dit is alleen van toepassing voor zolang als de opdrachten in SQL toestaan dat de gegevens worden herschreven naar de gegevensbron (afhankelijk van het principe). Dit is, bijvoorbeeld, niet mogelijk met complexe opdrachten in SQL met gekoppelde kolommen of geaccumuleerde waarden.

Het object ResultSet verschaft methoden Update voor het wijzigen van waarden, die op dezelfde wijze zijn gestructureerd als de methoden get voor het opzoeken van waarden. De methode updateString staat, bijvoorbeeld, toe dat een tekenreeks wordt geschreven.

Na wijziging moeten de waarden worden overgebracht naar de gegevensbron met behulp van de methode updateRow(). De aanroep moet plaatsvinden vóór het volgende opdracht voor navigatie, anders gaan de waarden verloren.

Als een fout wordt gemaakt tijdens de wijzigingen, kan dit ongedaan worden gemaakt met behulp van de methode cancelRowUpdates(). Deze aanroep is alleen beschikbaar indien de gegevens nog niet zijn geschreven naar de gegevensbron met behulp van updateRow().


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools