VisualBasic Fragen aus Tabelle generieren ohne doppelte Wiedergabe

smathero1

Lt. Junior Grade
Registriert
Apr. 2005
Beiträge
319
Hallo Leutz,

ich habe mal eine Frage. Ich programmiere gerade eine Datenbank in der eine Tabelle mit Fragen und Antworten hinterlegt ist. Nun soll in einem Formular diese Fragen abgefragt werden. Diese Frage soll aber nur einmal auftauchen und nicht doppelt abgefragt werden. Habt ihr vielleicht eine Idee wie ich das hinbekommen könnte ohne das eine Frage doppelt vor kommt? Hab schonmal was von einem Array gehört hab aber keine Ahnung wie ich das programmieren soll.

Danke schonmal im vorraus für eure Antworten.
 
Wenn du eine SQL-Datenbank verwendest, kannst du die Fragen zufällig sortieren lassen und dann Frage für Frage auslesen:
Code:
SELECT * FROM fragen ORDER BY RAND();
Ansonsten liest du alle Fragen in ein Array, wie du schon gesagt hast, würfelst es durcheinander und liest es wieder aus. Um eine genauere Antwort geben zu können, fehlt ein wenig das Wissen, wie deine Daten abgelegt sind.
 
Zuletzt bearbeitet:
Ich möchte noch anmerken dass die Lösung über die Datenbank nicht mit allen Datenbanken funktioniert (zumindest nicht out-of-the-box).

Die Implementierung hängt natürlich von der gewählten Sprache ab. Daher wäre es sinnvoll, wenn du etwas mehr dazu schreiben würdets, wo die Daten herkommen, womit sie verarbeitet werden sollen etc, usw.

Der Weg über ein Array, eine Liste ö.ä. ist in jedem Fall der bessere.

Grundsätzlich gibt es dabei 2 Möglichkeiten:
Da gibt es die vom junkie vorgeschlagene Variante das Array an sich durcheinanderzuwürfeln, oder per Zufall Einträge aus dem (nicht randomisierten) Array zu selektieren.

Welche von beiden Varianten für dich die richtige ist, hängt auch davon ab, wie viele Einträge du per Zufall auswählen willst, wie viele Einträge es insgesamt sind, etc.

Gruß
 
hallo ihr beiden danke für eure schnellen antworten. also die fragen kommen aus einer tabele worin 6 spalten sind die spalten bezeichnung ist wie folgt. ID - quest - reply_1 - reply_2 - reply_3 - reply
diese replys_1;_2;_3 stehen für antwort möglichenkeiten. in der spalte reply ist eine zahl eingegebn von 1 - 3 (bezieht sich welche antwort die richtige ist).
nun habe ich ein formular der diese daten auslesen soll. auf dem formular steht dann die frage und die 3 antwort möglichkeiten unten soll man dann eine nummer eingeben welche antwortmöglichkeit die richtige ist.
jetzt sollen die fragen zufällig aus dieser tabelle rausgesucht werden aber nicht doppelt vorkommen.

ich habe hinbekommen das er mir zufällig fragen raussucht aber leider nimmt er auch dann die selben nochmal also werden fragen doppelt rausgesucht.

die genaue anzahl der fragen kann ich dir nicht sagen weil es kommen immer mehr fragen dazu.

mh vielleicht habt ihr eine antwort. aber danke schonmal für eure hilfe.
 
Generell muss ich sagen, dass ich mit VB nicht so wirklich toll auskenne, aber vieleicht geht das ja auch grundlegend.

Wenn ich dich richtig verstanden habe, so willst du in einem Durchlauf nur einen Teil der möglichen Fragen stellen, welche jedoch per Zufall ausgewählt und nicht doppelt vorkommen sollen.

In dem Fall würde ich dir dazu raten, die Fragen per Zufall aus einem Array / Liste zu selektieren. Gerade wenn dein Bestand an Fragen wächst, wäre eine komplette Randomisierung aller zur Auswahl stehenden Fragen ein wenig zu aufwendig.

Wie gesagt, mit VB habe ich praktisch keine Erfahrungen, daher kann ich dir nicht sagen, wie du ein Resultset der Datenbank in ein Array quetschen kannst. Auch weiß ich nicht, wie man Zufallszahlen in VB generiert. Ich schreib mal ein bisschen pesudo-code, in der hoffnung dass du verstehst was ich meine.

Die Methode gibt dir ein Array von IDs zufällig ausgewählter Fragen zurück. Keine Frage wird mehrfach ausgewählt.

Code:
public int[] (int anzahlFragen)
{
   var selektierteIDs = new int[anzahlFragen];                       // hier drin landen die von dir gewünschten IDs

   int resultset[] = SELECT ID FROM fragen;

   for(int i = 0; i < anzahlFragen; i++)
   {
      int selectedIndex = random(0, resultset.length - i - 1);        // selectedIndex beinhaltet eine zahl zwischen 0 und der anzahl noch nicht benutzter fragen
      int frage = result[selectedIndex];                              // frage beinhaltet die ID einer zufälligen frage
      selektierteIDs[i] = frage;                                      // speichern der gefunden zufälligen frage im rückgabe-array
      resultset[selectedIndex] = resultset[resultset.length - i - 1]; // tauschen des selektierten elements im array mit dem letzten
   }

   return selektierteIDs;
}

Ich hoffe du hast so ungefähr verstanden was der Code oben macht. Wenn nicht, einfach fragen.
 
Zurück
Oben