[Gelöst] Form: Neue Spalte in Tabellen-Form einfügen

15. Februar 2006 12:01

Hallo,

ich möchte in einer bestehenden Form eine neue Spalte einfügen. Soweit ist das auch kein Problem. Allerdings stammt das Feld, dass in der der Spalte der Form ausgegeben werden soll aus einer abweichenden Source Tabelle.

Die SourceTable der Form ist "Contact Mailing Group". Die Spalte, die ich jetzt einfügen möchte, soll aber als Quelle eine andere Tabelle haben, nämlich "Contact" und sich auf den Inhalt des Feldes "E-Mail" beziehen. Spaltenweise soll dann ausgegeben werden: Name (aus "Contact Mailing Group") und die zugehörige Mailanschrift (aus "Contact").

Ich habe eine Varible (Contact_Rec) des Type Record definiert. Dies hat als Subtype: Contact.

Füge ich in der neuen Spalte eine Textbox mit der SourceExpression contact.e-mail hinzu, sollte das doch eigentlich reichen, oder?

Leider funktioniert meine Theorie nicht. Hat jemand eine Idee?
Zuletzt geändert von mgerhartz am 10. April 2006 13:32, insgesamt 1-mal geändert.

15. Februar 2006 12:43

Hallo,

besser ist es in der Tablle "Contact Mailing Group" ein kalkuliertes Feld "Contact E-Mail" aufzunehmen, das über die Method Lookup den Wert des Feldes "E-Mail" aus der Tabelle "Contact" in die Tabelle "Contact Mailing Group" weitergibt.
Dann muß nur noch dieses Feld auf die Form aufgenommen werden und alles andere passiert automatisch.

Als Beispiel kannst du dir mal das Feld 58 "Name" der Tabelle 167 "Job" anschauen.

MfG
Josef Metz

15. Februar 2006 12:46

Hallo,

das funktioniert so nicht, der Contact record hat ja (noch) keine Beziehung zu den dargestellten Records.

Am besten eine Textvariable email anlegen, die Source Expression der Spalte auf "email" stellen und im OnAfterGetRecord-Trigger ein Contact_Rec.GET mit der Kontaktnr. des aktuellen Rec machen und dann email=Contact_Rec.e-mail

gruss, Otschko

15. Februar 2006 13:09

@Otschko
Die Variante ist natürlich möglich!

Die Variante von JM Funktioniert aber auch, ich habe es eben noch mal ausprobiert.

JM hat geschrieben:besser ist es in der Tablle "Contact Mailing Group" ein kalkuliertes Feld "Contact E-Mail" aufzunehmen, das über die Method Lookup den Wert des Feldes "E-Mail" aus der Tabelle "Contact" in die Tabelle "Contact Mailing Group" weitergibt.

Wenn der Table Filter auf No.=FIELD(Contact No.) gesetzt wird, wird die Relation zu der Tabelle hergestellt!

Welche Variante benutzt wird ist Geschmackssache ich finde beide gut!
Gruß Mikka

15. Februar 2006 13:13

Danke für die schnelle Antwort. @ Otschko: In welchem Objekt muss ich den OnAfterGetRecord-Trigger bearbeiten?

15. Februar 2006 13:17

Welche Variante benutzt wird ist Geschmackssache ich finde beide gut!


Die Variante von Otschko hab ich früher auch immer benutzt, heute verwende ich sie gar nicht mehr.
Sie hat nämlich den Nachteil, daß sie nicht immer korrekt arbeitet.
Wenn man die TableBox kleiner macht als die Anzahl der vorhandenen Zeilen und dann ein bißchen mit PgUp bzw. PgDn oder Pos1 und Ende spielt wird dieses Feld nicht immer korrekt gesetzt.

MfG
Josef Metz

15. Februar 2006 13:40

Hi,

@jm:
Das stimmt, ist mir auch schon einmal aufgefallen, das waren aber meistens nur Infofelder, deshalb achtet man da vllt. auch nicht so drauf.

Im Zweifelsfall ist das mit dem CalcFields auch eleganter.

@mgerhartz:
Diesen Trigger findest du auf deiner ursprünglichen Form.

Du kannst ja einfach mal beide Varianten probieren.

Gruss, Otschko

15. Februar 2006 14:19

Ich habe jetzt folgendes gemacht:

Haupt-Form (Fristen-Karte):
- Globale Varible "Contact_Rec" mit Subtype "Contact" (Recordvariable) erstellt

Sub-Form (Ansprechpartner):
- Globale Variable "Contact_Rec" mit Subtype "Contact" (Recordvariable) erstellt
- Globale Variable "email" Typ Text, Länge 80, erstellt.

In der Subform, in der der Name und die zugehörige Mailadresse stehen soll, habe ich ein neue Textbox angelegt mit der SourceExpression "email"

In der Haupt-Form habe ich im OnAfterGetRecord Trigger folgenden Code hinterlegt:


Contact_Rec.GET(Contact_Rec."No.");
"E-Mail" := Contact_Rec."E-Mail";

Als Fehlermeldung bekomme ich:

"Kontakt Nr." existiert nicht!

Wo liegt mein Fehler?

15. Februar 2006 14:27

Um genau zu sagen, tritt die Fehlermeldung in der Subform auf. Habe eben mal nur die Subform gestartet.

15. Februar 2006 14:30

...ja ja der Wald und die Bäume 8-)
mgerharz hat geschrieben:Contact_Rec.GET(Contact_Rec."No.");
"E-Mail" := Contact_Rec."E-Mail";



Der Code von dir bezieht sich auf die gleiche Tabelle!
So währe es richtig:

Contact_Rec.GET("Contact No.");
"E-Mail" := Contact_Rec."E-Mail";



Gruß Mikka

15. Februar 2006 14:34

Hi,

mgerhartz hat geschrieben:Contact_Rec.GET(Contact_Rec."No.");
"E-Mail" := Contact_Rec."E-Mail";
...
Wo liegt mein Fehler?


Oha, da wird auch noch mit Subforms hantiert ;-)

Nunja, du musst dem GET natürlich die Nummer des betreffenden Kontaktes mitgeben. Was du da oben machst ist einen Record mit einer leeren/uninitialisierten Nummer zu holen.

Also, ersetze Contact_Rec."No" durch (wahrscheinlich) Rec."Contact No." oder sowas, ich kenn jetz nicht deine Form und den aktuellen Record.

Gruss, Otschko

15. Februar 2006 14:55

Ihr seit doch die BESTEN!!! Wie ihr sicherlich festgestellt habt, bin ich bei einigen Problemen recht unbeholfen. Gut zu wissen, dass es euch gibt. Damit wäre dann mein Problem gelöst.

Viele Grüße

Markus

16. Februar 2006 11:40

Hey markus,

wie hast du es nun gelöst?
Die Methode mit den FlowFields ist dann halt eleganter ;-)

Gruss ,Otschko

17. Februar 2006 11:25

Hi Otschko,

wie Du beschrieben hattest, hatte ich den GET auf das falsche Feld gesetzt. Nachdem ich das geändert hatte, funktionierte es.

Contact_Rec.GET("Contact No.");
email := Contact_Rec."E-Mail";

Nochmals 1.000 Dank! :-P

17. Februar 2006 12:32

Hi,

schöner ist das halt, das GET mit einem IF zu machen und so evtl. Fehler abzufangen..
ALSO:
IF COntact_Rec.GET(...) THEN
eMail:=...
ELSE
eMail:='';

Und wie geschrieben, es kommt vor, dass da falsche Werte stehen können...weiss der Geier warum..

Gruss, Otschko