Difference between revisions of "NL/Documentation/BASIC Guide/Database Access"
m |
|||
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. | ||
− | {{ | + | {{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 |
<syntaxhighlight lang="oobas"> | <syntaxhighlight lang="oobas"> | ||
Line 31: | Line 31: | ||
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 net de gegevensbron met behulp van de methode <tt>ConnectWithCompletion</tt>. De InteractieHandelaar | ||
− | zorgt ervoor dat {{ | + | zorgt ervoor dat {{AOo}} de gebruiker vraagt naar de vereiste gegevens voor toegang (login). |
== Iteratie van tabellen == | == Iteratie van tabellen == | ||
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 {{ | + | {{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 == | ||
− | Zoals kan worden gezien in het voorbeeld uit het voorgaande gedeelte, verschaft {{ | + | 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>:ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen | ;<tt>getByte()</tt>:ondersteunt de gegevenstypen in SQL voor getallen, tekens en tekenreeksen | ||
Line 97: | Line 97: | ||
== De varianten ResultSet == | == De varianten ResultSet == | ||
− | Toegang tot gegevensbronnen is vaak een zaak van kritieke snelheid. Daarom verschaft {{ | + | Toegang tot gegevensbronnen is vaak een zaak van kritieke snelheid. Daarom verschaft {{AOo}} verschillende manieren om <tt>ResultSets</tt> te optimaliseren en 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. |
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. | 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. |
Revision as of 14:45, 10 February 2021
- SQL: een Query-taal
- Typen toegang tot database
- Gegevensbronnen
- Toegang tot database
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 net de gegevensbron met behulp van 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.
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. |
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 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 welke 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 ResultSets (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.ResultSetConcurrency 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
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.
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). |