Find will datensatz ändern

28. Mai 2009 07:56

Hallo,

Ich möchte die Form 31 um ein Eingabefeld erweitern in dem der User Filterkriterien eingeben kann.
Wenn ich nur Filter setze ( rec.SETFILTER() ) klappt das wunderbar.

Mache ich nun aber ein rec.FINDFIRST, fragt NAV mich ob ich den Datensatz umbenennen will. Schaue ich mir rec und xrec an so kann ich sehen das xrec den alten Datensatz auf welcher der Cursor zufällig stand enhält und rec meinen neuen gefundenen.

Hat jemand eine Tip

Danke
Jörg

Re: Find will datensatz ändern

28. Mai 2009 10:28

Hallo Jörg,

wie machst du die Filtermöglichkeit?
Über ein Neues Feld oben auf der Form?
Dann kannst du on afterValidate den Setrange machen und brauchst dann kein Findfirst.

Edit:
ansonsten kannst du das so lösen:

Neue Variable:
oldrec = Record auf Tab 27

oldrec := rec;
setrange("No.",MyItemNo);
findfirst;
rec := oldrec;
currform.update;

mfg

Re: Find will datensatz ändern

28. Mai 2009 10:35

Hallo,
Ja über ein Neues Feld.
SearchText ist der Bezeichner des Eingabefeldes


Code:
tbSearchValue - OnAfterValidate()

// RUB001 /A
Rec.RESET;
IF STRPOS(SearchText, ',' ) > 0 THEN
BEGIN
  item1 := DELCHR( COPYSTR(SearchText, 1, STRPOS(SearchText, ','  ) -1 ), '<' );
  item2 := DELCHR( DELSTR( SearchText, 1, STRPOS( SearchText, ','  ) ) , '<' );
  item1 := DELCHR( item1, '>' );
  item2 := DELCHR( item2, '>' );

  Rec.SETFILTER(Description, '%1', '*' + item1 +'*' );
  Rec.SETFILTER("Pattern Description", '%1', '*' + item2 +'*' );

END
ELSE
BEGIN
  item1 := SearchText;
  item2 := '';

  Rec.SETFILTER("No.", '%1', item1 +'*'   );

  IF NOT Rec.FINDFIRST THEN
  BEGIN
     Rec.RESET;
     Rec.SETFILTER(Description, '%1', '*' + item1 +'*'   );
  END;

END;



CurrForm.UPDATE;

// RUB001 /E

Re: Find will datensatz ändern

28. Mai 2009 10:39

Moin Jörg,

ich habe eben mal nach geschaut wie das in einer unserer Kunden-DB programmiert ist - da wird von den Feldern im Kopf ausgehend folgende Funktion aufgerufen.

Code:

SetItemFilter()
IF ItemCatCode <> '' THEN
  SETRANGE("Item Category Code",ItemCatCode)
ELSE
  SETRANGE("Item Category Code");
IF ProdGrCode <> '' THEN
  SETRANGE("Product Group Code",ProdGrCode)
ELSE
  SETRANGE("Product Group Code");
IF ManuCode <> '' THEN
  SETRANGE("Manufacturer Code",ManuCode)
ELSE
  SETRANGE("Manufacturer Code");
IF ItemDescription <> '' THEN BEGIN
  SearchDescription := '*@' + ItemDescription + '*';
  SETFILTER(Description,SearchDescription);
END ELSE
  SETRANGE(Description);
CurrForm.UPDATE(FALSE);


Vielleicht hilft dir das ja weiter.

Gruß Jan

Re: Find will datensatz ändern

28. Mai 2009 10:48

oldrec := rec am anfang wegspreichern und vor dem update rec := oldrec zuweisen und dann funktioniert das.

[gelöst] Re: Find will datensatz ändern

28. Mai 2009 10:58

Hallo,

vielen Dank für die hilfe.
Code:
CurrForm.Update( false );



SaveRecord
Type: Boolean

Set this parameter to true if you want to save the current record. Set this parameter to false if you want to update without saving the current record.


jetzt klappt es.

Re: [gelöst] Re: Find will datensatz ändern

28. Mai 2009 11:10

Jörg Nissen hat geschrieben:Hallo,

vielen Dank für die hilfe.
Code:
CurrForm.Update( false );



SaveRecord
Type: Boolean

Set this parameter to true if you want to save the current record. Set this parameter to false if you want to update without saving the current record.


jetzt klappt es.


stimmt, das ist die beste Möglichkeit.