5. Februar 2007 15:33

Code:
...
IF CHARINDEX('Alarmtext:', CONVERT(varchar(250), ALARM)) > 0
SELECT
  LTRIM(SUBSTRING(
    CONVERT(varchar(250), ALARM),
    CHARINDEX('Alarmtext:', CONVERT(varchar(250), ALARM)) + 10,
    (
      CHARINDEX((char(13) + char(10)), CONVERT(varchar(250), ALARM), CHARINDEX('Alarmtext:', CONVERT(varchar(250), ALARM)))
      - CHARINDEX('Alarmtext:', CONVERT(varchar(250), ALARM))
    ) - 10
  ))
  AS Alarm
ELSE
  SELECT NULL AS Alarm,
...

Bin aber nicht sicher, ob das innerhalb einer View-Definition funzt ...

6. Februar 2007 17:49

Grüß Dich Jörg,

vielen Dank!

Habs jetzt entsprechend in meine Sicht eingebaut:

Code:
SELECT     KUNUMMER, ANREDE, NAME, ANSCHR, ZUSATZ, STRASSE, PLZ, ORT, FAX,

IF CHARINDEX('Alarmtext:', CONVERT(varchar(250), ALARM)) > 0
SELECT
LTRIM(SUBSTRING(
    CONVERT(varchar(250), ALARM),
    CHARINDEX('Alarmtext:', CONVERT(varchar(250), ALARM)) + 10,
    (
      CHARINDEX((char(13) + char(10)), CONVERT(varchar(250), ALARM), CHARINDEX('Alarmtext:', CONVERT(varchar(250), ALARM)))
      - CHARINDEX('Alarmtext:', CONVERT(varchar(250), ALARM))
    ) - 10
  ))
  AS Alarm
ELSE
  SELECT NULL AS Alarm, SPRACHE, KONDITION
FROM         WOD00003.dbo.DADR0000


kommt aber leider Fehlermeldung (:-

Code:
Server: Nachr.-Nr. 156, Schweregrad 15, Status 1, Zeile 3
Falsche Syntax in der Nähe des IF-Schlüsselwortes.


Geht vermutlich nicht im Kontext der Sicht oder????

7. Februar 2007 10:50

JA, das hab' ich schon vermutet, daß das in einer View-Definition nicht funzt ... ich fürchte, ich mit meinem SQL Latein am Ende ... aber einen hätt' ich noch, basierend auf dieser Version:

Code:
SELECT KUNUMMER, ANREDE, NAME, ANSCHR, ZUSATZ, STRASSE, PLZ, ORT, FAX,

  SUBSTRING(
    CONVERT(varchar(250), ALARM),
    CHARINDEX('Alarmtext:', CONVERT(varchar(250), ALARM)) ,
    (
      CHARINDEX((char(13) + char(10)), CONVERT(varchar(250), ALARM), CHARINDEX('Alarmtext:', CONVERT(varchar(250), ALARM)))
      - CHARINDEX('Alarmtext:', CONVERT(varchar(250), ALARM))
    ) 
  )
  AS Alarm,

SPRACHE, KONDITION
FROM DATENBANK

Hier also mit dem Ausdruck "Alarmtext:", den wir dann in NAV verazten können:

In der NAV Form, die den View anzeigt, hier in der Textbox, die den "Alarm" anzeigt, könnte man folgendes in den "OnFormat"-Trigger einbauen:

Code:
Alarm - OnFormat(VAR Text : Text[1024])
IF STRPOS(Text, 'Alarmtext:') = 0 THEN
  Text := ''
ELSE
  Text := COPYSTR(Text, 11);

7. Februar 2007 12:04

Guten Morgen Jörg,

so, wir sind fast am Ende *zwinker*!!! [glow=red]Kannst Du mir noch ein letztes mal helfen???[/glow]

Das mit dem Onformat Trigger funktionier Super, naja Fast.

1. Jetzt werden die Texte entsprechend angezeigt in der Form, aber wie kann man sagen das der Begrenzer das CLRF ist? Weil jetzt werden nach den Texten immer die 2 nicht druckbaren Zeichen "CLRF" angezeigt. Wäre schön wenn man die in der Form bei der Anzeige der Texte nicht sieht.

Das hier war ja dein Code von eben der funktioniert hat:

Code:
Alarm - OnFormat(VAR Text : Text[1024])
IF STRPOS(Text, 'Alarmtext:') = 0 THEN
  Text := ''
ELSE
  Text := COPYSTR(Text, 11);



2. Das andere kleine Problem was ich noch habe ist das Einfügen der Daten in meine andere Tabelle "Wareneingang".

Hier habe ich im ON-Validate Trigger "KUNUMMER" unter anderem auch drin, das eben der AlarmText gezogen wird.

Hier wird ja nach wie vor alles gezogen (der unschöne lange string wenn es keinen Alarmtext gibt oder die eigentlichen Alarmtexte mit den 2 nicht druckbaren Zeichen).

Ursprünglich habe ich dort den Code drin:

Code:
IF rec_Adressdaten.GET(KUNUMMER) THEN
Alarm := rec_Adressdaten.Alarmtext;


Dann wird mir eben von der Sicht (Adressdaten) der Alarmtext gezogen in mein Feld und naja da wir das ja nicht schon in der Sicht hinkriegen das wenn es keinen Alarmtext gibt das Feld leer ist muss ich ja nun in navision ran.

Im Grunde will ich ja nun beim validate die alarmtexte ziehen bis zum ersten nicht druckbaren zeichen und wenn es keinen alarmtext gibt dann nichts!

Der Code hier funzt leider nicht:

Code:
IF rec_Adressdaten.GET(KUNUMMER) THEN
 
Alarmtext :=
  COPYSTR(Alarm,
    STRPOS(Alarm, 'Alarmtext:'),
    STRPOS(Alarm, '\par ') - STRPOS(Alarm, 'Alarmtext:'));
Alarm := Alarmtext;


Da kommt mir immer eine Fehlermeldung das Parameter 2 nicht passt.
Also, ich hoffe Du guckst nochmal rein in den Endlos-Thread und bedanke mich im voraus :oops:

7. Februar 2007 16:29

Das zieh'n wir jetzt durch ... bis es funzt ... :twisted:

Leider hab' ich Moment keine Möglichkeit Dinge selber auszuprobieren, deshalb hier nur "Gedankenspiele" ...

Gut, das mit dem View klappt ja nun in irgendeiner Form. Was hier noch nicht klappt, muss man eben in NAV regeln, wie eben im OnFormat Trigger.

Um in NAV lästige Zeichen loszuwerden, könnte man sich diverser String-Funktionen bedienen. Da Sonderzeichen nur schwer zu greifen sind, ist es notwendig zwei Variablen - CR und LF - vom Typ "Char" zu definieren und als Sonderzeichen zu deklarieren:

Code:
CR := 13;
LF := 10;


Möchte man diese Zeichen aus einem Text ausschneiden, so ginge das via:

Code:
Text := DELCHR(Text, '=', (FORMAT(CR) + FORMAT(LF)));


Nach der selben Mimik kann man verfahren, wenn der Text ausgeschnitten werden soll:

Code:
Text := COPYSTR(Text, 1, STRLEN(Text) - STRPOS(Text, FORMAT(CR) + FORMAT(LF)));


Statt Startposition 1 kann man in unserem Beispiel auch den Offset von 10 (wegen "Alarmtext:") verwenden.

Und natürlich können so auch evtl. benötigte IF Statements erstellt werden.

Wie gesagt, ich kann heute nicht selber "tüfteln", aber ich denke Du kriegst das hin!

Gruß,
Jörg

7. Februar 2007 17:27

Klasse!!! Das funzt endlich!!!!!!! Da wäre ich nie drauf gekommen.

Ich sehe Licht am Ende des Tunnels :-D

So sieht mein Code jetzt aus. Es wird nun korrekt der eigentliche Text nach dem Schlüsselwort "Alarmtext:" ausgeschnitten und entsprechend eingefügt. Das wirkliche EINZIGE :-D :oops: was ich jetzt noch brauche ist eine IF Anweisung, ich will quasi bevor mein Code läuft der da unten steht ausgeführt wird:

1. prüfen ob im String das Wort "Alarmtext:" vorkommt
2. Wenn nein soll er das Feld leer machen, egal was drin steht
3. Wenn ja (Alarmtext: ist enthalten) soll der Code unten laufen



Code:
CR := 13;
LF := 10;
Alarm := rec_Adressdaten.Alarm;
TEXT := Alarm;
TEXT := DELCHR(TEXT, '=', (FORMAT(CR) + FORMAT(LF)));
TEXT := COPYSTR(TEXT, 12, STRLEN(TEXT) - STRPOS(TEXT, FORMAT(CR) + FORMAT(LF)));
Alarm  := TEXT;


Der Code funktioniert super bei Felder wo alarmtext drin vorkommt, aber bei denen wo es nicht vorkommt ist halt noch dder hässliche string enthalten und wird auch eingefügt....

VIELEN DANK!!!!!!!!!!!!!!!!!!!!!!!

8. Februar 2007 08:52

hi,

spontan wuerde ich das so probieren...
Code:
SuchText := 'Alarmtext:';
IF STRPOS(TextVariable,SuchText) > 0 THEN BEGIN
  StartDeineFunktion();
END ELSE
  CLEAR(TextVariable);


ist nicht getestet... :wink:

gruesse
feri

8. Februar 2007 14:23

Mhn, jetzt habe ich es eingebaut, jetzt wird mir aber immer das Feld "Alarm" komplett "gecleared".

Es sollte halt schon befüllt werden wenn im Text "Alarmtext:" gefunden wird. Ich versteh das nicht...

Code:
// ALARMTEXTE AUSSCHNEIDEN
CR := 13;
LF := 10;
Suchtext := 'Alarmtext:';
IF STRPOS(TEXT,Suchtext) > 0 THEN BEGIN
Alarm := rec_Adressdaten.Alarm;
TEXT := Alarm;
TEXT := DELCHR(TEXT, '=', (FORMAT(CR) + FORMAT(LF)));
TEXT := COPYSTR(TEXT, 12, STRLEN(TEXT) - STRPOS(TEXT, FORMAT(CR) + FORMAT(LF)));
Alarm  := TEXT;
END ELSE  BEGIN
CLEAR(TEXT);
 END;

8. Februar 2007 16:14

Also, um den Ausdruck "Alarmtext:" in NAV auswerten zu können, muss der View den Text natürlich beinhalten:

Code:
SELECT KUNUMMER, ANREDE, NAME, ANSCHR, ZUSATZ, STRASSE, PLZ, ORT, FAX,

  SUBSTRING(
    CONVERT(varchar(250), ALARM),
    CHARINDEX('Alarmtext:', CONVERT(varchar(250), ALARM)),
    (
      CHARINDEX((char(13) + char(10)), CONVERT(varchar(250), ALARM), CHARINDEX('Alarmtext:', CONVERT(varchar(250), ALARM)))
      - CHARINDEX('Alarmtext:', CONVERT(varchar(250), ALARM))
    )
  )
  AS Alarm,

SPRACHE, KONDITION
FROM DATENBANK


Ist in der Spalte "Alarm" der Ausdruck "Alarmtext:" enthalten, so steht hier der gesamte Alarmtext drin, z.B.

Alarmtext: Schwarze Liste


andernfalls wird die gesamte Textzeile {bla bla bla} angezeigt.

In NAV soll nun - im ersten Fall - der Präfix "Alarmtext" abgeschnitten werden, so daß z.B. nur "Schwarze Liste" übrig bleibt.
Im zweiten Fall - {bla bla bla} soll gar nix angezeigt werden. Das sollte so gehen:

Code:
CR := 13;
LF := 10;
IF STRPOS(rec_Adressdaten.Alarm, 'Alarmtext:') <> 0 THEN
  Alarm := COPYSTR(rec_Adressdaten.Alarm, 11, STRLEN(rec_Adressdaten.Alarm) - STRPOS(rec_Adressdaten.Alarm, (FORMAT(CR) + FORMAT(LF)))))
ELSE
  Alarm := '';


Diesen Code kann man sowohl im OnFormat zur Anzeige (hier statt "rec_Adressdaten.Alarm" und "Alarm" die lokale Variable "Text" verwenden), als auch z.B. zum Übertragen in andere Tabellen-Felder verwenden ...

Wie schaut's aus? Sind wir am Ziel?

8. Februar 2007 18:20

ich trau es mich nicht zu sagen...

Nein leider noch nicht :-)

Mit dem Code von Dir eben bekomme ich dann die Alarmtexte wenn es welche gibt nicht rein und es ist immer leer.

Der Code hier von mir funzt soweit ganz gut, das einzige was er nicht kann ist wenn das wort "Alarmtext:" vorkommt das er dann beim Validate das Feld leer macht:

Code:
CR := 13;
LF := 10;
Suchtext := 'Alarmtext:';
IF STRPOS(TEXT,Suchtext) = 0 THEN BEGIN
Alarm := rec_Adressdaten.Alarm;
TEXT := Alarm;
TEXT := DELCHR(TEXT, '=', (FORMAT(CR) + FORMAT(LF)));
TEXT := COPYSTR(TEXT, 12, STRLEN(TEXT) - STRPOS(TEXT, FORMAT(CR) + FORMAT(LF)));
Alarm  := TEXT;
END ELSE  BEGIN
 Alarm := '';
 END;

8. Februar 2007 18:24

Ach sorry mein Code von oben funzt auch nicht wie er soll, bin schon komplett durcheinander, ich muss mir das später anschauen.....

dreh langsam durch :twisted: :evil: :twisted: :evil:

9. Februar 2007 09:12

hi,

hast du jetzt bei der STRPOS funktion das '<>' durch '=' ausgetauscht?

gruesse
feri