Delphi-PRAXiS
Seite 5 von 7   « Erste     345 67      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank- Quiz programmieren (https://www.delphipraxis.net/203649-datenbank-quiz-programmieren.html)

DeddyH 9. Mär 2020 17:19

AW: Datenbank- Quiz programmieren
 
Bin ich irgendwie unsichtbar oder sowas? Wozu ist die Schleife gut?

Reedx 9. Mär 2020 18:00

AW: Datenbank- Quiz programmieren
 
Zitat:

Zitat von DeddyH (Beitrag 1459291)
Bin ich irgendwie unsichtbar oder sowas? Wozu ist die Schleife gut?

welche denn? die repeat?

Reedx 9. Mär 2020 18:03

AW: Datenbank- Quiz programmieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
okay, hier die Zip datei..
die Unit um die es hier geht, nennt sich "Uleicht".
beim Anschauen/Testen bitte folgendes machen:

Als User einloggen --> Daten aus Datenbank entnehmen
Dann auf User Button klicken, auf quiz starten (button) gehen, dann "Leicht" auswählen und dann dort am besten "Deutsch" auswählen (bitte Datenbank zur Hilfe nehmen (beim anschauen)). Dann auf "Nächste Frage" klicken.. hoffe das ist halbwegs verständlich ....

p80286 9. Mär 2020 20:49

AW: Datenbank- Quiz programmieren
 
Zitat:

Zitat von DeddyH (Beitrag 1459291)
Bin ich irgendwie unsichtbar oder sowas? Wozu ist die Schleife gut?

Zitat:

hab es so programmiert, aber stehe immer noch vor dem gleichen Problem, beim click auf dem button bleibt die frage + Antworten immer die gleichen und zeigt nicht die nächsten an..
Ich vermute das der Buttonclick in die Schleife gehören soll
Code:
repeat
  hole Frage
until button=Abbruch
Hat da nicht jemand etwas von Struktogramm geschrieben??

Es gibt zwei Möglichkeiten.
a) Alle Fragen/Antworten aus der DB in eine Liste/Array... laden und die Fragen dann nacheinander aus der Liste laden.
b) Jeweils eine Frage aus der DB laden, wobei es dann eine Numerierung oder ähnliches der Fragen geben mßte.
(select irgendwas where Fragenr=x and .....)

So mal ganz grob skizziert.

Gruß
K-H

mmw 9. Mär 2020 21:19

AW: Datenbank- Quiz programmieren
 
ich habs mal so versucht, im prinzip habe ich nicht viel verändert


procedure TFormle.ButtonnextClick(Sender: TObject);

function ist_leer: boolean;

begin
result := datamodule1.ADOQuery6.IsEmpty;
end;

function open_query: boolean;

begin
try
if datamodule1.ADOQuery6.Active = true then
result := true
else

begin
datamodule1.ADOQuery6.SQL.Clear;
datamodule1.ADOQuery6.SQL.Text :='SELECT Frage, L1, L2, L3 FROM Fragen WHERE Fach = ' + #39 + Lb.Items.Strings[Lb.ItemIndex] + #39 + ' AND Schwierigkeit="1";';
datamodule1.ADOQuery6.Active := true;
datamodule1.ADOQuery6.First;

first_open := true;//TFormle private deklariert

result := true;
end;

except
result := false;
end;
end;

procedure set_caption;

begin
rg.caption := '';
rg.caption := datamodule1.ADOQuery6.Fields[0].AsString;
// Antworten in Radiobuttons
rg.Items.Clear;
rg.Items.Add(datamodule1.ADOQuery6.Fields[1].AsString);
rg.Items.Add(datamodule1.ADOQuery6.Fields[2].AsString);
rg.Items.Add(datamodule1.ADOQuery6.Fields[3].AsString);
end;


begin

if Lb.ItemIndex >= 0 then

begin

if open_query = false then exit

else

if ist_leer = true then begin
showmessage('Keine Daten');
exit
end

else

begin

rg.Visible := true;
if first_open = true then

begin
set_caption;
first_open := false;
end

else

begin
datamodule1.ADOQuery6.Next;
set_caption;
end;
end;
end

else

application.MessageBox('Auswahlfehler!', 'Fehler');

end;

keine Garantie

Gruß

TurboMagic 9. Mär 2020 22:23

AW: Datenbank- Quiz programmieren
 
Habe mal einen teil deines Codes oben ausgelassen (der aber natürlich nötig ist) und meine Vermutung des
Problems als Kommentar unten eingefügt:

Zitat:

Zitat von Reedx (Beitrag 1459179)

Delphi-Quellcode:
     while not Datamodule1.ADOQuery6.Eof do
     begin
       Datamodule1.ADOQuery6.Next;

       //Frage in "Titel"
       rg.Caption:= Datamodule1.ADOQuery6.Fields[0].AsString;
       //Antworten in Radiobuttons
       rg.Items.Clear;
// Hier gibst du nochmal das, was du schon in die Caption geschrieben hast
// im ersten Radiobutton aus. Wirklich ADOQuery6 und nicht 7?
// Vielleicht würde es auch helfen diese Queries besser zu benennen?
// z.B. aus ADOQuery6 ein ADOQuestionQuery und aus der 7 ein ADOAnswerQuery zu machen?
// dnan kannst du die schlechter verwechseln
       rg.Items.Add(Datamodule1.ADOQuery6.Fields[0].AsString);
       rg.Items.Add(Datamodule1.ADOQuery6.Fields[1].AsString);
       rg.Items.Add(Datamodule1.ADOQuery6.Fields[2].AsString);
    end;
 
 
  end else
  begin
  application.MessageBox('Auswahlfehler!','Fehler');
  end;


DieDolly 9. Mär 2020 22:26

AW: Datenbank- Quiz programmieren
 
Ich hab mnir den Code da oben nicht lange angeguckt. Spätestens hier habe ich abgebrochen und ihn für mich als nicht verwendbar für Anfänger eingestuft
Delphi-Quellcode:
if datamodule1.ADOQuery6.Active = true then

haentschman 10. Mär 2020 07:06

AW: Datenbank- Quiz programmieren
 
Moin...8-)
Zitat:

Bin ich irgendwie unsichtbar oder sowas? Wozu ist die Schleife gut?
+1 :thumb:

Die Schleife ist Blödsinn. :roll:
Auch mmw hat das erkannt...8-) Wie man das codetechnisch ausführt ist relativ egal...aber schön soll es sein. :lol:

Ablauf PLAN:
1. Form Show
2. Daten laden -> Query Open (der Datensatzzeiger steht dann auf dem Ersten)
3. 1. Frage anzeigen
4. 1. Frage ausfüllen
5. Button drücken für nächste Frage -> Query.Next
6. 2. Frage anzeigen
7. 2. Frage ausfüllen
8. Button drücken für nächste Frage -> Query.Next
...usw. :wink:

Klaus01 10. Mär 2020 07:30

AW: Datenbank- Quiz programmieren
 
Guten Morgen,

Delphi-Quellcode:
procedure TFormle.ButtonnextClick(Sender: TObject);
var
  rb: TRadioButton;
begin
 if lb.ItemIndex >=0 then
 begin
    rg.Visible:=true;
    Datamodule1.ADOQuery6.SQL.Clear;
    Datamodule1.ADOQuery6.SQL.Text:='SELECT Frage, L1, L2, L3 FROM Fragen WHERE Fach = ' +#39+lb.Items.Strings[lb.ItemIndex]+#39 +
                                    ' AND Schwierigkeit="1";';
    Datamodule1.ADOQuery6.Open;

     if Datamodule1.ADOQuery6.Eof then
     begin
       showmessage('Keine Daten');
     end else
     begin
          //Frage in "Titel"
         rg.Caption:= trim(Datamodule1.ADOQuery6.FieldByName('Frage').AsString);
         //Antworten in Radiobuttons
         rg.Items.Clear;
         rg.Items.Add(trim(Datamodule1.ADOQuery6.FieldByName('L1').AsString));
         rg.Items.Add(trim(Datamodule1.ADOQuery6.FieldByName('L2').AsString));
         rg.Items.Add(trim(Datamodule1.ADOQuery6.FieldByName('L3').AsString));
         Datamodule1.ADOQuery6.Next;
     end;
  end else
  begin
    application.MessageBox('Auswahlfehler!','Fehler');
  end;
so wird etwas dargestellt.
trim - weil bei jedem Feld ein #9 als erstes Zeichen steht.
Warum auch immer.
FieldByName habe ich gewählt - weil es lesbarer ist als die Indexe.

Das Problem das immer nur der erste Datensatz gelesen wird, das wurde ja schon angesprochen.

Grüße
Klaus

haentschman 10. Mär 2020 07:39

AW: Datenbank- Quiz programmieren
 
Moin...8-)
...ob das so gemeint ist? :gruebel:

Du holst dir in jedem ButtonNext Click die kompletten Daten, läufst die Schleife bis zum Ende durch...und dann? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 Uhr.
Seite 5 von 7   « Erste     345 67      

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