Base: Formularzugriff in Basic

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

Moderator: Moderatoren

hugo43
*
Beiträge: 10
Registriert: Di, 15.02.2011 22:26

Base: Formularzugriff in Basic

Beitrag 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
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: Formularzugriff in Basic

Beitrag 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
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
hugo43
*
Beiträge: 10
Registriert: Di, 15.02.2011 22:26

Re: Base: Formularzugriff in Basic

Beitrag 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
gogo
*****
Beiträge: 207
Registriert: Mi, 10.11.2010 13:11

Re: Base: Formularzugriff in Basic

Beitrag 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
g
LucidLynx/WinXP LibreOffice v3.3.2 ab 03/12 v3.3.2 & v3.4.5
hugo43
*
Beiträge: 10
Registriert: Di, 15.02.2011 22:26

Re: Base: Formularzugriff in Basic

Beitrag 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
hugo43
*
Beiträge: 10
Registriert: Di, 15.02.2011 22:26

Re: Base: Formularzugriff in Basic

Beitrag 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!
hugo43
*
Beiträge: 10
Registriert: Di, 15.02.2011 22:26

Re: Base: Formularzugriff in Basic

Beitrag 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
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Base: Formularzugriff in Basic

Beitrag von DPunch »

Aloha

Häng mal ans Ende Deines Codes noch

Code: Alles auswählen

If oSubForm.isModified Then
	oSubForm.updateRow
End If
und schau, ob das Dein Problem behebt.
hugo43
*
Beiträge: 10
Registriert: Di, 15.02.2011 22:26

Re: Base: Formularzugriff in Basic

Beitrag von hugo43 »

Danke-das war`s!
Gruüße aus Passau
Rudi
Antworten