Seite 1 von 1

Formularaufruf über ID

Verfasst: Di 21. Apr 2015, 17:09
von Freischreiber
Hallo,

in einem Auftragsformular, in dem es ein Unterformular mit Tabellenfeld für zugeordnete Kunden gibt (Verbindung über Zwischentabelle), möchte ich per Makroknopf aus der markierten Kundenzeile dessen Adressformular aufrufen.

Das Makro heißt bisher:

Code: Alles auswählen

Sub Adressformularaufruf 'Ruft zu dem markierten Kunden das Adressformular auf
	oformAdressen = thisComponent.drawpage.forms.MainForm.SubForm_Zugeo_Kunden
	stAdressID = oformAdressen.getInt(oformAdressen.findcolumn("AdressID"))
	oformAdresse = ThisDatabaseDocument.getformdocuments.GetByName("f-Adresse") 
	oformAdresse.open
	oformAdresse = oformAdresse.Component.drawpage.forms(0)
	'msgbox stAdressID
	oformAdresse.Filter = "ID = 'stAdressID'" 
	oFormAdresse.ApplyFilter = TRUE
	oFormAdresse.reload
End Sub
Der Ablauf scheitert mit "SQL-Status: 22018 Fehler-Code: -3438 data exception: invalid character value for cast"
Das SQL-Kommando, welches zu diesem Fehler führte, ist:
SELECT "t-adressen".* FROM "t-adressen" WHERE "ID" = 'stAdressID' ORDER BY "Nachname", "Vorname"


An dieser Fehlermeldung ist mir wie immer alles unverständlich:
- Ich frage einen Integerwert ab, und die ID ist in der Adressentabelle ein Integerwert. Wie kann das "invalid" sein?
- Woher kommt die Select-Abfrage? In dem Makro gibt es nur einen Filter.
- Wie kriege ich sie los? (also die Fehlermeldung)

Die msgbox ermittelt korrekt die ID des markierten Kunden, z. B. 813. Wenn ich den Filter mit oformAdresse.Filter = "ID = '813'" aufrufe, öffnet das Adressformular korrekt mit dem entsprechenden Kundennamen.

Ratlos
Freischreiber

Re: Formularaufruf über ID

Verfasst: Di 21. Apr 2015, 18:23
von Freischreiber
Hallo nikki,

mit der Zeichenfolge? Aber oben wird doch mit getInt der Zahlenwert aus der Tabelle geholt?

Wenn ich

Code: Alles auswählen

intAdressID = VAL(stAdressID)
	oformAdresse.Filter = "ID = 'intAdressID'" 
ergänze, geht es auch nicht...

Gruß
Freischreiber

Re: Formularaufruf über ID

Verfasst: Di 21. Apr 2015, 19:37
von Freischreiber
Oder mit

Code: Alles auswählen

	intAdressID = CInt(stAdressID)
	oformAdresse.Filter = "ID = 'intAdressID'" 
Auch nicht...

Re: Formularaufruf über ID

Verfasst: Di 21. Apr 2015, 20:35
von RobertG
Hallo Freischreiber,

so müsste es heißen:

Code: Alles auswählen

 oformAdresse.Filter = "ID = '"+stAdressID+"'" 
Du hast einen Wert ausgelesen, aber in der Abfrage kommt nur

Code: Alles auswählen

SELECT "t-adressen".* FROM "t-adressen" WHERE "ID" = 'stAdressID' ORDER BY "Nachname", "Vorname"
an, weil Du einen Text in den Filter schreibst. Schau einfach auf die Farben im Basic-Editor. Daran kannst Du erkennen, dass die gesamte Filtereinstellung bei Dir nur aus Text besteht.

Die Abfrage wird aus Base anhand der Datenquelle für Dein Formular und dem Eintrag für den Filter zusammengebaut.
Die Abfrage für das Formular scheint

Code: Alles auswählen

SELECT "t-adressen".* FROM "t-adressen" ORDER BY "Nachname", "Vorname"
zu sein. Vielleicht hast Du auch die Sortierung in dem Formular erstellt, so dass letztlich die Datenquelle des Formulars nur "t-adressen" lautet. Aber irgendwie muss Base ja den Filter einbauen und damit die Daten auslesen. Und das macht Base eben mit einer Abfrage.

Gruß

Robert

Re: Formularaufruf über ID

Verfasst: Mi 22. Apr 2015, 11:28
von Freischreiber
Hallo Robert,

nein, wie peinlich: Der Filter hat in den Adressen-IDs nach dem Namen der Variablen gesucht? Jetzt kapier ich auch die erste Antwort von nikki.

Vielen Dank
Freischreiber

Zwei Fragen noch:
Zu den Textfarben des Editors finde ich nirgends eine Dokumentation. Und in den Libreoffice-Optionen gibt es zwar "Optionen für die BASIC-IDE", aber die sind bei mir alle ausgegraut. Wie kommt das?

Re: Formularaufruf über ID

Verfasst: Mi 22. Apr 2015, 16:13
von RobertG
Hallo Freischreiber,

hast Du wirklich schon die Hilfe zu LibreOffice Basic durchgesucht? Ich könnte jetzt hier ein paar Zeilen aus dem Base-Handbuch rein kopieren - nur bringt das nichts, weil die Farbe dabei nicht überkommt ...

Für die Optionen der Basic-IDE musst Du die experimentellen Funktionen aktivieren.

Gruß

Robert

Re: Formularaufruf über ID

Verfasst: Mi 22. Apr 2015, 16:55
von Freischreiber
Hallo Robert,

so wie du es im Handbuch hast, macht es wirklich Sinn:
BASIC-Editor Farben 2.gif
BASIC-Editor Farben 2.gif (16.25 KiB) 2439 mal betrachtet
Aber in meiner LO-Version sind die Farben mehrfach vergeben, was beim Anschauen nicht viel Sinn ergibt:
BASIC-Editor Farben.gif
BASIC-Editor Farben.gif (32.04 KiB) 2439 mal betrachtet
Das werd ich jetzt mal abändern bei mir, danke für den Tip!

Gruß
Freischreiber