Hallo Detlev,

D. Wortelker schrieb:
> ... Leider kann ich mit ihr nicht viel anfangen, da ich, was
> Datenbanken angeht, ziemlicher Anfänger bin. 
Dann fange mal hier an:
- http://ffm.junetz.de/members/reeg/DSP/node6.html
-
http://www.ianywhere.com/developer/product_manuals/sqlanywhere/0901/de/html/dbfgde9/00000054.htm
 
(http://www.ianywhere.com/developer/product_manuals/sqlanywhere/0901/de/pdf/dbfgde9.pdf#sec-concepts)
falls du Englisch kannst:
- http://philip.greenspun.com/sql/introduction.html

Ich persönlich habe das Thema mir im Informatikunterricht erarbeitet -
allerdings ohne Lehrbuch oder so, was ich jetzt empfehlen könnte.
(Dafür gab's ja den Lehrer ;))
>> was möchtest du damit erreichen?
> ich möchte per Kombinationsfeld einen Datensatz im Formular auswählen
> und somit anzeigen können. Die Datensätze sollen im Formular weder
> verändert noch gelöscht werden können. Auch Eingabe nur über die
> Tabelle oder ein gesondertes Formular.
Das ist doch schon etwas konkreter. Also ist die Spalte, auf die sich
das Kombinationsfeld bezieht zugleich auch Primärschlüssel oder
zumindest Superschlüssel (= nicht kürzbarer Schlüssel, d.h. um einen
Datensatz zu identifizieren reicht die Kenntnis des Wertes aus dieser
Spalte.)

Würde soetwas darauf zutreffen?
  Name der Person => Adresse anzeigen
(Voraussetzung: Es gibt keine zwei Personen mit gleichem Namen oder zwei
Adressen für eine Person).

Mich interessiert ein praktisches Beispiel / Ziel, damit ich verstehen
kann, worum es geht und ggf. ob es einfacher geht.
>> ...Oder möchtest du mit dem Kombinationsfeld nur den Datensatz auswählen
>> können?
>> Wenn ja, so brauchst wieder zwei Formulare.
>> Das Hauptformular beinhaltet jedeglich das Kombinationsfeld und wird aus
>> einer Dummytabelle mit genau einer Spalte (Form) erstellt und einem
>> Datensatz erstellt.
>> Das Unterformular wird mit der eigentlichen Tabelle verknüpft.
>>
>> Weiter brauchst du eine Abfrage, um das Kombinationsfeld mit Daten
>> füttern zu können.
>> Diese könnte so aussehen: "SELECT Form, Form FROM Tabelle" . Trage sie
>> anschließend bei Listeninhalt im Register Daten von
>> Kontrollelementeigenschaften ein...
>>   
> Das habe ich nicht ganz verstanden, habe dennoch mehrere Tage lang
> gegoogelt und ausprobiert mit Formular und Subformular - nichts hat
> geklappt.
Hm. Also zum Lesen könnte eventuell folgendes interessant sein:
http://www.oreilly.de/catalog/oobasebasger/index.html

Vom Prinzip gilt:
  Es gibt in Datenbanken Tabellen. (Es gibt Lehren, danach besteht eine
Datenbank nur aus Tabellen und bei manchen werden gerade noch Views
erlaubt. In OOo enthalten Datenbankdokumente auch Abfrage und ggf.
Formulare und Berichte.)
  Mittels Abfragen (SQL: SELECT - Befehl) kann man daraus dynamisch
Tabellen mit z.B. nur bestimmten Spalten oder Datensätzen aus ggf. auch
mehreren Tabellen erzeugen.
  Es gibt auch "Abfragen" (SQL: UPDATE, DELETE, INSERT, ...), welche
Daten modifizieren können.
  Die mittels SELECT abfragten Daten können nicht modifiziert werden.
  (Für SQL siehe Anleitung für MySQL auf http://www.mysql.com/doc )

  OpenOffice.Org Dokumente sind baumartig aufgebaut.

  Ein Formular ist ein Element im Dokument und bildet zugleich einen
Container, welche Anzeigeelemente enthält und mit Daten verknüpft.
  Es ist unsichtbar. Ein Formular zeigt immer auf einen bestimmten
Datensatz seiner Datenquelle. (ausgewählter Datensatz)

  Eine Spezialität von OpenOffice (nicht im Vgl. zu Access - aber egal
;) ) ist die Funktion, in ein Formular
  ein weiteres Formular (genannt Subformular oder Unterformular)
einzufügen. Das übergeordnete Formular wird meist
  Hauptformular genannt.
  Die Spezialität besteht darin, dass diese Formulare verknüpft werden
können, und zwar derart, dass, wenn im Hauptformular ein bestimmter
Datensatz ausgewählt wird, die für das Subformular zur Verfügung
stehenden Datensätze automatisch gefiltert werden.
  In bestimmten Fällen kann im Subformular dann nur noch ein oder kein
Datensatz ausgewählt werden.
  Es können auf diese Art und Weise nur Formulare verknüpft werden, bei
denen das eine Formular unmittelbares Kind des anderen ist.

   Mit einem Formularelement (Textfeld, Eingabefeld, uvm.) können Daten
des ausgewählten Datensatzes angezeigt - und falls es die Datenquelle
und das Formular zulassen - auch modifiziert werden. (Man kann im
Formular einstellen, dass es seine Datenquelle von seinen Elementen
nicht modifizieren lässt.) Eine Auswahl des Datensatzes ist mit den
meisten Formularelementen nicht möglich.
   Es ist daher mit o.g. Funktionalität nur indirekt möglich, eine
Datenquelle zu filtern, nämlich über die Subformularfunktionalität.

Und da kommt auch schon die erste Ausnahme:
       Das Tabellenformularelement. Mit diesem kann man auch Datensätze
auswählen. Ist allerdings kein Kombinationsfeld (die Spalte in
Kombinationsfeld umzuwandeln bringt nichts, weil man damit nur den
einzelnen Datensatz beabeiten kann.)
   Vielleicht reicht es dir ja, wenn an der Seite eine Leiste (Tabelle
mit einer Spalte) ist, über die man den Datensatz auswählen kann.
  (die anderen Felder werden als "normale" Textfelder angezeigt)
      

>>  
>> ...Weiter wäre möglich, dass zweite Formular wegzulassen und das
>> Kombinationsfeld mit keinem Datenfeld zu verknüpfen.
>> Dann könnte per Macro auf das Formular ein Filter angewendet werden,
>> immer wenn im Kombinationsfeld ein neuer Wert ausgewählt wird.
>> Du könntest auch einfach mit dem Button Filter, AutoFilter oder Suchen
>> in der Formularnavigationsleiste (Symbolleiste, nicht das
>> Formularelement) Suchen oder Filtern, dabei wird allerdings keine Liste
>> zum Auswählen angeboten...
>>   
> Eine meiner ersten Ideen war, da ich per formularbasiertem Filter
> genau das was ich wollte,  erreicht habe, diesen Filtervorgang als
> Makro aufzunehmen, einen Schaltfläche ins Formular einzubauen und der
> Schaltfläche dieses Makro zuzuweisen. Dies scheiterte allerdings
> daran, das das Ausführen des Makros nichts veränderte - es passierte
> nichts.
Hm.
Zunächst ist es ja mit einem einfachen Button nicht getan, du möchtest
doch sicher auch noch Daten aus einem Kombinationsfeld auslesen und
daraus den Filter erstellen. Dann könnte man den Button gleich durch das
Kombinationsfeld ersetzen und das Makro immer dann ausführen, wenn im
Kombinationsfeld ein anderer Datensatz ausgewählt wird. Auf jedenfall
braucht man ein Kombinationsfeld, ein Button schadet nicht.

Die Makrozuordnung geht, indem an jedes Formularelement verschiedene
Ereignisse "gesendet" werden können (durch das Betriebsysstem bzw. die
OpenOffice Software) und man ein Makro zu jedem verarbeiteten Ereigbnis
zuordnen kann. (Nicht jedes Ereignis wird bis an das Element
weitergeleitet oder kann durch ein Makro überschrieben werden, ggf. weil
es in der Implementation so festgelegt wurde z.B. wie ein
Formularelement zu zeichnen ist.)

Nach dem dein Makro nun aus dem Kombinationsfeld die Daten gelesen hat,
muss es den Formularfilter setzen und aktivieren (Objekteigenschaft
"Filter" und "FilterEnabled" oder so des Formulars.) Eventuell muss das
Formular anschließend mit seiner Methode "reload" aktualisiert werden.
Für alle Attribute und Methoden von Klassen kann man gut auf
http://api.openoffice.org suchen. Hinweis: Es gibt immer zwei Klassen
für "ein Formularlement", die eine beschäftigt sich mit der Aufgabe als
Formularbestandteil ( oder Objekt ) und die andere nur mit der
Darstellung (Model). Dies hat mich am Anfang sehr irretiert und brauchte
immer Zeit, bis ich das richtige Objekt / Model hatte.
Als Anlaufpunkt für alle Makrofragen kann man sich gut an
http://www.oooforum.org wenden (Englisch).
[Ich weis nicht wie gut du programmieren kannst, aber ich würde immer
mit OOo Basic anfangen Makros zu schreiben: weils einfach einfacher und
übersichtlicher ist. Für Grundlagen der Basicprogrammierung kann man
auch im OOo Handbuch oder bei Anleitungen für
"Pascal"/"Pyhton"-Programmierung gucken. Letztlich ist die
Programmierung überall ähnlich.]


Mit freundlichen Grüßen,
  Michael Braun
--
PS: Bitte die Rechtschreibung nicht so genau nehmen, es ist hier ja nur
eine Mailingliste.

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Antwort per Email an