Seite 1 von 1
Base: Formularzugriff in Basic
Verfasst: Di, 15.02.2011 22:51
von hugo43
Hallo Leute-zerst mal Grüße Gott-bin neuhier!
Kann mir jemand helfen-habe schon fast eine Woche rugegoogelt und komme zu keinem Ergebnis-folgende Macro läuft einfach nicht.
Bin neu in OOo Basic.
Code: Alles auswählen
REM*** Testzugriff auf ein Datenbankformular mit Namen basictest in der Datenbank awetherische_oele.odb ***
dim oDoc
dim oForms
dim oForm
dim Page
dim oDrawPage
dim oElement
dim X
Sub Main
x = "TEST"
oDoc = ThisComponent
'Ist die Datenbank
x = oDoc.getUrl
msgbox (X)
'Gibt die URL des Datenbankfiles aus - ist korrekt
oForms = ThisComponent.getFormDocuments()
'Ermittelt alle Formulare, die für obige Datenbank erstellt wurden
oForm = oForms.getByIndex(1)
'Weist das Formular mit dem Index 1 zu
x = oForm.Name
msgbox (X)
'Gibt den Namen des Formulars mit Index 1 aus (funktioniert auch mit den anderen Indizes)
'Dieses Formular kann als Writer Dokument abgespeichert werden, müsste also eine DrawPage haben
oPage = oForm.DrawPage
'Gibt den Basic Laufzeitfehler "Eigenschaften oder Methode nicht gefunden" zurück
' oPage = oForm.getDrawPage
'Gibt den Basic Laufzeitfehler "Eigenschaften oder Methode nicht gefunden" zurück
End Sub
OOo Version 3.1.1
In allen Dokumentationen wird die DrawPage als Container for die Subformulare und Controler genannt.
Wie komme ich an die ran.
Ich möchte letztendlich die Felder in den Coltrols per Basic modifizieren.
Vielen Dank im voraus!
Rudi
Moderation,4: Thema ins zuständige Unterforum verschoben, Titel erweitert, CODE tags gesetzt
Re: Formularzugriff in Basic
Verfasst: Mi, 16.02.2011 03:27
von gogo
oPage = oForm.DrawPage
'Gibt den Basic Laufzeitfehler "Eigenschaften oder Methode nicht gefunden" zurück
Die Drawpage ist dem Formular ÜBERgeordnet!
Ich möchte letztendlich die Felder in den Coltrols per Basic modifizieren.
Wenn Du das Form-Objekt hast, dann greifst Du auf die Felder mit: oform.getstring(n) zu (wenn's ein String ist). Das ist ein direkter Zugriff auf die Daten! n ist die 'Spaltenzahl' (siehe:
http://www.starbasicfaq.de/Wieerhltdiei ... ml#Zweig96)
Auf die Kontrollelemente im Formular greiftst Du mit mit oform.getbyname("Name des Kontrollelements") zu.
Lade Dir xray herunter! (
http://bernard.marcelly.perso.sfr.fr/index2.html ) und nicht die SDK-Dokumentation vergessen (
http://download.openoffice.org/other.html#tested-sdk)! Am besten die Version verwenden die Du installiert hast (3.1.1 , wenn die noch online ist)
g
Re: Base: Formularzugriff in Basic
Verfasst: Mi, 16.02.2011 10:55
von hugo43
@gogo
Danke für deine schnelle Antwort!
habe das wieder ausprobiert jetzt mit dem Datenbankobjekt-wieder das selbe! siehe Codebeispiel
(Die Zeilen zwischen den Sternenreihen)
Code: Alles auswählen
REM*** Testzugriff auf ein Datenbankformular mit Namen basictest in der Datenbank awetherische_oele.odb ***
dim oDoc
dim oForms
dim oForm
dim Page
dim oDrawPage
dim oElement
dim X
Sub Main
x = "TEST"
oDoc = ThisComponent
'Ist die Datenbank
x = oDoc.getUrl
msgbox (X)
'****************************************
' oDrawPage = oDoc.getDrawPage
'Gibt den Basic Laufzeitfehler "Eigenschaften oder Methode nicht gefunden" zurück
oDrawPage = oDoc.DrawPage
'Gibt den Basic Laufzeitfehler "Eigenschaften oder Methode nicht gefunden" zurück
'**********************************************
'Gibt die URL des Datenbankfiles aus - ist korrekt
oForms = ThisComponent.getFormDocuments()
'Ermittelt alle Formulare, die für obige Datenbank erstellt wurden
oForm = oForms.getByIndex(1)
'Weist das Formular mit dem Index 1 zu
x = oForm.Name
msgbox (X)
'Gibt den Namen des Formulars mit Index 1 aus (funktioniert auch mit den anderen Indizes)
'Dieses Formular kann als Writer Dokument abgespeichert werden, müsste also eine DrawPage haben
' oPage = oForm.DrawPage
'Gibt den Basic Laufzeitfehler "Eigenschaften oder Methode nicht gefunden" zurück
' oPage = oForm.getDrawPage
'Gibt den Basic Laufzeitfehler "Eigenschaften oder Methode nicht gefunden" zurück
End Sub
Wo bekomme ich X Ray heruntergeladen? - finde nur Beschreibungen aber keine Setup Datei
Glaube schon, daß mir dieses Tool helfen könnte
Rudi
Moderation,4: CODE tags gesetzt
Re: Base: Formularzugriff in Basic
Verfasst: Mi, 16.02.2011 12:05
von gogo
xray besteht aus Basic Modulen die in einer Writer-Datei gespeichert sind. Wenn Du die Datei öffnest gibt's irgenwo einen Button "install" oder so ähnlich, da werden die Bibliotheken dann Deiner Office-Installation hinzugefügt. In der Writerdatei steht auch was Du sonst noch machen solltest, damit diese Bibliothek auch beim Office-Start geladen wird. Wenn Du xray nicht beim Office-Start laden willst, dann musst Du die Bibliothek während der Laufzeit laden, ist auch kein Problem:
Code: Alles auswählen
GlobalScope.BasicLibraries.LoadLibrary("XrayTool")
'dann funktioniert:
xray StarDeskTop
Beim ersten Start von xray musst du dann noch den Pfad zur SDK-Dokumentation angeben, und ggf den zum Browser. Wo sich diese befinden ist Betriebssystemabhängig. Nach dem Aufrufen von xray werden Dir die Methoden und Properties Services ... des abgefragten Objektes angezeigt - wenn Du den SDK installiert hast, dann kannst Du aus dieser Anzeige des Xray-Tools heraus direkt zur Dokumentation der jeweiligen Methode/Prop... springen (wird im Browserfenster geöffnet)
g
Re: Base: Formularzugriff in Basic
Verfasst: Mi, 16.02.2011 20:43
von hugo43
Nochmals vielen Dank für die ausführliche Antwort-habe das Teil heuntergeladen und kann mich jetzt damit beschäftigen!
Grüße aus Passau
Rudi
Re: Base: Formularzugriff in Basic
Verfasst: So, 20.02.2011 16:53
von hugo43
@gogo
Nochmals vielen Dank für die Einführung in XRAY
Das Tool ist Hammer!
Kann jetzt auf die Daten zugreifen-die Berechnung funktioniert auch nur das updateFloat auf das Ergebnisfeld
will nicht. Wo kann der Haken sein?
Code: Alles auswählen
REM*** Berechnung des Mittelwertes aus Min und Max Feldern und Zuweisen an Avrg Feld ***
dim oDoc
dim oForms
dim oForm
dim Page
dim oDrawPage
dim oElement
dim oPageForms
dim oSubForm
dim oSubElement
dim oSubControl
dim oControlColumnMin
dim oControlColumnMax
dim oControlColumnAvg
dim c as Double
dim d as Double
dim e as Double
Sub avrg
oDoc = ThisComponent
oForm = oDoc.DrawPage.Forms.GetByName("MainForm")
oElement = oForm.getByName("Search")
oSubControl = oElement.columns.getByIndex(6)
oControlColumnMin = oElement.columns.getByIndex(4).value
oControlColumnMax = oElement.columns.getByIndex(5).value
c = oControlColumnMin
d = oControlColumnMax
e = 0
e = (c+d)/2
msgbox(e)
oSubControl.updateDouble(e)
msgbox(oSubControl.value)
xray oSubControl
End Sub
msgbox(oSubControl.value) zeigt den richtigen Wert-nur gespeichert wird er nicht.
Das Macro wird in den Ereignissen der Subfoer, die das TableControl Objekt enthält, "vor Datensatzwechsel" ausgeführt
Wie bekomme ich die Daten in Datenbank geschrieben?
Grüße aus Passau
Rudi
Moderation,4: gewöhne Dir bitte an CODE tags zu setzen; Danke!
Re: Base: Formularzugriff in Basic
Verfasst: Mo, 21.02.2011 17:43
von hugo43
Hallo,
nun noch ein Versuch, der leider auch nicht klappt:
Code: Alles auswählen
REM*** Berechnung des Mittelwertes aus Min und Max Feldern und Zuweisen an Avrg Feld ***
dim Bas
dim oDocuments
dim Doc
dim oPage
dim oDrawPage
dim oElement
dim oElements
dim oSubForm
dim oColumns
dim oColumnMin
dim oColumnMax
dim oColumnAvg
dim c as Double
dim d as Double
dim e as Double
Sub avrg
oBase = ThisDatabaseDocument
oDocuments = obase.getFormDocuments()
oDoc = oDocuments.getByName("basictest")
oPage = oDoc.getComponent()
oDrawPage = oPage.DrawPage
oForms = oDrawPage.getForms()
oElement = oForms.getByName("MainForm")
oSubForm = oElement.getByName("Search")
oColumns = oSubForm.getColumns()
oColumnMin = oColumns.getByName("min")
oColumnMax = oColumns.getByName("max")
' xray oColumnMin
c = oColumnMin.Float
d = oColumnMax.Float
e = (c+d)/2
msgbox(e) REM ---------------> Hier steht der richtige Wert
REM ******************************************************
REM Diese Anweisung erzeugt den Fehler "Lesefehler: Eigenschaft ist schreibgeschützt"
REM oColumns.getByName("ranking").Float = e
REM Diese Anweisung erzeugt keinen Fehler-tut aber nichts
oColumns.getByName("ranking").updateFloat(e)
REM ***********************[code]********************************
oColumnAvg = oColumns.getByName("ranking")
msgbox(oColumnAvg.Float) REM ----------> Hier steht ebenfalls der richtige Wert
c = 0
d = 0
e = 0
xray oColumnAvg REM -----------> Auch hier ist der richtige Wert zu sehen
End Sub[/code]
Weiß jemand, was ich da falsch gemacht habe-bin neu bei OOo- hab zwar Erfahrung in Scriptprogrammiereung-
komme aber mir den Mechanismen von OOo nicht ganz zurecht!
Kann mir eigentlich nicht vorstellen, daß ich die Felder mit SQL updaten muß?
An die TableControl ist eine Tabelle angebunden.
Kann da jemand helfen?
Vielen Dank!
Rudi
Re: Base: Formularzugriff in Basic
Verfasst: Di, 22.02.2011 14:21
von DPunch
Aloha
Häng mal ans Ende Deines Codes noch
und schau, ob das Dein Problem behebt.
Re: Base: Formularzugriff in Basic
Verfasst: Mi, 23.02.2011 18:01
von hugo43
Danke-das war`s!
Gruüße aus Passau
Rudi