IF Funktion ... mit AND....

13. Juni 2008 16:39

Hallo mal wieder :oops:

dieses mal habe ich ein problem mit einer IF Funktion.
An sich "einfach". Doch den jetzigen Fehler verstehe ich nicht und hoffe auf eure unterstützung.

Code:
 
Question := Text000;
IF Birthday.birtdaydd=DATE2DMY(TODAY,1) AND Birthday.birtdaymm=DATE2DMY(TODAY,2)
 THEN Number := Birthday.COUNT;
Answer := DIALOG.CONFIRM(Question, TRUE, Number);
    FORM.RUN(123456701);


Jedoch kommt dann bei der IF Funktion folgender Fehler:

Eine Typkonventierung kann nicht durchgeführt werden, da eine der Seiten einen ungültigen Typ hat.

Integer AND Integer


Was bedeutet das? Alleine fünktionieren die IF Funktionen :(

Kann mir wer helfen?

Gruß,

Heiko_D

13. Juni 2008 16:48

Versuchs mal mit Klammern:

Code:
Question := Text000;
IF (Birthday.birtdaydd = DATE2DMY(TODAY,1)) AND (Birthday.birtdaymm = DATE2DMY(TODAY,2))
 THEN Number := Birthday.COUNT;
Answer := DIALOG.CONFIRM(Question, TRUE, Number);
  FORM.RUN(123456701);

16. Juni 2008 11:15

die antwort kann so einfach sein :oops:

16. Juni 2008 12:09

nun habe ich leider noch eine frage:
wieso funktioniert die anzeige der MESSAGE nicht?
Code:
IF (Birthday.birtdaydd = DATE2DMY(TODAY,1)) AND (Birthday.birtdaymm=DATE2DMY(TODAY,2))
THEN MESSAGE('HIHO');

die if bedingung ist doch erfüllt.
oder wird nur der erste erste eintrag der tabelle durchsucht?
wenn ja müsste ich dann eine schleife bauen bis z.b id =0 ist?
doch wie mache ich das?

16. Juni 2008 13:02

kommt drauf an, was in deinen Variablen steht. birtdaydd
dd deutet auf zweistellig hin. die rückgabe liefert aber einen Integer ohne führende 0.
nur geraten.

16. Juni 2008 13:30

birtdaydd steht für eine spalte in der tabelle customer welche mit der variable Birthday angegeben wird. und birtdaymm ist auch eine spalte in der tabelle.
vlt hilft das weiter . ich verstehe es nicht.... muss ich erst sagen
if birtdaydd <>0 ?

16. Juni 2008 13:43

Heiko_D hat geschrieben:birtdaydd steht für eine spalte in der tabelle customer welche mit der variable Birthday angegeben wird. und birtdaymm ist auch eine spalte in der tabelle.
vlt hilft das weiter . ich verstehe es nicht.... muss ich erst sagen
if birtdaydd <>0 ?


Was sagt denn der Debugger?

Sind /wirklich/ /beide/ Werte 'Wahr', die Du überprüfst?

Markus

16. Juni 2008 13:56

der debugger schweigt. ich sehe da auch keinen fehler bzw bin blind -.-
also ich will die tabelle durchsuchen lassen, bis in dem feld "birtdaydd" die erste zahl des heutigen datums steht UND in dem feld "bitdaymm" die zweite
Zahl steht. Ich habe extra noch einmal eine neue Person angelegt. :(
selbst wenn ich in der tabelle selbst in die beiden felder was eintrage, nämlich 16 ins erste und 6 ins zweite so passiert nichts. :(

16. Juni 2008 14:06

setz mal eine message und lass dir alle 4 Variablen anzeigen. nur mal gucken, ob du auf dem richtigen Customer stehst.

16. Juni 2008 14:20

Heiko_D hat geschrieben:der debugger schweigt. ich sehe da auch keinen fehler bzw bin blind -.-


Neinnein, du solltest schon den 'break bei Triggern' einschalten und dann bei den Variablen (oder den Feldern der Tabelle) die Inhalte überprüfen. Oder --wie bereits vorgeschlagen-- per Message alle beteiligten/relevanten Variablen ausgeben.

Markus

16. Juni 2008 14:33

liegt es vlt daran, dass nicht über all in den spalten etwas eingegeben ist?
und das nur die erste zeile der tabelle durchsucht wird?

@ tba, markus: entschuldigt meien unwissenheit aber ich weiß nicht was ihr meint. sry :(

16. Juni 2008 14:42

Wenn du mit dem Debugger nicht zurecht kommst (was keine Schande ist), dann probiers auf hartem Wege:

Code:
MESSAGE(FORMAT(Birthday.birtdaydd) + ' = ' +
        FORMAT(DATE2DMY(TODAY,1))  + ' und \'
        FORMAT(Birthday.birtdaymm) + ' = ' +
        FORMAT(DATE2DMY(TODAY,2)));

16. Juni 2008 14:44

Heiko_D hat geschrieben:@ tba, markus: entschuldigt meien unwissenheit aber ich weiß nicht was ihr meint. sry :(


Wie man den Debugger einschaltet, weißt Du ja schon (incl. 'Break on Trigger'); dann einfach, wenn der ensprechende Datensatz durchlaufen wird die Variable/Tabelle (hier: birthday) ansehen und dabei den 'zoom' verwenden.

HTH

Markus

17. Juni 2008 09:21

vielen dank für eure hilfe.

also es wir ausgegeben, dass birtdaydd=0 und Date2DMY(TODAY,1)
für das heutige Datum = 17 ist.

Somit denke ich mir, dass nur die erste Zeile der Tabelle durchsucht wird.
Also muss ich sagen,
Code:
REPEAT;
IF (Birthday.birtdaydd = DATE2DMY(TODAY,1)) AND (Birthday.birtdaymm=DATE2DMY(TODAY,2))
THEN MESSAGE('HIHO');
UNTIL Birthday.Name = '';


ich weiß nicht ob dieser code funktioniert, da ich noch nie schleifen ausprobiert habe. ich habe es nur so hingeschrieben, wie ich denke, dass es funktionieren würde. Aber durchsucht er jetzt wirklich jede zeile? ich denke da müsste noch etwas bestimmtes hinzu, damit er sich die nächste zeile vornimmt?

17. Juni 2008 09:36

Heiko_D hat geschrieben:Aber durchsucht er jetzt wirklich jede zeile? ich denke da müsste noch etwas bestimmtes hinzu, damit er sich die nächste zeile vornimmt?


Stimmt, so kommst du nicht weiter ;-)
Um Zeilen zu durchsuchen, brauchst du solch einen Aufbau:
Code:
IF DeineTabelle.FIND('-') THEN BEGIN
  REPEAT
    // mach was mit dem Record DeineTabelle
  UNTIL DeineTabelle.NEXT = 0; // <- NEXT springt auf den nächsten Datensatz von DeineTabelle
END;

17. Juni 2008 11:07

Heiko_D hat geschrieben:Aber durchsucht er jetzt wirklich jede zeile? ich denke da müsste noch etwas bestimmtes hinzu, damit er sich die nächste zeile vornimmt?

Du verwaltest die Geburtstage in einer eigenen Tabelle "Birthday"? Und willst herausfinden, wer heute Geburtstag hat? Dann würde ich die Tabelle entsprechend filtern...

Code:
Birthday.SETRANGE(birtdaydd,DATE2DMY(TODAY,1));
Birthday.SETRANGE(birtdaymm,DATE2DMY(TODAY,2));
IF Birthday.FINDSET THEN
  REPEAT
    MESSAGE('Heute hat %1 Geburtstag',Birthday.Name);
  UNTIL Birthday.NEXT = 0;

(Das REPEAT ist lediglich für den Fall, dass mehrere Personen heute Geburtstag haben).

Mich wundert es, dass der Geburtstag als Tag und Monat gespeichert wird, warum nicht als DATE?

Ralf

17. Juni 2008 12:46

als Tag und Monat bringt denk ich Vorteile bei der Erstellung von Geburtstagslisten. Da kann man die schön sortieren.