Seite 1 von 1
Datenquelle - Datensatz markieren
Verfasst: Mo, 14.12.2009 17:24
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?
Re: Datenquelle - Datensatz markieren
Verfasst: Di, 15.12.2009 15:14
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
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.
Re: Datenquelle - Datensatz markieren
Verfasst: Sa, 19.12.2009 13:16
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
Re: Datenquelle - Datensatz markieren
Verfasst: Mi, 23.12.2009 18:00
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.