[Gelöst] Problem mit Updateforecolor (Go Go :-)

7. März 2008 17:49

Hallo,

ich habe eine Main Subform. Es ist eine Form, in welcher im linken Tabellenbereich alle Adressen angezeigt werden und im rechten tabellenbereich ebenfalls alle Adressen, allerdings aus anderer Datenbank.

Nun möchte ich alle Felder farbig hervorheben, die sich von dem Inhalt unterscheiden, also <> soll rot markiert werden und wenn beides = ist dann soll die Schriftfarbe einfach schwarz bleiben.

IM Beispiel von dem Bezeichnungsfeld habe ich das nun so:


Code:
IF BEZ1 = rec_LAGE000014.BEZ1 THEN
  CurrForm.BEZ1.UPDATEFORECOLOR(255);
IF BEZ1 <> rec_LAGE000014.BEZ1 THEN
  CurrForm.BEZ1.UPDATEFORECOLOR(0);


Problem ist aber wenn ich durch die Datensätze blättere dann verfärbt sich nichts.

Und ich habe im Debugger festgestellt das er aus der der anderen TAbelle überhaupt keinen Datensatz zieht mit dem er vergleichen kann, dort ist alles 0. Wie bekomme ich aus der anderen Tabelle den Datensatz erstmal geladen, sodass ich mit dem aktuellen Datensatz vergleichen kann?
Zuletzt geändert von tesarolle am 13. März 2008 11:14, insgesamt 3-mal geändert.

7. März 2008 17:53

Hi, nimm statt [php] bitte [code] ;-)

7. März 2008 18:01

Hab ich doch :-)

7. März 2008 19:29

Um nun der Lösung des eigentlichen Problems näher zu kommen:

Auf welche Tabelle zeigt die Mainform, auf welche die Subform?

7. März 2008 22:53

ich dachte rec_lage000014 ist eine Artikeltabelle, wenn nicht ist meine antwort im anderen Thread falsch.....

8. März 2008 22:42

JHa habe mich verschrieben, es ist eine Artikeltabelle.

Aber wie ist die Lösung meines Problems? :-)

Re: Problem mit Updateforecolor

8. März 2008 23:01

Hallo,

soweit ich das verstanden habe:

Hauptform=Tabelle, als Liste dargestellt
Subform=Tabelle aus anderer Datenbank (also wsl. LinkedObject), auch eine Liste

Der Inhalt des Subforms bestimmt sich aber eigentlich nur durch den Subformlink... würde also heissen, das im Subform normalerweise nur Datensätze stehen, die in einer Beziehung zum Hauptformdatensatz stehen. Ich würde sagen das geht erstmal nicht. Wenn man schon mit einer anderen Datenbank zusammenarbeitet: wieso dann nicht ein LinkedObject auf eine View, die Dir den Vergleich zusammenbaut? Also select (felder) join (andere tabelle) on (zu vergleichende felder) usw. Die Formatierung mit Farben kann man dann im OnFormat-Trigger des Feldes im Form machen.

Gruß

Jens

10. März 2008 15:30

OK, also ich beschreibe es nochmal, ich glaube wiwr reden etwas aneinander vorbei. Hier erstmal ein Screenshot.

Es ist eine Main Subform.

Links ist die Tabelle LAGE0000 und rechts die Tabelle LAGE000014. Der Subform link geht von Tabelle LAGE0000 auf die LAGE000014, also ARTIKELNR zu ARTIKELNR.

Wenn ich durch die Datensätze blättere (im linken MAin form Bereich) so wird mir immer der dazugehörige Datensatz angezeigt.

Der Primär Schlüssel ist jeweils ARTIKELNR.

Was will icH? Im Screenshot sieht man das das Feld "BEZ1" sich vom Inhalt unterscheidet.

Ich will erreichen, das links und rechtst der Inhalt rot eingefärbt wird (die Schriftfarbe) und zwar immer dann wenn sich der Inhalt unterscheidet! So dass man auf den ersten Blick sieht, ob die BEZ1 unterscheidet sich in beiden Datenbanken bzw. Tabellen.

Also im Beispiel müsste er jeweils den INhalt des Feldes BEZ1 rot einfärben! Und damit er das festellt muss ich ja erstmal das FELD BEZ1 abgleichen.

Wie bekomme ich das hin?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

11. März 2008 10:14

vielleicht mit
Code:
if bez1<>lage000014.bez1 then
  Bez1Feld.Updateforecolor(255)
else
  Bez1Feld.Updateforecolor(0);

im OnFormat-Trigger von Bez1?

11. März 2008 15:00

Hallo Michael,

ich habe deinen code nun übernommen und leider ist die bez1 nun immer rot...

Code:
IF BEZ1<>rec_LAGE000014.BEZ1 THEN BEGIN
  CurrForm.BEZ1.UPDATEFORECOLOR(255);
END ELSE BEGIN
CurrForm.BEZ1.UPDATEFORECOLOR(0);
END;

11. März 2008 15:05

Das kann eigentlich nur bedeuten, dass rec_LAGE000014.BEZ1 oder BEZ1 einen falschen Wert hat - hast du das mal gedebuggt?

11. März 2008 16:24

wenn ich mit dem debugger durch die datensätze gehe, dann sehe ich das bei rec_LAGE000014 nie ein Datensatz gezogen wird, alle Sätze stehen auf 0 bzw. leer!

Deswegen ist auch immer die BEZ1 Rot, weil es nie einen vergleichswert gibt.

UNd wie kriege ich das gelöst?

11. März 2008 17:41

im Onaftergetrecord da muss der get befehl stehen, aber mit if abfangen, sonst macht er Dir die Form zu, wenn es keinen Datensatz gibt.

11. März 2008 18:35

Hallo zusammen,

die einzig praktikable Lösung liegt darin keine Main/Sub-Form zu machen.

Das Getrecord(SubRec) der SubForm liefert egal mit welchem Trick (DataCaptionExpr,Unterfunktion die selbst versucht Satz zurückzugeben usw.) immer den Satz davor zurück, da die MainForm die Steuergröße ist merkt die SubForm nicht das in der MainForm schon ein neuer Satz anliegt.

Kopiere einfach Dein Tab Control von Tabelle1 und füge es daneben ein.
Definiere Dir eine Globale Variable "SubRec" Record Tabelle2.

Folgenden Code in OnOpenForm und OnAfterGetRecord
Code:
If NOT SubRec.GET("No.") THEN
  CLEAR(SubRec);


Wenn der SubRec geändert werden darf, dann musst du noch die entsprechenden Funktionen für Insert,Modify,Delete und Rename triggern und OnCloseForm bzw. OnAfterGetRecord durchführen.

MFG DGR

PS: habe Beispiel Form 90020 testdeb und Tabelle 90018 Customer1 in der Version 3.70 beigefügt (zum Testen aus Tab18 ein paar Kunden markieren kopieren und in Tab. 90018 einfügen)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

12. März 2008 11:30

Hallo Michael,

wie soll der Get Befehl denn aussehen? Wenn ich da ein get reinpacke bekomme ich gar keinen Datensatz mehr angezeigt.

Hallo DGR,

Ich muss aber eine Main Subform haben, damit ich entsprechend durch die Datensätze blättern kann.

12. März 2008 11:37

Hallo,

blättern kannst du doch eh nur auf einer (Main) Tabelle.
Du braucht immer eine führende Tabelle.


Dein Argument ist also nicht haltbar.

12. März 2008 15:25

Hallo DGR,

nun ich habe 2 Artikeltabellen aus 2 verschiedenen DB´s. Diese sind mittels eienr Sicht in NAvisin verfügbar.

Ich möchte, wenn ich durch die Main Tabelle blättere immer den einen Artikel gegenüber gestellt haben

Wie soll ich das ohne Main SubForm realisieren? Das geht soweit ich weiss nicht.

12. März 2008 15:31

Hallo,

deshalb sollst Du ja SubRec.Get (entspr. Record aus deiner Sicht) in OnOpenForm und in OnAfterGetRecord programmieren.

In der SourceExpr (des kopierten TabControls) musst du, dann auch die entsprechenden Felder SubRec.Name hinschreiben damit die Daten aus dem gerade gelesene SubRec angezeigt werden können.

Gruß

13. März 2008 11:14

Also... vielen Dank für Deine Hilfe, aber das übersteigt meine begrenzten Navision Möglichkeiten. Ich werde das nun sein lassen mit dem einfärben da es im Main Subform Konstrukt nicht möglich ist.

Trotzdem vielen Dank an alle!