Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Schwierigkeitsgrad, aber wie!? (https://www.delphipraxis.net/24680-schwierigkeitsgrad-aber-wie.html)

aerotech 24. Jun 2004 13:07


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;

shmia 24. Jun 2004 13:24

Re: Schwierigkeitsgrad, aber wie!?
 
Zitat:

Zitat von aerotech
Hi, weiß einer, wie ich den Schwierigkeitsgrad meiner Quizfragen ändern kann!?
Also, ich habe 3 Tabellen (quizfragen_leicht, quizfragen_mittel, quizfragen_schwer)

Die Fragen in 3 Tabellen zu verteilen war schon ein Design-Fehler !!!
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:
SELECT * FROM quizfragen WHERE Schwierigkeit>=:s1 AND Schwierigkeit<=:s2
:s1 und :s2 sind Parameter und werden zur Laufzeit gesetzt.
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)

Sharky 24. Jun 2004 13:25

Re: Schwierigkeitsgrad, aber wie!?
 
Zitat:

Zitat von aerotech
...Also, ich habe 3 Tabellen (quizfragen_leicht, quizfragen_mittel, quizfragen_schwer)
..

Hai aerotech,

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.

GuenterS 24. Jun 2004 13:32

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.

aerotech 24. Jun 2004 15:38

Re: Schwierigkeitsgrad, aber wie!?
 
Zitat:

Zitat von shmia
Zitat:

Zitat von aerotech
Hi, weiß einer, wie ich den Schwierigkeitsgrad meiner Quizfragen ändern kann!?
Also, ich habe 3 Tabellen (quizfragen_leicht, quizfragen_mittel, quizfragen_schwer)

Die Fragen in 3 Tabellen zu verteilen war schon ein Design-Fehler !!!
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:
SELECT * FROM quizfragen WHERE Schwierigkeit>=:s1 AND Schwierigkeit<=:s2
:s1 und :s2 sind Parameter und werden zur Laufzeit gesetzt.
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)

wie kann ich eine query in mein delphi projekt einbauen? was muss ich dabei beachten?
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:

Sharky 24. Jun 2004 16:29

Re: Schwierigkeitsgrad, aber wie!?
 
Hai aerotech,

Zitat:

Zitat von aerotech
....Ne kleine Anleitung wäre nett :thuimb:

Delphi-Quellcode:
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;
Gibt dir einen Bereich zurück. Wenn Du immer nur einen Schwierigkeitsgrad abfragen möchtest:
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;

aerotech 24. Jun 2004 17:17

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:
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;
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.

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;

aerotech 25. Jun 2004 17:13

Re: Schwierigkeitsgrad, aber wie!?
 
plss help! :angle2:

MarkusB 25. Jun 2004 20:49

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:
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
Viele Grüße
Markus
:gruebel:

aerotech 26. Jun 2004 15:22

Re: Schwierigkeitsgrad, aber wie!?
 
http://forum.funnypage.info/ja.jpg

watt nu? (cursor steht hinter "do")


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 Uhr.
Seite 1 von 2  1 2      

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