von saxo » Fr, 15.10.2021 21:05
Hallo,
bin auf den Geschmack gekommen mit der Programmiererei, aber SQL schafft mich. Will eine Abfrage in eine Base-Tabelle schreiben (nicht Calc Tabelle). Falls sie schon existiert, dann löschen und neu schreiben. Bekomme noch nicht mal das Erstellen einer Tabelle hin, s.u.
Hintergrund des Ganzen ist, dass die Writer Literaturdatenbank nicht relational ist und nur auf eine Tabelle zugreifen kann, nicht auf eine Abfrage. Wenn ich also 10 Verweise in einem Buch habe, muss ich 10x den Buchtitel, Autor, Verlag usw. angeben. Lösung wäre eine normalisierte Datenbank-Abfrage die dann in eine Tabelle geschrieben wird, die Writer versteht.
Sub QueryToTable()
Dim vDataSource, vStatement, vResultSet 'UNO-services should have variant variables, object only for basic
sNew = "Personen1"
sOld = "Personen"
vDataSource = ThisDataBaseDocument.CurrentController
If NOT (vDataSource.isConnected()) THEN vDataSource.connect()
vStatement = vDataSource.ActiveConnection.createStatement()
vStatement.ResultSetType = 1005
s = "CREATE TABLE """ & sNew & """ (id INTEGER PRIMARY KEY, LIKE """ & sOld & """ INCLUDING DEFAULTS EXCLUDING IDENTITY)"
' s = "CREATE TABLE """ & sNew & """ AS (SELECT * FROM """ & sOld & """) WITH DATA"
MsgBox s
vResultSet = vStatement.executeQuery(s)
' vResultSet = vStatement.executeQuery("Select * INTO """sNew""" FROM """sOld"""")
End Sub
- Dateianhänge
-
- QueryToTable.odb
- (5.43 KiB) 241-mal heruntergeladen
Hallo,
bin auf den Geschmack gekommen mit der Programmiererei, aber SQL schafft mich. Will eine Abfrage in eine Base-Tabelle schreiben (nicht Calc Tabelle). Falls sie schon existiert, dann löschen und neu schreiben. Bekomme noch nicht mal das Erstellen einer Tabelle hin, s.u.
Hintergrund des Ganzen ist, dass die Writer Literaturdatenbank nicht relational ist und nur auf eine Tabelle zugreifen kann, nicht auf eine Abfrage. Wenn ich also 10 Verweise in einem Buch habe, muss ich 10x den Buchtitel, Autor, Verlag usw. angeben. Lösung wäre eine normalisierte Datenbank-Abfrage die dann in eine Tabelle geschrieben wird, die Writer versteht.
Sub QueryToTable()
Dim vDataSource, vStatement, vResultSet 'UNO-services should have variant variables, object only for basic
sNew = "Personen1"
sOld = "Personen"
vDataSource = ThisDataBaseDocument.CurrentController
If NOT (vDataSource.isConnected()) THEN vDataSource.connect()
vStatement = vDataSource.ActiveConnection.createStatement()
vStatement.ResultSetType = 1005
s = "CREATE TABLE """ & sNew & """ (id INTEGER PRIMARY KEY, LIKE """ & sOld & """ INCLUDING DEFAULTS EXCLUDING IDENTITY)"
' s = "CREATE TABLE """ & sNew & """ AS (SELECT * FROM """ & sOld & """) WITH DATA"
MsgBox s
vResultSet = vStatement.executeQuery(s)
' vResultSet = vStatement.executeQuery("Select * INTO """sNew""" FROM """sOld"""")
End Sub