Serienbrief Datenbank nach Datensatz wert ändern

Das Textverarbeitungsprogramm

Moderator: Moderatoren

lamer56
**
Beiträge: 26
Registriert: Do, 11.05.2006 13:10

Serienbrief Datenbank nach Datensatz wert ändern

Beitrag von lamer56 »

heyp !!
Es geht darum, dass bei einer Serienbrief Erstellung nach jedem Datensatz ein Flag in der Datenbank gesetzt werden soll, dass dieser Datensatz schon angeschrieben wurde. Grund hierfür ist das die Liste sich weiter füllt und die Serienbrief ausgabe immer von neuem angestoßen wird.
Damit dieser bei einer erneuten Serienbrief Erstellung der Datensatz übersprungen wird.
Ich denke da an ein makro weiss jedoch nicht wie ich eine DB per OOo Makrosprache ansprechen kann.
Danke für Infos
Bis dann
Lamer56
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Serienbrief Datenbank nach Datensatz wert ändern

Beitrag von komma4 »

das geht auch mit einer "manuellen" SQL-Anweisung, aber das Ganze soll ja wohl mehrfach laufen, deshalb ist Dein Ansatz, die Aufgabe mittels Makro zu erledigen, schon richtig.

Da (erst nach einem Ausdruck) weitere Datensätze dazu kommen, kann ein entsprechendes Feld unkonditioniert gesetzt werden:

In SQL könnte das so aussehen:

Code: Alles auswählen

UPDATE "tabelle" SET "gedruckt" = TRUE 
[wenn die Spalte als boolean definiert wurde]



Suchst Du hierzu BASIC-Befehle?

Code: Alles auswählen

oDatenbankKontext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
' Datenquelle auswählen
oDatenquelle = oDatenbankKontext.getByName( "MeineDatenbank" )
' Verbindung zur DB herstellen
oVerbindung = oDatenquelle.getConnection( "" , "" )
' Statement erzeugen
oStatement = oVerbindung.createStatement
' Abfrage absetzen
oStatement.executeUpdate( sSQL )
[MeineDatenbank ist der Name der registrierten Datenquelle; die Anmeldung erfolgt ohne Nutzernamen und Passwort]

Die Variable sSQL muss mit dem entsprechend aufbereiteten SQL-Befehl gesetzt sein, also etwa so:

Code: Alles auswählen

sSQL = " UPDATE ""tabelle"" SET ""gedruckt"" = " & now() 
[wenn die Spalte als timestamp definiert wurde]


Der Aufwand mit Makro und Statusfeld lässt sich umgehen, wenn die "neuen" Datensätze (bspw. an einem Einfüge-Zeitstempel) erkannt werden können: dann startest Du eine entsrechende Abfrage mit der Bedingung:

Code: Alles auswählen

...WHERE "datum_einfueg" > "druck_zeitstempel"
Hilft Dir das weiter?

[immer noch: 8°52'55"N 98°16'1" E; aktuell: 29 Grad C]
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)
lamer56
**
Beiträge: 26
Registriert: Do, 11.05.2006 13:10

Re: Serienbrief Datenbank nach Datensatz wert ändern

Beitrag von lamer56 »

heyp !!
Danke für die ausführliche Antwort.
Ja, genau ich hatte die BASIC Befehle gesucht.
Das hat nun auch soweit geklappt.
Was jetzt aber noch nicht klappt ist, dass er mir nur die Zeile auf gesendet setzt, welche ich gerade gedruckt habe.
Also "UPDATE SERIENBRIEFTABELLE SET GESENDET = -1 WHERE ID= zuletzt gedruckte ID.
Also wie komme ich an die zuletzt gedruckte ID ?
Ich habe gedacht die ID in eine allgemeine Variable zu speichern und dann im MAKRO wieder abzurufen.
Bloß wie macht man so etwas in OOo BASIC ?
Wäre es möglich das DB Feld ID auf das Dokument zulegen wobei dies zwar gefüllt jedoch nicht gedruckt wird?
Gibt es ein gutes OOo BASIC DB Buch?
Danke für Infos.

Bis dann
Lamer56
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Serienbrief Datenbank nach Datensatz wert ändern

Beitrag von komma4 »

Du sagtest doch, alle in der Tabelle sollen bearbeitet werden, und später kommen neue Datensätze hinzu. Also können doch nach dem Druck ALLE Sätze markiert werden...
lamer56 hat geschrieben:"UPDATE SERIENBRIEFTABELLE SET GESENDET = -1

Neue Datensätze habe das Feld nicht gefüllt, Deine Abfrage kann also darauf abstellen:

Code: Alles auswählen

SELECT * FROM "Serienbrieftabelle" WHERE "GESENDET" <> -1
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)
lamer56
**
Beiträge: 26
Registriert: Do, 11.05.2006 13:10

Re: Serienbrief Datenbank nach Datensatz wert ändern

Beitrag von lamer56 »

heyp !!
Ich verstehe, da habe ich ein Gedankendreher gehabt.
Wäre es denn möglich mit der Var und dem DB Feld versteckt?
Wenn nicht würde mir folgende Lösung vorschweben. Ich möchte nur eine Adresse absenden wenn diese gesendet wurde drückt der User einen Knopf es geht ein Popup auf und der User gibt die aktuelle Datensatznummer an, von dem DS welcher gerade gesendet wurde. Dieser wird dann auf gesendet gesetzt.
Der User kann nicht direkt im DB Explorer den DS ändern, da die Anzeige der Datensätze auf einen Postgre View beruht in welchen keine Daten geändert werden können und auch nicht direkt geändert werden sollen.
In VBA für Access kein Problem aber in BASIC stehe ich wirklich noch vollkommen auf dem Schlauch.
Bis dann
Lamer56
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Serienbrief Datenbank nach Datensatz wert ändern

Beitrag von komma4 »

erscheint für mich wieder als neues Szenario:

Du hast einen PostgreSQL-View, der die Daten zum Drucken enthält.

Nun würde ich mit den Daten der View ein Formular erstellen. Dort bietest Du einen "Drucken"-button an, der die Daten (an Writer?) übergibt, und den Druck initiiert.

In der View ist auch ein eindeutiger Schlüssel (Auftrags-/Rechungs-Nr. oder so was).
Mit diesem kannst Du auch einen Datensatz identifizieren, der Dein "gedruckt" Feld hat....
Damit kannst Du dann auch aktualisieren.

Nun die Abfrage, die den View erstellt nochmals laufen lassen, das Formular refreshen, damit der bearbeitete Datensatz nicht mehr erscheint.


Habe ich das richtig skizziert?

[@wolle2000 und alle anderen: verzeiht mir bitte die Verwendung von Denglisch]
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)
lamer56
**
Beiträge: 26
Registriert: Do, 11.05.2006 13:10

Re: Serienbrief Datenbank nach Datensatz wert ändern

Beitrag von lamer56 »

heyp !!

Erstmal vielen Dank für die Geduld mit mir.
Ja du hast alles richtig skizziert. Bloß was Du dort erklärst ist für mich unter StarBasic noch nicht umsetzbar.
Da wird mir wohl die Bücherhalle weiterhelfen müssen.
Wenn ich dann etwas mehr Plan habe melde ich mich wieder hier.

Also erstmal ende des Threads.
Bis ich ein OOo Basic Buch durch habe.
Bis dann
Lamer56
Antworten