Random funktioniert schon richtig, wenn immer die gleichen Datensätze durchlaufen werden.
Random ist eine Funktion, die nach einem bestimmten Algorithmus Pseudo-Zufallszahlen produziert.
Durch die Funktion Randomize (ich weiß nicht genau, in welchem Kontext die aufgerufen werden muss, bitte in der Hilfe nachschauen) wird der Zufallsgenerator neu initialisiert (ich glaube mit der Systemzeit). Du solltest also zu Beginn der Funktion (nicht innerhalb der Schleife) Randomize aufrufen.
Trotzdem verstehe ich nicht, weshalb Du die Tabelle zufällig durchläufst.
Worum geht es denn überhaupt?
Normalerweise wäre es näherliegend, table1 mit etwas wie
Delphi-Quellcode:
table1.First;
while not table1.eof do
begin
if table2.FindKey([table.FieldByName('ID').AsInteger]) // Es gibt einen Datensatz in table2, dessen Indexfeld
// den selben Wert wie "ID" in table1 hat
then close; // was wird bei Dir den geschlossen?? evtl. exit verwenden
table1.next;
end;
zu durchlaufen.
Kannst Du denn garantieren, dass es keine Endlosschleife gibt?
Die Konstruktion mit label und goto ist nicht nötig. Statt "goto sprungpunkt" kannst Du einfach "close" (oder "exit") schreiben und statt dem Sprungpunkt einfach "close"(exit).
Mir ist letztlich immer noch gar nicht klar, was das Ganze eigentlich bewirken soll.
MfG
Urs