8. März 2016 09:25
FOR i := 1 TO PRecref.FIELDCOUNT DO BEGIN
FldRef := PRecref.FIELDINDEX(i);
CASE FldRef.NAME OF
'Vendor No.': BEGIN
locVendNo :=FldRef.VALUE;
END;
'Vendor Item No.':
BEGIN
locVendItemNo := FldRef.VALUE;
END;
'Description':
BEGIN
locItemDescription :=FldRef.VALUE;
END;
'Description 2':
BEGIN
locItemDescription2 :=FldRef.VALUE;
END;
END;
END;
locItem.SETCURRENTKEY("Vendor No.", "Vendor Item No.");
locItem.SETRANGE("Vendor No.",locVendNo);
locItem.SETRANGE("Vendor Item No.", locVendItemNo);
IF locItem.FINDFIRST THEN
BEGIN
MESSAGE('Item %1 exists\ Old Description: %2 \ New Description: %3',
locItem."No.",
locItem.Description,
locItemDescription
);
locItem.Description := locItemDescription;
locItem."Description 2" := locItemDescription2;
locItem.MODIFY;
END;
8. März 2016 09:41
8. März 2016 10:00
Natalie hat geschrieben:Ist es nicht zielführender, für eine Funktion namens UpdateItem auch einen Item-Record statt eines RecordRefs zu übergeben?
Alternativ kannst du mittels SETTABLE aus dem RecordRef eine Item-Recordvariable machen und so im Anschluss direkt auf die richtigen Felder zugreifen.
IF locImportBuffer.FINDSET THEN BEGIN
REPEAT
ToRecRef.OPEN(ToTableNo);
FromrecRef.GETTABLE(locImportBuffer);
FOR A := 1 TO FieldCount DO BEGIN
IF ConstValueArr[A] <> '' THEN
Variant :=ConstValueArr[A]
ELSE BEGIN
IF FromrecRef.FIELDEXIST(FromFieldNoArr[A]) THEN BEGIN
FromFieldRef := FromrecRef.FIELD(FromFieldNoArr[A]);
Variant := FromFieldRef.VALUE;
tempTxt := FromFieldRef.NAME;
END;
END;
Str :=FORMAT(Variant);
IF ToRecRef.FIELDEXIST(ToFieldNoArr[A]) THEN BEGIN
ToFieldRef := ToRecRef.FIELD(ToFieldNoArr[A]);
Field.GET(ToTableNo,ToFieldNoArr[A]);
IF ToFieldValidateArr[A] THEN
ToFieldRef.VALIDATE(Variant)
ELSE
ToFieldRef.VALUE := Variant;
END;
END;
UpdateItem(ToRecRef);
ToRecRef.CLOSE;
UNTIL locImportBuffer.NEXT = 0;
MyRecRef.SETTABLE(loctempItem)
IF MyRecRef.FINDSET THEN
REPEAT
MyRecRef.SETTABLE(loctempItem);
loctempItem.INSERT;
UNTIL MyRecRef.NEXT = 0;
... IF locTempItem FINDSET ... mach was ...
8. März 2016 10:14
elTorito hat geschrieben:Sagt mir aber TableData 0 existiert nicht, bei SETTABLE.
MyRecRef.SETTABLE(loctempItem) <-- das gehört hier nicht hin (s.u.). Zeile löschen
IF MyRecRef.FINDSET THEN
REPEAT
MyRecRef.SETTABLE(loctempItem); <-- das hier ist richtig: MyRecRef zeigt erst hier auf einen Datensatz
loctempItem.INSERT; // bei dem Konstrukt hier hättest du auch direkt MyRecRef.INSERT schreiben können; macht das gleiche
// Ist MyRecRef Temporary=Yes? Wenn nein, dann brauchst du nicht mal das INSERT, den Datensatz gibts ja schon.
UNTIL MyRecRef.NEXT = 0;
8. März 2016 10:59
IF MyRecRef.FINDFIRST THEN
REPEAT
MyRecRef.SETTABLE(locTempItem);
MyRecRef.INSERT;
UNTIL MyRecRef.NEXT =0;
locItem.SETCURRENTKEY("Vendor No.", "Vendor Item No.");
locItem.SETRANGE("Vendor No.",locTempItem."Vendor No.");
locItem.SETRANGE("Vendor Item No.", locTempItem."Vendor Item No.");
IF locItem.FINDFIRST THEN
BEGIN
locItemToUpdate.GET(locItem."No.");
MESSAGE('Item %1 exists\ Old Description: %2 \ New Description: %3',
locItem."No.",
locItem.Description,
locTempItem.Description
);
locItemToUpdate.VALIDATE(Description,locTempItem.Description);
locItemToUpdate.VALIDATE("Description 2",locTempItem."Description 2");
//locItemToUpdate.MODIFY;
END;