Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit Radom ~ Frage (https://www.delphipraxis.net/24583-problem-mit-radom-%7E-frage.html)

aerotech 23. Jun 2004 10:06


Problem mit Radom ~ Frage
 
Hi Leute, wir haben folgendes Problem, das Programm sucht sich durch Radndom eine Zufallsfrage aus und gibt diese aus. Wenn man auf den Richtigen Button geklickt hat (wenn in der TB_Tabelle eine 1 steht) dann soll automatisch eine neue Frage sowie dessen Anwortmöglichkeiten erscheinen.
Leider haben wir jetzt das Problem, wenn das Programm irgendwann die letzte Frage ganz unten in der DB ausgewählt hat, dann geht der Button nicht mehr,...sozusagen er geht nicht zurück und sucht sich ne' neue aus. Egal ob er erstmal ne' Frage 2 mal aussucht,...es soll funzen! :/

Delphi-Quellcode:
procedure TForm1.DBText1Click(Sender: TObject);
begin
if tquizfragen.FieldByName('L1').AsInteger = 1 then tquizfragen.moveby(random(tquizfragen.RecordCount))
else
showmessage('Diese Antwortmöglichkeit war leider Falsch');
end;

procedure TForm1.DBText2Click(Sender: TObject);
begin
if tquizfragen.FieldByName('L2').AsInteger = 1 then tquizfragen.moveby(random(tquizfragen.RecordCount))
else
showmessage('Diese Antwortmöglichkeit war leider Falsch');
end;

procedure TForm1.DBText3Click(Sender: TObject);
begin
if tquizfragen.FieldByName('L3').AsInteger = 1 then tquizfragen.moveby(random(tquizfragen.RecordCount))
else
showmessage('Diese Antwortmöglichkeit war leider Falsch');
end;

procedure TForm1.DBText4Click(Sender: TObject);
begin
if tquizfragen.FieldByName('L4').AsInteger = 1 then tquizfragen.moveby(random(tquizfragen.RecordCount))
else
showmessage('Diese Antwortmöglichkeit war leider Falsch');
end;

BluesKid 23. Jun 2004 10:25

Re: Problem mit Radom ~ Frage
 
Moin moin

wie wärs mit:

Delphi-Quellcode:
if tquizfragen.FieldByName('L1').AsInteger = 1 then begin
  tquizfragen.first; //<-
  tquizfragen.moveby(random(tquizfragen.RecordCount));
  end else
    showmessage('Diese Antwortmöglichkeit war leider Falsch');
end;
Analog dann bei den anderen Buttons.

schönen Gruß

Sam

AlphaBug 23. Jun 2004 10:33

Re: Problem mit Radom ~ Frage
 
Hi aerotech :hi: ,

Da der Quellcode ein "Random" enthält, hoffe ich, dass vorher (nur) 1 mal "Randomize" aufgerufen wurde (im FormCreate oder so).

Des weiteren kann "RecordCount" 0 zurückliefern, wenn die jeweilige Tabelle zu viele Felder (oder Datensätze ? :gruebel: ) enthält.

Aber das eigentliche Problem:

Das "MoveBy" ändert den Datensatz relativ zum aktuellen Datensatz !
Da "RecordCount" aber keine negativen Werte liefert, springt er immer weiter vorwärts, bis (irgendwann) zum letzten Datensatz.
Versuchs mal so:
Delphi-Quellcode:
procedure TForm1.DBText1Click(Sender: TObject);
begin
  if TQuizfragen.FieldByName('L1').AsInteger = 1 then
  begin
    TQuizfragen.First; // <-- Setzt das DataSet auf den 1. Datensatz zurück.
    // Jetzt kann er sich den Datensatz aussuchen ...
    TQuizfragen.MoveBy(Random(TQuizfragen.RecordCount));
  end
  else
    Showmessage('Diese Antwortmöglichkeit war leider Falsch');
end;


[edit]
war mal wieder zu langsam ...
... aber doppelt hält besser ! :mrgreen:
[/edit]

aerotech 23. Jun 2004 13:54

Re: Problem mit Radom ~ Frage
 
Danke, funzt! :thuimb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz