Aloha
Gast hat geschrieben:Kann man denn SQL-Abfragen (an eine MSSQL-Datenbank) starten ohne das die Datenbank registriert ist ?
Ja, kann man.
In Deinem Fall würde das ganz einfach so aussehen:
Code: Alles auswählen
oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
sName = "file://xxx.odb"
oDatenquelle = oBaseContext.getByName(sName)
oDatenquelle.setLoginTimeout( 10 ) ' sekunden
oVerbindung = oDatenquelle.getConnection( "xxx", xxx )
Gast hat geschrieben:Die Lebensdauer einer Variable endet doch mit dem Macroende, oder liege ich da falsch?
Wenn sie nicht als globale Variable definiert ist, endet die Lebensspanne spätestens mit dem Macroende, das stimmt.
Die meisten sterben sogar mit dem Prozedurende, darauf wollte ich hinaus.
Wenn Du nun die SQL-Abfragen in eine eigene Prozedur auslagerst, kann, muss aber nicht, das eventuell dabei behilflich sein, dass der Speicher sofort wieder frei gegeben wird.
Also nach dem Prinzip:
Code: Alles auswählen
Sub Main
oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
sName = "file://xxx.odb"
oDatenquelle = oBaseContext.getByName(sName)
oDatenquelle.setLoginTimeout( 10 ) ' sekunden
oVerbindung = oDatenquelle.getConnection( "xxx", xxx )
oStatement = oVerbindung.createStatement()
Dim aAbfragen(9) as String '10 Abfragen
aAbfragen(0) = "select xxx"
aAbfragen(1) = "select yyy"
'usw
For i = 1 To 100 '100 Projekte
For Each Abfrage in aAbfragen
SQLAbfrage(oStatement,Abfrage)
Next Abfrage
Next i
End Sub
Sub SQLAbfrage(ByRef oStatement as Object,ByVal SQLString as String)
Dim oResult as Object
oResult = oStatement.executeQuery(SQLString)
While oResultSet.Next()
xxx = val(oResultSet.getString(1))
' usw.
Wend
End Sub
Ob das tatsächlich Linderung verschafft, kann ich Dir nicht mit Sicherheit sagen, aber ich könnte es mir gut vorstellen.
Abgesehen davon sollte der Vorgang allein schon dadurch schneller sein, dass keine überflüssigen Schritte jedes Mal aufs neue wiederholt werden.