seltsame Fehlermeldung nach Modify unter SQL

16. März 2009 18:33

Hi Leute,

ich habe ein Problem und weiss absolut nicht weiter. Wir haben eine Umstellung von Native auf SQL gemacht und haben jetzt bei dieser Funktion das Problem das da eine Fehlermeldung kommt.

Meine Frage ist nun wie kann ich das machen das diese Meldung nicht mehr kommt :-) Ich habe nun glazube ich schon alles ausprobiert was geht aber bekomme das einfach nicht hin. Kann mir jemand auf die Sprünge helfen???

Code:
Tabelle Verkaufszeile:

// start med1-56.mh
Zuzahlungsposten.RESET;
Zuzahlungsposten.SETCURRENTKEY("Offene Belegart","Offene Belegnr.","Offene Belegzeilennr.");
Zuzahlungsposten.SETRANGE("Offene Belegart",Belegart);
Zuzahlungsposten.SETRANGE("Offene Belegnr.","Belegnr.");
Zuzahlungsposten.SETRANGE("Offene Belegzeilennr.","Zeilennr.");
Zuzahlungsposten.SETRANGE(Storniert,FALSE);
IF NOT Zuzahlungsposten.FIND('-') THEN
  EXIT(TRUE);
IF (Zuzahlungsposten."Rechnungsnr. KK" <> '') OR (Zuzahlungsposten."Rechnungsnummer Patient" <> '') THEN
  EXIT(FALSE);

LocVerkZeile.RESET;
LocVerkZeile.SETRANGE(Belegart,Belegart);
LocVerkZeile.SETRANGE("Belegnr.","Belegnr.");
LocVerkZeile.SETRANGE("Lfd. Nr. Zuzahlungsposten (V)",Zuzahlungsposten."Lfd. Nr.");
IF LocVerkZeile.FIND('-') THEN
  LocVerkZeile.DELETEALL(TRUE);


Zuzahlungsposten.Storniert := TRUE;
Zuzahlungsposten.MODIFY;
EXIT(TRUE);
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Natalie am 16. März 2009 19:09, insgesamt 1-mal geändert.
Grund: Code-Tag geschlossen

Re: seltsame Fehlermeldung nach Modify unter SQL

16. März 2009 20:34

Sind für die Tabelle "Zuzahlungsposten" RECOMPILE Hints gesetzt?

Re: seltsame Fehlermeldung nach Modify unter SQL

16. März 2009 20:44

Und bei nochmaligem hinsehen fällt mir auf:

Code:
...
Zuzahlungsposten.RESET;
Zuzahlungsposten.SETCURRENTKEY("Offene Belegart","Offene Belegnr.","Offene Belegzeilennr.");
Zuzahlungsposten.SETRANGE("Offene Belegart",Belegart);
Zuzahlungsposten.SETRANGE("Offene Belegnr.","Belegnr.");
Zuzahlungsposten.SETRANGE("Offene Belegzeilennr.","Zeilennr.");
[b]Zuzahlungsposten.SETRANGE(Storniert,FALSE);[/b]
IF NOT Zuzahlungsposten.FIND('-') THEN
...
[b]Zuzahlungsposten.Storniert := TRUE;
Zuzahlungsposten.MODIFY;[/b]
...


Der Filter auf "Storniert = FALSE" definiert mitunter das Result-Set, d.h. den SQL Cursor den "FIND('-')" aufbaut. Da später "Storniert = TRUE" gesetzt wird, wied somit ein "Definitionskriterium des SQL Cursors" geändert und der Cursor somit ungültig - und dann gibt's diese Fehlermeldung.

Wenn ich den Code richtig interpretiere, dann willst Du ja nur den ersten "Zuzahlungsposten" im Filter ändern, dann schlage ich vor statt

IF NOT Zuzahlungsposten.FIND('-') THEN

IF NOT Zuzahlungsposten.FINDFIRST THEN

zu verwenden. Ansonsten würde ich versuchen eine zweite Instanz von "Zuzahlungsposten" für den MODIFY zu verwenden:

Code:
Zuzahlungsposten2.GET(Zuzahlungsposten.<Primary_Key>);
Zuzahlungsposten2.Storniert := TRUE;
Zuzahlungsposten2.MODIFY;


Hoffe das hilft was!
Schöne Grüße,
Jörg
Zuletzt geändert von Timo Lässer am 16. März 2009 22:16, insgesamt 1-mal geändert.
Grund: C/AL-Code der besseren Lesbarkeit halber in [code]-Blöcke gepackt

Re: seltsame Fehlermeldung nach Modify unter SQL

16. März 2009 22:19

Bitte packt euren C/AL-Code der Lesbarkeit halber in [code]-Blöcke.
(Und achtet darauf, dass die Tags richtig geöffnet sowie geschlossen werden.)
Danke!

Diesmal waren Natalie und ich so freundlich und haben eure Beiträge überarbeitet.


P. S.: Reine Einzeiler können auch mittels [font]-Tag in Courier New dargestellt werden. Hilft ebenfalls der Lesbarkeit.

Re: seltsame Fehlermeldung nach Modify unter SQL

17. März 2009 00:17

Ja, sonst gerne - aber im "Code" kann ich nichts hervorheben (Fett/Kursiv/Unterstrichen, etc.) - deshalb der "Faux Pas"

Re: seltsame Fehlermeldung nach Modify unter SQL

17. März 2009 09:43

Hallo Tesarolle,

macht der
Code:
LocVerkZeile.DELETEALL(TRUE);
irgendetwas mit den Zuzahlungsposten, oder anders, bekommst du die Meldung auch, wenn du den DELETEALL mit FALSE aufrufst?

Gruß, Fiddi