Seite 1 von 1

Kein Zugriff auf temporary table über Formular

Verfasst: Mi 13. Mai 2020, 13:31
von doko
Hintergrund:
Ich schreibe eine Datenbankanwendung zur Depotverwaltung. Für die Auswahl aus einem Bestand zum Zwecke eines Depotübertrags erstelle ich per Macro eine temporäre Tabelle:
sub createTransferBestand(pDepot_oid as Long)
DIM oDatenquelle AS OBJECT
DIM oVerbindung AS OBJECT
DIM oSQL_Anweisung AS OBJECT
DIM stSql AS STRING

oDatenQuelle = thisDatabaseDocument.CurrentController
If NOT (oDatenQuelle.isConnected()) Then
oDatenQuelle.connect()
End If

oVerbindung = oDatenQuelle.ActiveConnection()
oSQL_Anweisung = oVerbindung.createStatement()

stSQL = "DROP temporary TABLE IF EXISTS Temp_TransferBestand"
oSQL_Anweisung.execute (stSQL)

stSQL = "create temporary table Temp_TransferBestand (oid int(11) NOT NULL AUTO_INCREMENT , primary key (oid), Menge decimal(14,2) DEFAULT 0, Alles boolean) "
stSQL = stSQL + "select * from vDepotposition where Depot_oid = " + pDepot_oid
oSQL_Anweisung.execute (stSql)

oSQL_Anweisung.close()
end sub
Danach öffne ich ein Formular, was auf diese Tabelle zugreift und eine Auswahl von Bestandspositionen für den Transfer ermöglicht.

Mein Problem:
Das Formular sagt, es kennt diese Tabelle nicht. Sie wird auch nicht unter dem Reiter Tabellen (base) angezeigt. Ich kann aber über eine SQL-Abfrage auf die Tabelle zugreifen.
Ich habe also aus der temporären eine normale Tabelle gemacht (die ich auch für die Formularerstellung verwendet habe). Alles funktioniert wunderbar, auch wenn ich den Macro von normal auf temporary umstelle (solange die Session geöffnet bleibt). Ich kann sogar die normale Tabelle in der DB löschen und es funktioniert noch.
Nur wenn ich Base verlasse und wieder starte, kennt das Formular die temporäre Tabelle nicht (obwohl der Macro sie ja in der Session erstellt).
Work-around ist, dass ich die Tabelle als normale Tabelle ohne Einträge in der DB belasse und in Base mit der temporary table arbeite (das geht, weil die temporary table sich quasi vor die normale Tabelle legt, solange sie existiert).

Gibt es einen anderen Weg, um in Base mit einem Formular auf einer temporären Tabelle zu arbeiten?

Meine Umgebung:
MySQL Workbench Community (GPL) for Linux/Unix version 6.3.8 CE build 1228 (64 bit)
Configuration Directory: /home/er/.mysql/workbench
Data Directory: /usr/share/mysql-workbench
Cairo Version: 1.15.10
OS: Linux 4.15.0-99-generic
CPU: 12x Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz (3162.399MHz) - 31,35GiB RAM
Distribution: Ubuntu 18.04.4 LTS

MariaDB Server version 5.5.57-MariaDB

mysql Ver 14.14 Distrib 5.7.30, for Linux (x86_64) using EditLine wrapper

LibreOffice Version: 6.3.6.2

Re: Kein Zugriff auf temporary table über Formular

Verfasst: Mi 13. Mai 2020, 16:15
von RobertG
Hallo doko,

ich hatte das auch schon einmal für das Base-Handbuch mit der MariaDB durchprobiert. Das habe ich dann so auch im Handbuch hinterlegt:
Leider zeigt Base die temporären Tabellen nicht im Tabellencontainer an. Es kann über Abfragen auf diese Tabellen zugegriffen werden. Der Zugriff ist allerdings nur lesend möglich, so dass neue Inhalte für diese Tabellen nur über die direkte SQL-Eingabe oder über Makros erfolgen kann.
Du könntest also das Formular gegebenenfalls über eine Abfrage mit Daten versorgen.

Gruß

Robert