![]() |
Schwierigkeitsgrad, aber wie!?
Hi, weiß einer, wie ich den Schwierigkeitsgrad meiner Quizfragen ändern kann!?
Also, ich habe 3 Tabellen (quizfragen_leicht, quizfragen_mittel, quizfragen_schwer) Jetzt würde ich gerne einstellen, das die ersten 5 Fragen aus der leichten Tabelle entnommen werden, die nächsten 4 aus der mitleren, und die letzen 6 aus der schweren TB. So arbeitet das Prog im Moment,...hoffe ihr könnt mir helfen! :)
Delphi-Quellcode:
procedure TForm1.DBText1Click(Sender: TObject);
begin if tquizfragen.FieldByName('L1').AsInteger = 1 then begin tquizfragen.first; tquizfragen.moveby(random(tquizfragen.RecordCount)); Stufen; // Führt die Prozedur "Stufen" aus, zu finden in // Zeile 88. end else Form4.Show; end; |
Re: Schwierigkeitsgrad, aber wie!?
Zitat:
Du musst alle Fragen in einer Tabelle unterbringen und diese Tabelle zusätzlich um das Feld "Schwierigkeit" erweitern. (Schwierigkeit = 1: leicht, Schwierigkeit = 5: super schwer) Du verwendest statt einer TTable-Komponente dann eine TQuery-Komponente. Die SQL-Anweisung sieht so aus:
SQL-Code:
:s1 und :s2 sind Parameter und werden zur Laufzeit gesetzt.
SELECT * FROM quizfragen WHERE Schwierigkeit>=:s1 AND Schwierigkeit<=:s2
Damit stehen alle Möglichkeiten offen: - Fragen einer Schwierigkeitsstufe - Fragen aus versch. Schwierigkeitsstufen - zuerst einfache Fragen und dann schwierigere Fragen (Query schliesen, Parameter ändern, Query neu öffnen) |
Re: Schwierigkeitsgrad, aber wie!?
Zitat:
warum teilst Du die Fragen auf drei Tabellen auf? Ich würde alle in eine Tabelle schreiben. Dann noch ein Feld für den Schwierigkeitsgrad das z.B werte von 1 bis 3 enthält. |
Re: Schwierigkeitsgrad, aber wie!?
Du könntest auch um das derzeitige Design beizubehalten (würde auch eher ein anderes Design nehmen) den Tabellennamen der Abfrage als Variable definieren und diesen entsprechend verändern.
|
Re: Schwierigkeitsgrad, aber wie!?
Zitat:
Ich will das ein Feld aus einer Datenbank mit Hilfe der Query abgefragt wird. Also wenn ne 1 drin steht, dann sollen später nur noch diese Werte ausgelesen werden. Wo ich den SQL Befehl reinschreiben muss weiß ich schon, und wie dieser lauten muss, weiß ich auch. Ne kleine Anleitung wäre nett :thuimb: |
Re: Schwierigkeitsgrad, aber wie!?
Hai aerotech,
Zitat:
Delphi-Quellcode:
Gibt dir einen Bereich zurück. Wenn Du immer nur einen Schwierigkeitsgrad abfragen möchtest:
procedure TForm1.Button1Click(Sender: TObject);
begin Query1.Close; Query1.SQL.Text := 'SELECT * FROM quizfragen WHERE Schwierigkeit>=:s1 AND Schwierigkeit<=:s2'; Query1.ParamCheck := True; Query1.ParamByName('s1').Value := 1; // Alle Fragen von Schwierigkeitsgrad 1 Query1.ParamByName('s2').Value := 2; // bis Schwierigkeitsgrad 2 Query1.Open; end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin Query1.Close; Query1.SQL.Text := 'SELECT * FROM quizfragen WHERE Schwierigkeit = :s1'; Query1.ParamCheck := True; Query1.ParamByName('s1').Value := 1; // Alle Fragen von Schwierigkeitsgrad 1 Query1.Open; end; |
Re: Schwierigkeitsgrad, aber wie!?
hmmm, ver steh ich nicht ganz...
Also zuerst hatte ich nur eine Datasource und TTable Komponente! TDatasourse DataSet: tquizfragen Name: DataSource_quizfragen TTable DatabaseName: quizfragen Name: tquizfragen TableName: quizfragen Jetzt sagt ihr, ich soll meine 3 Tabellen zu einer komprimieren, sprich alle Fragen da rein schreiben und diese mit einer weiteren Spalte "Schwierigkeitsgrad" erweitern. 1 - 3 sind dann die jeweiligen Inhalte für den Schwierigkeitsgrad. Desweiteren habt ihr gesagt ich soll anstatt einer TTable-Komponente eine TQuery-Komponente, also hab ich diese auch entfernt. Jetzt "TQuery" DatabaseName: quizfragen DataSource: DataSource_quizfragen Name: Query_quizfragen Aber was nun!? Durch diese Veränderung findet meine TDataSource Komponente kein DataSet mehr, und somit wird keine Frage sowie Antwort mehr geholt. :wall: So sehen meine jeweiligen Antwortlabel aus, die man klicken kann, davon habe ich 4 nur jeweil einem anderen Inhalt (L1-L4)
Delphi-Quellcode:
Außerdem habe ich hier noch die Prozedur Stufen die meine Labels nach jeder richtig beantworteten Frage hochzählen soll und in die entsprechende Farbe ~ rot, setzen soll.
procedure TForm1.DBText2Click(Sender: TObject);
begin if tquizfragen.FieldByName('L2').AsInteger = 1 then begin tquizfragen.first; tquizfragen.moveby(random(tquizfragen.RecordCount)); Stufen; // Führt die Prozedur "Stufen" aus, zu finden in // Zeile 88. end else Form4.Show; end;
Delphi-Quellcode:
procedure Stufen;
begin count:= count +1; with Form1 do begin case count of 1: begin Lb_Stufe1.Font.color := clred; Lb_Stufe15.Font.color := clWhite; end; 2: begin Lb_Stufe2.Font.color := clred; Lb_Stufe1.Font.color := clWhite; end; 3: begin Lb_Stufe3.Font.color := clred; Lb_Stufe2.Font.color := clWhite; end; 4: begin Lb_Stufe4.Font.color := clred; Lb_Stufe3.Font.color := clWhite; end; 5: begin Lb_Stufe5.Font.color := clred; Lb_Stufe4.Font.color := clWhite; end; 6: begin Lb_Stufe6.Font.color := clred; Lb_Stufe5.Font.color := clWhite; end; [...] bis 15 end; end; end; |
Re: Schwierigkeitsgrad, aber wie!?
plss help! :angle2:
|
Re: Schwierigkeitsgrad, aber wie!?
Hi aerotech!
Ich habe bemerkt, dass das Gebiet der Datenbank-Programmierung neu für Dich ist. Ich bin zwar auch kein Profi, trotzdem versuche ich mal Dir zu helfen. Erst mal einige allgemeine Bemerkungen: Also generell: in Datenbanken ohne Tabellen geht gar nichts! Du musst deine Daten (in deinem Fall Fragen und Antworten) irgendwo halten. Dazu benutzt man Tabellen. Queries sind so zu sagen eine Betrachtungshilfe. Mit ihnen kannst Du auf Daten einer oder mehreren Tabellen auf unterschiedliche Weise zugreifen (anders gesagt „die Daten aus unterschiedlichen Betrachtungspunkten anschauen“). Dazu muss man auch ein bisschen SQL kennen. Aber wenn Du schon Tabelle(n) mit Daten hast, kannst Du (im Fall einer einfachen Anwendung) auch ohne Queries (d.h. auch ohne SQL) auskommen. Nun zu Deinem Problem: Wie ich Dich verstanden habe, hast Du 3 Tabellen mit Fragen und willst von jeder Tabelle entsprechend 5, 4 und 6 Fragen holen. Ob das vernünftig war, 3 Tabellen statt einer zu definieren, wage ich nicht zu beurteilen. IMO ist - bei einer kleinen (privaten) Quizanwendung, die an die Datenbank so gut wie keine Anforderungen (bezüglich z.B. Performance) stellt - das eigentlich Wurst! Hauptsache ist, dass Du genau weißt welche Daten in welchen Tabelle vorhanden sind. Schwierige Fragen in „quizfragen_schwer“, mittlere Fragen in „quizfragen_mittel“ und einfache Fragen in „quizfragen_leicht“. Ich hoffe, dass folgender „Pseudo-Code“ Dir weiterhelfen wird:
Code:
Viele Grüße
frage_nr := 0
antwort := ok while antwort = ok and frage_nr < 15 do begin frage_nr := frage_nr + 1 case frage_nr of 1..5: hole eine Frage aus der Tabelle Quizfragen_leicht prüfe antwort 6..9: hole eine Frage aus der Tabelle Quizfragen_mittel prüfe antwort else hole eine Frage aus der Tabelle Quizfragen_schwer prüfe antwort end end Markus :gruebel: |
Re: Schwierigkeitsgrad, aber wie!?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 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