Base - Felder miteinander verknüpfen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Base - Felder miteinander verknüpfen

Re: Base - Felder miteinander verknüpfen

von herz4 » Mi, 20.10.2010 16:06

Viele Befehle und Prozeduren des Makros habe ich gerade hier in diesem Forum gefunden oder zusammengesucht.

Leider kann ich nicht namentlich verweisen ...

Re: Base - Felder miteinander verknüpfen

von herz4 » Mi, 20.10.2010 12:46

Nein, das ist mein Problem mit dem Forumszugang: ich konnte hierher keine .txt-Datei hochladen, weil es die Eingabemaske nicht erlaubt!

Re: Base - Felder miteinander verknüpfen

von herz4 » Mi, 20.10.2010 08:45

Bis jetzt hat mir niemand gepostet, wie ich eine txt-Datei anhängen kann. clipnotic, Du sollst nicht leer ausgehen:

Code: Alles auswählen

Sub Schreiben(via AS String)

LF = CHR(13)

'Formulare zuweisen
oDoc = thisComponent
oForm = oDoc.drawpage.forms.getbyindex(0)
oSubAbt = oForm.getByName("SubAbteilung")
oSubVorwahl = oForm.getByName("SubVorwahl")
oSubKontakt = oSubAbt.getByName("SubKontakt")
oSubTelefon = oSubAbt.getByName("SubTelefon").getByName("TableTelNrn")
oSubMail = oSubAbt.getByName("SubMail").getByName("TableMailAdressen")

'Felder auslesen
Firma = oForm.getByName("txtFirma").Text
Abteilung_Position = oSubAbt.getByName("txtAbteilung/Position").Text
Anrede = Trim(oSubAbt.getByName("txtAnrede").Text)
Vorname = Trim(oSubAbt.getByName("txtVorname").Text)
weitere_Vornamen = Trim(oSubAbt.getByName("txtweitere Vornamen").Text)
Nachname  = Trim(oSubAbt.getByName("txtNachname").Text)
Namenszusatz = Trim(oSubAbt.getByName("txtNamenszusatz").Text)
Strasze = oForm.getByName("txtStraße").Text
PLZ = oForm.getByName("txtPLZ").Text
Ort = oForm.getByName("txtOrt").Text
Bezug2 = oSubKontakt.getByName("txtBezug").Text
Kundennummer = oForm.getByName("txtKundennummer").Text
Betreff = oSubKontakt.getByName("txtBetreff").Text
Inhalt = oSubKontakt.getByName("txtInhalt").Text
Datum_date = oSubKontakt.getByName("TableKontakte").getByName("Datum").Date
Vorwahl = oSubVorwahl.getByName("ONVorwahl").Text
Nummer = oSubTelefon.getByName("Nummer").Text
MailAdr = oSubMail.getByName("txtMailAdresse").Text
TelArt= oSubTelefon.getByName("Art").Text

If IsEmpty(Datum_date) Then
	MsgBox "Der Cursor markiert kein Schreiben!"
	GoTo Ende
EndIf

AdrZ8 = ""

'testen auf Fax bereit

If via="Fax" Then
	 If InStr(1, TelArt,"ax", 0)=0 Then
	 MsgBox "Der Cursor zeigt auf keine Faxnummer!"
	 GoTo Ende
	 EndIf
	 IF Vorwahl<>"" THEN AdrZ8="("+Vorwahl+") " 
	 AdrZ8="- via Fax: "+AdrZ8+Nummer+" -"
EndIf

'testen auf Email bereit

If via="Email" Then
	 If InStr(1, MailAdr,"@", 0)=0 Then
	 MsgBox "Der Cursor zeigt auf keine Mailadresse!"
	 GoTo Ende
	 EndIf
	 AdrZ8="- via E-Mail: "+MailAdr+" -"
EndIf

'Datumausgaben berechnen
Datum_value=DateValue(Right(Datum_date,2) & "." & Mid(Datum_date,5,2) & "." & Left(Datum_date,4))
Datum1 = Format(Datum_value, "dddd, dd. mmmm yyyy")
Datum2 = Format(Datum_value, "dd.mm.yy")

'Zuweisungen erstellen
AdrZ2 = Firma
IF Abteilung_Position<>"" Then AdrZ2 = AdrZ2+LF+Abteilung_Position
AdrZ3=""
IF Anrede<>"" THEN AdrZ3 = Anrede+" "
IF Vorname<>"" THEN AdrZ3=AdrZ3+Vorname+" "
IF weitere_Vornamen<>"" THEN AdrZ3=AdrZ3+weitere_Vornamen+" "
IF Nachname<>"" THEN AdrZ3=AdrZ3+Nachname
IF Namenszusatz<>"" THEN AdrZ3=AdrZ3+" "+Namenszusatz

AdrZ6 = PLZ + " " + Ort



Anrede_uoK="Sehr geehrte Damen und Herren"
IF Left(Anrede,1)="H" THEN Anrede_uoK="Sehr geehrter "+Anrede+" "+Nachname
IF Left(Anrede,1)="F" THEN Anrede_uoK="Sehr geehrte "+Anrede+" "+Nachname
IF Anrede="" AND Vorname<>"" THEN Anrede_uoK="Hallo "+Vorname

anSeite2 = Firma
IF Abteilung_Position <>"" THEN anSeite2 = anSeite2+", "+Abteilung_Position
IF Anrede <>"" THEN anSeite2 = anSeite2 + ", "+Anrede+" "+Nachname

IF Kundennummer<>"" THEN Bezug=Kundennummer+", "+Bezug2 ELSE Bezug=Bezug2

'Fax aufrufen und schreiben
path=createunoservice("com.sun.star.util.PathSettings")
shell("LW:\...\OpenOffice.org 3\program\soffice.exe",1," -n " & ConvertFromUrl(path.work) & "\...\Formbriefe\Fax1.odt")

wait 3000

StarDesktop.CurrentComponent.Title = Format(Datum_value, "yyyy-mm-dd")+" "+Betreff

docInfo = StarDesktop.CurrentComponent.DocumentInfo
docInfo.Title=Format(Datum_value, "yyyy-mm-dd")+" "+Betreff
docInfo.Subject=Bezug
docInfo.Keywords="an: "+AdrZ2+LF+AdrZ3+LF+Strasze+LF+AdrZ6+LF+AdrZ8
docInfo.Author="hampelmann"
docInfo.Description="an: "+LF+LF+AdrZ2+LF+AdrZ3+LF+Strasze+LF+AdrZ6+LF+AdrZ8

Marke = StarDesktop.CurrentComponent.getBookmarks()
Marke.getByName("AdrZ2").getAnchor.setString(AdrZ2)
Marke.getByName("AdrZ3").getAnchor.setString(AdrZ3)
Marke.getByName("AdrZ5").getAnchor.setString(Strasze)
Marke.getByName("AdrZ6").getAnchor.setString(AdrZ6)
Marke.getByName("AdrZ8").getAnchor.setString(AdrZ8)
Marke.getByName("Datum1").getAnchor.setString(Datum1)
Marke.getByName("Bezug").getAnchor.setString(Bezug)
Marke.getByName("Betreff").getAnchor.setString(Betreff)
Marke.getByName("Anrede").getAnchor.setString(Anrede_uoK)
Marke.getByName("Inhalt").getAnchor.setString(Inhalt)
Marke.getByName("Datum2").getAnchor.setString(Datum2)
Marke.getByName("anSeite2").getAnchor.setString(anSeite2)

If via="Brief" Then StarDesktop.CurrentComponent.getGraphicObjects.getbyname("Unterschrift").dispose()



Ende:
End Sub

Sub Brief

Schreiben("Brief")

End Sub

Sub Fax

Schreiben("Fax")

End Sub

Sub Email

Schreiben("Email")

End Sub

Re: Base - Felder miteinander verknüpfen

von herz4 » Di, 19.10.2010 15:19

Das Makro wollte ich gerade anhängen, da sagte mir das Formular. "Die Dateierweiterung txt ist nicht erlaubt." Textdateien sind doch das unverfänglichste?! Wenn ich es rausbekommen habe, welches Format erlaubt ist, poste ich es.

Bis dahin mach Dich schon mal mit Makros vertraut, in diesem Fall OOo-Basic! Ohne Deine Anpassung funzt gar nichts.

Prizipiell: Ich lese knapp 20 Text- und Datenfelder des Formulars aus, rufe ein vorbereitetes Writer-Dokument mit zahlreichen Textmarken auf und setze die Daten im entsprechenden Format und angepasst ein. Dann kann dieser eine(!) Brief gedruckt, gefaxt oder auch gemailt werden.

Re: Base - Felder miteinander verknüpfen

von herz4 » Di, 19.10.2010 14:03

... auch das ist möglich, hier! :lol:

1. Ich kann der Tabelle ein Markierfeld hinzufügen, um damit diejenigen Datensätze zu markieren, die in den Seriendruck kommen sollen. In der Abfrage muss danach gefiltert werden.

2. Diesen Markierhaken kann ich auch in einem Formular setzen.

3. Ich kann auch aus einem Formular heraus per Makro im Formular aufgerufene Daten auslesen und diese in ein Textdokument von Writer setzen lassen. Die Programmierung ist etwas aufwendiger, lohnt sich aber! Z. B. kann ich in einem solchen Brief leicht manuelle Veränderungen vornehmen etc.

Du brauchst Dich nur noch entscheiden!

Viel Spaß!

Re: Base - Felder miteinander verknüpfen

von herz4 » Di, 19.10.2010 10:00

Hallo clipnotic,

ich ahnte nicht, dass Du nur eine direkte Übernahme von Daten erzeugen willst. Wozu ist das zweckmäßig?

Besser erscheint mir ein referenzieren der Daten. Das bedeutet, Du gibst dem Datensatz Kunde einen Verweis auf den gewünschten Datensatz Lieferant. Bei Deiner 1:1-Zuweisung bedeutet das, in der Tabelle Kunden gibst Du nur ins Feld für die LieferantenID die entsprechende Zahl ein.

Eine Abfrage liefert Dir dann die miteinander verbundenen Datensätze, so z. B. per SQL-Befehl, der angepasst werden muss:

Select "KundenTab".*, "LieferantenTab".* From "KundenTab", "LieferantenTab" Where "KundenTab"."LieferantenID"="LieferantenTab"."ID"

Das geht leichter über Tabellenreferenzen im Menü Extras>Beziehungen mit anschl. Benutzung des Abfrageassistenten. Auch können im letzteren die Beziehungen der Tabellen hergestellt werden. Eine solche Beziehung der Tabellen kann auch in Formularen mit Unterformularen benutzt werden. Die Abfrage kann dann die Grundlage des Serienbriefes sein.

Diese Herangehensweise ist aus Gründen der Redundanz von Daten besser: die Lieferantendaten würden bei Deiner Herangehensweise doppelt gespeichert werden, sowohl in ihrer Tabelle als auch bei den Kunden. Wozu? Wie soll dann einmal aktualisiert werden?

Re: Base - Felder miteinander verknüpfen

von herz4 » Fr, 15.10.2010 07:50

Guten Tag clipnotic,
Ich hoffe es ist jetzt etwas verständlicher :-)
... etwas ja.
Das Feld IDZuStelle ist ein Kombinationsfeld in welchem man dann die gewünschte ID auswählen kann,
die Daten für dieses Feld kommen aus der Tabelle Zuweisung
(und weiter)

Versteh ich nicht. Welchem Formular und damit welcher Datenmenge ist das Kombifeld - nicht seine Liste! - zugeordnet - Tabelle1? Was soll durch die Auswahl bewirkt werden?
Wenn ich nun einen Serienbrief über Writer erstelle, der aus beiden Tabellen Daten einfügen soll funktioniert das nicht.
Für den Serienbrief brauchst Du eine Datenmenge, die leicht aus Tabellen/Abfragen, schwerer aus Formularen auslesbar ist. Wo sind die?
Man kann ja nur ein Subformular erstellen in Base oder?
Nein.
Gibt es, wie in einem Kombinationsfeld, die Möglichkeit, angezeigte Daten in einem Listenfeld auch in ein
anderes Textfeld (oder ein anderes) automatisch zu kopieren?
Prinzipiell ja, per Makro, aber mir ist das Ziel unklar ...
Ich möchte den Inhalt der Listenfelder jeweils in ein Feld der Tabelle Daten bringen, damit ich dann auch einen
Serienbrief starten kann
Manuell kopieren oder automatisiert? Automatisiert über SQL Insert/evtl. Update-Befehl, die nur direkt (Menü Extras>SQL) oder im Makro per Java-Schnittstelle aufgerufen werden können und nicht in einer Base-Abfrage.

Möglicherweise gibt es für Dein datentechnisches(!) Problem eine gar nicht so schwer umsetzbare Base-Lösung. Um Dir dafür eine Empfehlung geben zu können, müsste ich zunächst das Datenproblem ohne (fragliche) Baselösung(sansätze) verstehen können. Gerade daran fehlt es mir ...

Sorry, René

Re: Base - Felder miteinander verknüpfen

von herz4 » Do, 14.10.2010 10:48

@clipnotic

Ich verstehe hauptsächlich Bahnhof und den scheinst Du nicht zu meinen.

Damit in Deine Tabellen Daten eingefügt werden können, muss in jeder ein Primärschlüssel vorhanden sein, der die Datensätze eindeutig identifiziert.

Wenn dann etwa im Formular der Kundendaten ein entsprechender Datensatz der "zuweisenden Stelle" erscheinen soll, muss das zugewiesen werden. Wie soll das ablaufen? Etwa anhand der Namensgleichheit? Dann empfiehlt sich ein Unterformular der Tabelle "zuw. Stelle", welches über die Namen referenziert wird.

Willst Du wirklich nur angezeigt bekommen?

René

Nach oben