Base: Formularfelder per Makro auslesen

Moin,

ich habe ein paar Probleme dabei Formularfelder auszulesen. Genau
genommen bastele ich da schon den ganzen Tag dran, aber das, was ich
möchte klappt nicht. Ich finde auch irgendwie die richtige Doku nicht.

Ich versuche es mal ganz knapp darzustellen:

Codeausschnitt:

01 oForm = thisComponent.Drawpage.Forms.getByName("MainForm")
02 oGrid = oForm.getByName("MainForm_Grid")
03 oField = oGrid.getByName("zae_ID")
04 iZaehler = oField.text
05
06
07 oSubForm = oForm.getByName("SubForm")
08 oField = oSubForm.getByName("ta_ID")
09 iTarif = oField.text
10
11 oField = oSubForm.getByName("zuordnungsdatum")
12 unoDatum = oField.getDate ??

Ich finde, dass sich die Zeilen 03/04 von den Zeilen 08/09 vom
logisch-inhaltlich nicht unterscheiden.
In beiden Fällen werden Felder ausgelesen, die über einen
Primärschlüssel (INTEGER) in das Formular gekommen sind und in beiden
Fällen sollen die Werte in Variablen gespeichert werden, die als INTEGER
angelegt sind.

Erst Zeile 09 bringt aber die Fehlermeldung:

  BASIC-Laufzeitfehler.
  Eigenschaft oder Methode nicht gefunden: text.

Warum fonktioniert der vergleichbare Code also beim ersten Mal und nicht
mehr beim zweiten Mal???

Wo finde ich eine Liste der Methoden mit denen man die ausgelesenen
Feldinhalte in Variablen speichern kann?
Wie speichere ich das Datum in eine Variable, die dann hinterher das
Datum über ein SQL-Statement in die Datenbank speist?
Das Datum entstammt im konkreten Fall einem reinen Eingabefeld, stammt
also nicht aus irgendeiner Datenbanktabelle.

Und vielen Dank für die hilfreichen Antworten, die ich von Euch in den
vergangenen Wochen immer dann auf meine Fragen bekommen habe, wenn ich
mal nicht mehr weiter wusste. :slight_smile:

Gruß..
Wolfgang

Hallo Wolfgang,

Ich finde, dass sich die Zeilen 03/04 von den Zeilen 08/09 vom
logisch-inhaltlich nicht unterscheiden.
In beiden Fällen werden Felder ausgelesen, die über einen
Primärschlüssel (INTEGER) in das Formular gekommen sind und in beiden
Fällen sollen die Werte in Variablen gespeichert werden, die als INTEGER
angelegt sind.

Du liest hier das aus, was in den Feldern geschrieben steht. Die
Eigenschaft "Text" gibt es nicht bei allen Kontrollfeldern. Nimm doch
direkt CurrentValue. Dann hast Du den Wert und auch wirklich einen
Zahlenwert. INTEGER aus dem Datenbankbereich müsste LONG im Makro sein,
wenn Du in entsprechend hohe Zahlenbereiche kommst.

Wo finde ich eine Liste der Methoden mit denen man die ausgelesenen
Feldinhalte in Variablen speichern kann?

Hast Du Dir das Base-Handbuch herunter geladen? Da wirst Du auch mit
Beispielen versorgt:
http://de.libreoffice.org/hilfe/dokumentation/
Die jeweils aktuell in Bearbeitung befindliche Version kannst Du hier
nachsehen:
http://robert.familiegrosskopf.de/lo_hb_dev/

Wie speichere ich das Datum in eine Variable, die dann hinterher das
Datum über ein SQL-Statement in die Datenbank speist?
Das Datum entstammt im konkreten Fall einem reinen Eingabefeld, stammt
also nicht aus irgendeiner Datenbanktabelle.

Da steht dann auch etwas über die Umwandlung von Datumswerten. Für die
Weitergabe an die Datenbank musst Du so einen Datumswert so zusammen
fügen: 2014-11-15.

Vielleicht hilft Dir diese Funktion:

FUNCTION Date_2_SQLDate(d AS DATE) AS STRING
  DIM stMonth AS STRING
  DIM stDay AS STRING
  IF Month(d) < 10 THEN
    stMonth = "0" + Trim(Str(Month(d)))
  ELSE
    stMonth = Trim(Str(Month(d)))
  END IF
  IF Day(d) < 10 THEN
    stDay = "0" + Trim(Str(Day(d)))
  ELSE
    stDay = Trim(Str(Day(d)))
  END IF
  Date_2_SQLDate = Trim(Str(Year(d))) +"-"+ stMonth +"-"+ stDay
END FUNCTION

Gruß

Robert

Hallo Wolfgang,

Hallo Robert,

vielen Dank für Deine Bemühungen.

Du liest hier das aus, was in den Feldern geschrieben steht. Die
Eigenschaft "Text" gibt es nicht bei allen Kontrollfeldern. Nimm doch
direkt CurrentValue. Dann hast Du den Wert und auch wirklich einen
Zahlenwert. INTEGER aus dem Datenbankbereich müsste LONG im Makro sein,
wenn Du in entsprechend hohe Zahlenbereiche kommst.

Das hat mit CurrentValue funktioniert jeweils die einzelnen IDs aus den dantenbankgebundenen Feldern auszulesen.

Das größere Problem war es, das Datum aus dem nicht an ein Datenbankfeld gebundenen Datumsfeld im Formular zu lesed, das hat letztlich nur mit

DIM sSqlDate AS STRING

DIM unoDatum AS NEW com.sun.star.util.Date

.
.
.

     oField = oSubForm.getByName("zuordnungsdatum")
     unoDatum = oField.getCurrentValue()

Und dann ist es auch einfach das Datum in einen String umzuwandeln :slight_smile:

     sSqlDate = unoDatum.Year & "-" & unoDatum.Month & "-" & unoDatum.Day

Das hat mich echt Schweiß gekostet zumal ich vorher alle Variationen von Datentypen für das Datumsfeld (STRING, DATE, INTEGER, ..) in Kombination für alle Varianten von Methodenaufrufen (Current Vaule mit und ohne get oder () ) die mir eingefallen sind getestet habe ..

Liebe Grüße ..
Wolfgang