[gelöst] bestimmten Datensatz mit find Befehl?

25. August 2009 11:58

Hallo,

mit setrange bzw. setfilter habe ich ein Recordvariable gefiltert.
MIt findfirst, findlast kann ich ja den ersten oder den letzten datensatz finden.
Wir kann ich aber einen bestimmten Datensatz finden?

Beispiel.

Ich habe die recordvariable PurchLine auf 10 Bestellzeilen gefiltert.

Nun will ich den 4. Datensatz finden. Wie geht das?
Zuletzt geändert von dai am 25. August 2009 15:07, insgesamt 1-mal geändert.

Re: bestimmten Datensatz mit find Befehl?

25. August 2009 12:02

RECORD.NEXT(ANZAHLDERSTEPS)

Re: bestimmten Datensatz mit find Befehl?

25. August 2009 12:04

Hallo Sebastian,

Meinst du so für den vierten Datensatz?

PurchLine.next(4)

Re: bestimmten Datensatz mit find Befehl?

25. August 2009 12:45

dai hat geschrieben:Beispiel.:
Ich habe die recordvariable PurchLine auf 10 Bestellzeilen gefiltert.
Nun will ich den 4. Datensatz finden. Wie geht das?


Woher weißt du, das es der 4. ist?
Normalerweise würdest du anhand bestimmter Kriterien den 4. Datensatz ausmachen, mit diesen würdest du deinen Record entsprechend Filtern und dann hättest du den DS.
(Bei der nächsten Bestellung könnte es ja auch der 5. oder 3. DS sein oder? (Ausnahme, es steht immer im 4. DS drin))

Ansonsten so wie du bzw. Sebastian es geschrieben hat.

Re: bestimmten Datensatz mit find Befehl?

25. August 2009 13:36

Und bitte auch immer auf den gesetzten Key achten bei diesen Dingen! Datensatznr. 4 im Code muss nicht zwangsläufig auch der 4. Datensatz in einer Form sein!

Gruß, Norman

Re: bestimmten Datensatz mit find Befehl?

25. August 2009 13:59

Also es geht eigentlich um eine anderes Problem

ich habe als beispiel zwei Tabellen.
Beide Tabellen haben zum beispiel vier datensätze.

1.Tabelle (zwei Integerfelder)
Feld 1 Feld 2
500 400
400 200
300 100
200 150

2.Tabelle (zwei Integerfelder)
Feld 1 Feld 2
1
2
3
4

Ich mache nun eine Schleife über die erste Tabelle

Code:
If Tabelle1.findfirst then begin
 repeat
    clear(Diff);
     Diff := Feld1 - Feld2;
 until Tabelle1.next = 0;

Während der Schleife möchte ich die Differenz gerne in die zweite Tabelle schreiben.
die erste differnz von 100 in den ersten Datensatz der 2.Tabelle usw. und zwar in das Feld2.
Ich habe gedacht das ich in der schleife ein integervariable hochzähle. Mit hilfe dieser variable wurde ich dann
den xten Datensatz der zweite Tabelle finden und die Differenz reinschreiben.
Wie kann ich den Code gestalten?

Gruß

Re: bestimmten Datensatz mit find Befehl?

25. August 2009 14:39

Hallo Dai,

dein Quelltext ist leichter zu lesen und zu verstehen, wenn du ihn zwischen so genannte Code-Tags setzt. Insbesondere deine Formatierungen werden so auch beibehalten.

Ich habe das für dich im obrigen Beitrag gemacht :-)

Daher bitten wir dich, vor und nach deinem Quelltext diese Code-Tags einzufügen. Beispiel:


[code]Dein Quelltext[/code]

Gruß, Mikka
MSDynamics.de-Team

Re: bestimmten Datensatz mit find Befehl?

25. August 2009 14:47

Ungefähr so:
Ggf. sollte das MODIFY mit einem IF .. THEN abgefangen werden.

Variante 1.:
Code:
// Code gelöscht, war Blödsinn. Habe Deine Anforderung nicht richtig gelesen
// Habe zu schnell gepostet, Sorry


Variante 2. (Setzt vorraus, das es den Datensatz in der Tabelle2 gibt, es geht aber auch eleganter):
Code:
// If Tabelle1.findfirst then begin    // Kein FINDFIRST sondern FINDSET
Zähler := 0;
CLEAR(Diff);

IF Tabelle1.FINDSET then begin
REPEAT
    Zähler +=1;
     // CLEAR(Diff);           // Unnötig, das der Wert in der nächsten Zeile geschrieben wird.
     Diff := Feld1 - Feld2;
     IF Tabelle2.GET(Zähler) THEN BEGIN
       Tabelle2.Feld2 := Diff;
       Tabelle2.MODIFY;
     END;
UNTIL Tabelle1.NEXT = 0;

Re: bestimmten Datensatz mit find Befehl?

25. August 2009 15:06

Hallo mikka,

leider klappt deine Variante 2 nicht, da meine 2.Tabelle eine gefilterte Tabelle in der Programmierung ist. Dadurch kann ich den benötigte Primärschlüssel für die Get-Funktion in der Schleife nicht bestimmen.

Ich habe jetzt aber so gemacht. Ich setzte in der 2.tabelle ein Kennzeichnen das ich die Differenz bereits in die 2.tabelle reingeschrieben habe.

ich filtere meine 2.tabelle in der schleife nun auf Kennzeichnen nein. danach mache ich findfirst und habe den nächsten datensatz wo ich die differenz noch nicht eingetragen habe.

Ist vielleicht nicht elegant aber es klappt. :-)

Danke für eure Beiträge

Re: [gelöst] bestimmten Datensatz mit find Befehl?

25. August 2009 15:25

Hmm, ich kenne den Code nicht genau und ich weiß nicht was er machen soll.
Aber "Bauchschmerzen" habe ich schon, das dieser Code irgendwann Fehler produziert :roll: