![]() |
AW: Datenbank- Quiz programmieren
Bin ich irgendwie unsichtbar oder sowas? Wozu ist die Schleife gut?
|
AW: Datenbank- Quiz programmieren
Zitat:
|
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 .... |
AW: Datenbank- Quiz programmieren
Zitat:
Zitat:
Code:
Hat da nicht jemand etwas von Struktogramm geschrieben??
repeat
hole Frage until button=Abbruch 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 |
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ß |
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:
|
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
|
AW: Datenbank- Quiz programmieren
Moin...8-)
Zitat:
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: |
AW: Datenbank- Quiz programmieren
Guten Morgen,
Delphi-Quellcode:
so wird etwas dargestellt.
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; 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 |
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. |
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