Makro soll Felder aus Datenbank mit DatenSatzNr X füllen

Das Textverarbeitungsprogramm

Moderator: Moderatoren

egerlach
****
Beiträge: 107
Registriert: Fr, 13.10.2006 20:21

Makro soll Felder aus Datenbank mit DatenSatzNr X füllen

Beitrag von egerlach »

Ein Makro soll einige Felder aus einer Datenbank mit DatenSatzNr. X füllen. Es soll in OO-Writer nach Druck auf eine Funktionstaste ein Makro gestartet werden, das die Datensatz-Nummer X abfragt und danach sofort in dem OO-Brief die Felder (Feldbefehle) gefüllt werden.

Wo fange ich an zu suchen? - Nach welchen Stichworten könnte ich hier im Archiv suchen? - Eine Datenbank unter OO-Base liegt schon vor und ist von OO-Writer aus auch schon sichtbar unter Einfügen -> Feldbefehl -> andere -> Datenbank.

danke schon mal
Eckard
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makro soll Felder aus Datenbank mit DatenSatzNr X füllen

Beitrag von komma4 »

[Beantwortung einer alten Frage - für die nachfolgend Suchenden]


Eckhard,

einen solchen Fall löse ich wie folgt:

A) Vorlage erstellen mit Textmarken ("Adresse1": erste Zeile im Anschriftenfeld, ..., "VertragID": Vertragsnummer, usw.)

B) registriere die Datenquelle, im Bsp.: "DBName" (wenn noch nicht geschehen)

C) Makro erstellen und Schaltfläche zuweisen:

Code: Alles auswählen

' Kontext holen
oDatenbankKontext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
' Datenquelle auswählen
oDatenquelle = oDatenbankKontext.getByName( "DBName" )
' warten ?
oDatenquelle.setLoginTimeout( 10 ) ' sekunden 

' Verbindung herstellen: benutzer und passwort übergeben !!!
oVerbindung = oDatenquelle.getConnection( "", "" )

' Identifikationsnummer abfragen
DBSatzNr = Inputbox( "Datensatz mit welcher Nummer?")

' SQL-Abfrage aufbauen
sSQL =  "SELECT " & _
		" v.id , " & _
		" v.bezeichnung , " & _
		" v.datum , " & _
		" k.name " & _
	" FROM " & _
		" t093_vertrag as v " &
	" WHERE " & _
		" v.t090_id = " DBSatzNr
' Statement erzeugen
oStatement = oVerbindung.createStatement()
' Abfrage absetzen
oResultSet = oStatement.executeQuery( sSQL ) 

' Ergebnisse auswerten
While oResultSet.Next()
	
	' die Vertragsnummer
	iVertragsNummer = TRIM( oResultSet.getString(1) ) ' id
       ' weitere.....

Wend

' Dokument aus Vorlage erzeugen
Dim FileProperties(0) As New com.sun.star.beans.PropertyValue
FileProperties(0).Name = "AsTemplate"
FileProperties(0).Value = true
url = ConvertToURL( "/pfad/zur/vorlage.ott" )
oDoc  = StarDesktop.loadComponentFromURL(url,"_blank", 0, FileProperties())

' Textmarken füllen
oBM = oDok.getBookmarks().getByName("VertragsID")
' Inhalt setzen
oBM.getAnchor().String = iVertragsNummer
'
' weitere ..... 


' DB freigeben
' oResultSet.close()
' oStatement.close()
Achtung:
* keine Fehlerüberprüfungen im Beispiel!
* ich hab's gerade mal aus vorhandenen eigenen Makros hier reingehackt - natürlich entstehen dabei Tipp-/Denkfehler

Für den Anfang sollte es aber reichen. Fragen?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Antworten