Datenquelle - Datensatz markieren

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Datenquelle - Datensatz markieren

Beitrag von DPunch »

Aloha

Ich würde gerne per Makro einen Datensatz in einer Datenquelle markieren (also nicht nur den Zeiger darauf setzen), um diesen direkt für die "Daten in Felder" Funktion bereit zu machen.

Das will mir aber nicht recht gelingen, da die angebotene .Select-Methode immer eine Illegal Argument Exception schmeisst.

Ich habe hier
http://user.services.openoffice.org/en/ ... 39&t=24051
zwar theoretisch schon eine Lösung gefunden, jedoch weiss ich die beim besten Willen nicht umzusetzen, weil mir da einfach die Informationen fehlen, auf welches Model / Control jetzt warum zugegriffen wird.

Code: Alles auswählen

Dim aSel(0 to 1)

oGridmodel = thisComponent.getCurrentControl.Model
aSel(0) = thisComponent.com_sun_star_awt_XTabController_getModel.getBookmark()
oGridmodel.Select(aSel)
Soweit mein Versuch, der funktioniert halt leider nicht, schmeisst also die gleiche Exception wie all die Versuche zuvor. (aufgerufen mit dem DataBrowser als aktives Fenster)

Kann mir da eventuell jemand behilflich sein, bzw. sieht direkt, was bei mir falsch ist?
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Datenquelle - Datensatz markieren

Beitrag von DPunch »

Aloha

Ok, ich bin schon ein Stückchen weiter, mir fehlt allerdings noch ein letzter Schritt.
Das Problem ist, dass bei mir das Makro auf einem stinknormalen Writer-Dokument laufen soll, die verlinkte Lösung sich aber mit einem Base-Formular beschäftigt (und dort im Übrigen auch wunderbar funktioniert).

(http://user.services.openoffice.org/en/ ... 39&t=24051)

Code: Alles auswählen

oDoc = thisComponent

oFrame1 = oDoc.CurrentController.Frame
oFrame2 = oFrame1.findFrame("_beamer",4)
oDataSourcebrowser = oFrame2.Controller

oDatabaseForm = oDataSourcebrowser.com_sun_star_awt_XTabController_getModel  REM Analog zu "Form" im verlinkten Beispiel
oGridControlModel = oDatabaseForm.getByName("Tabellenansicht der Datenquelle")  REM Analog zu "gridModel" im verlinkten Beispiel
Ab hier komme ich nicht mehr weiter, da dieser Abschnitt in der Lösung

Code: Alles auswählen

gridView=Form.Parent.Parent.CurrentController.getControl(gridModel)
zwar letztendlich auch nur zu dem dem Base-Formular zugrunde liegenden Textdokument SwXTextDocument führt, dort aber der Grid-View (com.sun.star.form.FmXGridControl) tatsächlich hinterlegt ist, in meinem Fall wird allerdings vermutlich durch Öffnen der "Datenquellen" nur ein Formular über einen Teil des Original-Dokumentes gelegt, so dass die auf dem Formular enthaltenen Controls nicht vom Writer-Dokument aus angesprochen werden können und dementsprechend

Code: Alles auswählen

oDoc.currentController.getControl(oGridControlModel)
ein Null object zurückliefert.

Jedenfalls fehlt mir denke ich nur noch der letzte Schritt, nämlich Zugriff auf die GridControl (im Beispielcode gridView genannt -> com.sun.star.form.FmXGridControl).


Wäre für jeden kleinen Tipp dankbar.
Scalaia990
***
Beiträge: 76
Registriert: Mi, 29.04.2009 23:50

Re: Datenquelle - Datensatz markieren

Beitrag von Scalaia990 »

Hallo DPunch,

das Problem an welchem Du dran bist wird auf Mich Anfang nächsten Jahres akut zukommen.Bin bei meinen Vorabrecherchen bisher auf folgenden Code gestoßen der die selectierten Datensätze ausließt, vermute dass man daraus ableiten kann wie man dann auch Datensätze markiert.

http://codesnippets.services.openoffice ... ethod.snip

Wie bereits erwähnt wird mich dieses Problem ab Januar ebenfalls beschäftigen. Falls Du selber weiterkommst wäre ich Dir über einen Tipp sehr dankbar


Gruss und Dank

Scaleia990
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Datenquelle - Datensatz markieren

Beitrag von DPunch »

Aloha

Das Beispiel zum Auslesen der selektierten Datensätze kenne ich schon, nur hilft dies nicht weiter, da Du zwar problemlos aus dem GridModel (com.sun.star.comp.forms.OGridControlModel) die Selektion auslesen kannst, zum Selektieren aber Zugriff auf die GridControl brauchst.
Da landet man dann irgendwann bei der com.sun.star.comp.dbu.SbaXGridControl, diese kann im Gegensatz zu der in meinem Link verwendeten (und funktionierenden) com.sun.star.form.FmXGridControl allerdings nicht selektieren, sondern schmeisst lediglich Illegal Argument Exceptions (und ist ausserdem wie ich vermute lediglich die GridControl für die Auswahl der Datenquelle ist, nicht aber für die Auswahl des Datensatzes).

Ich persönlich habe es aufgegeben und mache es nun eben per Workaround (den Zeiger auf einen Datensatz setzen und dann Spaltennamen mit den Feldern im Dokument vergleichen -> bei Gleichheit Feldinhalt gleich dem Spalteninhalt setzen).
Das funktioniert zwar auch wunderbar, dauert aber zumindest auf den Rechnern auf der Arbeit deutlich länger als das Übertragen per "Daten in Felder".

Ich habe mich mehrere Tage ausgiebig mit dem Problem beschäftigt, aber habe einfach keine Lösung finden können.

Dass es bei OO Basic so schwer ist wie bei keiner anderen mir bekannten Programmiersprache, an Hinweise, Lösungsansätze oder auch einfach nur dokumentierte Funktionen zu kommen, tut dabei natürlich sein Übriges.
Antworten