Seite 1 von 1
Makro: Datenbankabfrage in Feldbefehle schreiben
Verfasst: Sa, 27.04.2013 14:06
von gerhard.muellner
Nach einigen Versuchen ist es mir zwar gelungen das Ergebnis einer Datenbankabfrage ist die Datenbank-Feldbefehle eines Textdokument zu schreiben.
da aber sehr viele Felder aus der Datenbank in das Textdokument übernommen werden müssen (mehrfach Verwendungen der Feldbefehle muß möglich sein) , dauert das sehr lange (geschachtelte Schleifen).
Früher unter StartOffice5.1(2) war das einfach mit Selection.DataUpdateFields
kennt jemand eine schnellere Lösung?
Code: Alles auswählen
sub Test4
Dim myDataBaseContext as Object
Dim myStatement as Object
Dim ResultSet as Object
Dim oTxt as Object
Dim oFeld as Object
Dim i as integer
Dim s as string
myDataBaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
myStatement = myDataBaseContext.getByName("Adreßbuch").getConnection("","").createStatement()
ResultSet=myStatement.executeQuery("SELECT * FROM Adressen WHERE FIRMA = 'Test1'")
if not IsNull(ResultSet) then
ResultSet.next ' nur den ersten Datensatz verwenden
' while ResultSet.next ' alle gefundene Datensaetze verwenden
for i=1 to ResultSet.Columns.Count
oTxt=thiscomponent.getTextFields().createEnumeration()
while oTxt.hasmoreElements()
oFeld=oTxt.nextElement
if ofeld.supportsService("com.sun.star.text.TextField.Database") then
if ResultSet.Columns.ElementNames(i-1)=ofeld.Textfieldmaster.DataColumnName then
oFeld.Content=ResultSet.getString(i)
endif
endif
wend
next i
' wend ' alle gefundene Datensaetze verwenden
endif
msgbox "Fertig"
end sub
Re: Makro: Datenbankabfrage in Feldbefehle schreiben
Verfasst: Sa, 27.04.2013 16:18
von F3K Total
Hi,
ich kenne StartOffice5.1 nicht .
In OpenOffice gibt es die Datenquellenansicht für registrierte Datenbanken.
Mit F4 oder Ansicht/Datenquellen öffnest du sie.
Wählst Du eine Zeile, gibt es "Daten in Felder", was vermutlich deiner gewünschten Funktionalität "Selection.DataUpdateFields" entspricht.
Klappt mit deiner Adressdatei nicht, weil die Spaltenköpfe nicht mit den Feldnamen im Textdokument übereinstimmen, z.B.
steht in Adressen F
IRMA,C,95 während das Feld in der Textdatei schlicht
FIRMA heißt.

- F4.png (24.38 KiB) 3196 mal betrachtet
Gruß R
Re: Makro: Datenbankabfrage in Feldbefehle schreiben
Verfasst: Sa, 27.04.2013 16:29
von gerhard.muellner
das mit den Datenbankköpfen ist vermutlich durch das umwandeln der DBASE datei entstanden (da ich hier keine DBASE dateien anhängen darf)
das mit F4 und "Daten in Felder" ist mir natürlich bekannt.
ich suche einen basic Makro der automatisch das Ergebnis der Datenbank Abfrage in die Feldbefehle der Writer Datei einfügt. (etwa so wie "Daten in Felder" nur halt als basic Makro)
Re: Makro: Datenbankabfrage in Feldbefehle schreiben
Verfasst: Sa, 27.04.2013 16:34
von F3K Total
Hi,
gezippte DBase-Daten kannst Du schon anhängen.
Und eine weitere Info ist wichtig: Was genau willst Du erreichen ?
Einen Auszug aus der Datenbank für genau eine Firma?
Wo wählst du sie aus?
R
EDIT: Hier werden zwei andere Methoden gezeigt
EDIT2: Crossposting ohne
Referenz ist unhöflich!
Re: Makro: Datenbankabfrage in Feldbefehle schreiben
Verfasst: Sa, 27.04.2013 16:53
von gerhard.muellner
F3K Total hat geschrieben:Hi,
gezippte DBase-Daten kannst Du schon anhängen.
Und eine weitere Info ist wichtig: Was genau willst Du erreichen ?
Einen Auszug aus der Datenbank für genau eine Firma?
Wo wählst du sie aus?
R
EDIT: Hier werden zwei andere Methoden gezeigt
EDIT2: Crossposting ohne
Referenz ist unhöflich!
oh... Entschuldigung für das Crossposting!!
Beim ersten Dokument wird mit F4 und "Daten in Felder" eine Datei erstellt. z.b. ein Lieferschein.
Um nun aus dem Lieferschein automatisch z.b. eine Rechnung machen zu können, frage ich erneut in der Datenbank mit den Firmendaten z.b. Kundennummer etc. an, um diese dann in das neue Dokument automatisch einzufügen. Ich möchte nicht noch einmal mit F4 und "Daten in Felder" erneut die Firma suchen müssen.
Da zuvor einige andere Makros die neue Datei erstellen, hilft mir die Technik von "MailMerge" nicht weiter.
wie gesagt: das oben gezeigte vereinfachte Makro funktioniert auch soweit, nur ist es einfach zu langsam (geschachtelte Schleife)
ich suche eine Lösung, die dem im Bespiel entsprechenden "Selection.DataUpdateFields("Adreßbuch","Adressen","SELECT * FROM Adressen WHERE FIRMA = 'Test1'",1)" aus StartOffice5.1(2) entspricht, also die Datenbankabfrage ausführt und mit dem Ergenis alle Feldbefehle des bereits offenen Writer-Dokument befüllt. (Wie wenn man von Hand "Daten in Felder" anklickt)
Re: Makro: Datenbankabfrage in Feldbefehle schreiben
Verfasst: Sa, 27.04.2013 18:26
von F3K Total
Hi,
im englischen Forum habe ich diesen
Beitrag dazu gefunden.
Damit läuft dein Code rappzap durch, denn mit
hasbyname und folgendem
getbyname wird die entsprechende Tabellenspalte direkt angesprochen. So kannst du auf deine i-Schleife verzichten hast also nur einen Durchlauf statt 186.
Code: Alles auswählen
sub Test4
Dim myDataBaseContext as Object
Dim myStatement as Object
Dim ResultSet as Object
Dim oTxt as Object
Dim oFeld as Object
Dim i as integer
Dim s as string
myDataBaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
myStatement = myDataBaseContext.getByName("Adressen").getConnection("","").createStatement()
ResultSet = myStatement.executeQuery("SELECT * FROM Adressen WHERE FIRMA = 'Test2'")
if ResultSet.next then' nur den ersten Datensatz verwenden
oTxt = thiscomponent.getTextFields().createEnumeration()
while oTxt.hasmoreElements()
oFeld = oTxt.nextElement
if ofeld.supportsService("com.sun.star.text.TextField.Database") then
sfieldname = ofeld.Textfieldmaster.DataColumnName
If ResultSet.Columns.hasByName(sfieldName) then
s$ = ResultSet.Columns.getByName(sfieldName).String 'Get desired presentation string.
ofeld.CurrentPresentation = s$ 'Set the presentation.
endif
endif
wend
msgbox "Fertig"
else
msgbox "Abbruch, Fehler"
endif
end sub
Gruß R
Re: Makro: Datenbankabfrage in Feldbefehle schreiben
Verfasst: Sa, 27.04.2013 19:08
von gerhard.muellner
F3K Total hat geschrieben:Hi,
im englischen Forum habe ich diesen
Beitrag dazu gefunden.
Damit läuft dein Code rappzap durch, denn mit
hasbyname und folgendem
getbyname wird die entsprechende Tabellenspalte direkt angesprochen. So kannst du auf deine i-Schleife verzichten hast also nur einen Durchlauf statt 186.
Gruß R
Super!! das ist eine Lösung.
Vielen Dank für die rasche Hilfe.