Autor Beitrag
m-s
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Do 09.06.11 15:31 
Ich möchte, mit VS und C#, einen großen Fragekatalog erstellen und die Antworten in einer Datenbank (sdf) speichern.
Ich frage mich wie man am besten mit vorgefertigten Antworten umgeht.

Also mal als Beispiel:

Frage:
Welcher Tag ist heute?

Antworten:
Montag
Dienstag
Mittwoch
Donnerstag
Freitag
Samstag
Sonntag
"Freier Text den der Antwortende sich ausdenken kann"


Ich habe mehrere Ansätze im Kopf, die mir aber alle halbgar vorkommen. Wie würdet Ihr sowas lösen?

_________________
Gruß Markus
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 09.06.11 19:16 
ausblenden C#-Quelltext
1:
2:
3:
string question;
List<string> answers;
bool allowsFreeTextAnswer;

:) ?

_________________
>λ=
m-s Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Do 09.06.11 23:34 
Ich merk schon, wieder schlecht gefragt.

Mit Objekten meinte ich die KlickiBunti in VS.
Wie frage ich besser?

Also ich erstelle ne Tabelle mit nem String und der Frage. Sind die Antworten dann auch in der Tabelle (also viele string die ich dann in eine ComboxBox lade) oder nehme ich ne andere Tabelle auf die ich dann mit der ComboBox referenziere? Wenn ich nen Databinding auf ne Combobox machen kann ich keinen Freitext eingeben sondern nur das auswählen was aus der Datenbank kommt. Ist die ComboBox das falsche für den Job? Macht man die ComboBox nur als Füllinstrument für eine nebenstehendes Datenbankfeld (Textfeld) in das dann die in der Combobox ausgewählten Werte übernommen oder eben der Freitext reingeschrieben und dann in der Datenbank wieder als string gespeichert wird?

Ich hoffe die Frage machen besser mein niedriges Niveau klar :)

_________________
Gruß Markus
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Fr 10.06.11 09:37 
Mach doch zwei tabellen in der Datenbank
Tabelle 1:
-ID
-Frage

Tabelle 2:
-ID (Fremdschlüssel von Tabelle 1)
-Antwortmöglichkeit


Ist eine 1:n-Beziehung weil eine Frage mehrere Antwortmöglichkeiten besitzt.
(Es seiden einige Antwortmöglichkeiten kommen in mehreren Fragen vor, dann wäre es eine m:n-Beziehung dann benötigst du noch bei tabelle 2 eine ID spalte (der Fremdschlüssel entfällt) und eine 3. Tabelle die die beiden Tabellen 1 und zwei verknüpft)
Ich hoffe das ist einigermaßen verständlich ?!
m-s Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Fr 10.06.11 11:15 
Ja einigermaßen kann ich das verstehen. Ich habe auch Programme geschrieben die mit entsprechenden Tabellen und Relationen arbeiten. Nur so richtig weiß ich immer noch nicht wie ichs machen soll.

Ich habe in dem Katalog 12 Fragen mit vorgefertigten Antworten (und Freitext), nen Haufen Tabellen müsste ich anlegen?
Auch weiß ich gar nicht welchen Vorteil das bringt. Wenn ich die Antworten direkt in die ComboBoxen schreibe habe ich den gleiche Effekt muss aber keine zusätzlichen Tabellen anlegen?
Außerdem habe ich es bisher bei einer ComboBox die an eine Datenbank gebunden ist nicht hingekommen Freitext einzugeben.

Ich denke ja immer noch das es bestimmt ein tolles Objekt für solche Aufgaben gibt und ich es nur nicht kenne :)

_________________
Gruß Markus
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Fr 10.06.11 11:25 
Wieso haufen Tabellen anlegen,
in dem Beispiel von mir, brauchst du entweder 2 oder 3 Tabellen in der Datenbank
in Tabelle 1. Schreibst du deine Fragetext etc. rein
(das heißt in Tabelle eins hast du dann 12 Datensätze (12 Fragen)
und in Tabelle zwei hast du dann zum Beispiel drinne stehen

Montag Zusatzinfo Fragen_Id=> damit kannst du deinen Fragen mehrere Antworten zuweisen.

Das heißt wenn du immer 4 Antworten hättest, wären es in der Antworttabelle 4x12 Datensätze (48)

Das wäre das Beispiel A.
wenn du allerdings eine Antwort auch mehreren Fragen zuordnen kannst brauchst du 3 Tabellen:
eine die beiden oben bleiben fast gleich bis auf die Antworttabelle eine ID Spalte bekommt. (und der Fremdschlüssel kommt raus)
und in eine dritte Tabelle werden die Fragen und Antworten verknübbert.
also steht praktisch in der dritten Tabelle
FragenID|AntwortID
das gilt wie gesagt nur wenn eine Antwort auf zwei Fragen zutrifft.
m-s Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Fr 10.06.11 12:14 
Ja verstehe. Vorteil gegenüber der Integration der Antworten direkt in die ComboBox wäre, einen entsprechenden "Editor" vorausgesetzt, die Leute können sich die vorgefertigten Antworten erweitern/anpassen.

Denk ich drüber nach.

Was mir immer noch fehlt, wie bekommen die Antwortenden den Freitext in die ComboBox die an eine Datenbank gebunden ist?

Derzeit würde ich es wohl so machen, dass ich ein Textfeld für die Antworten mache und die Leute können dort entweder reinschreiben oder aus der ComboBox vorgefertigte Antworten ergänzen, ohne sie schreiben zu müssen. Das Textfeld speichere ich dann in die Datenbank.

Ist das zu sehr um die Ecke gedacht?

_________________
Gruß Markus
Jumper07
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Fr 10.06.11 12:55 
Wenn die von dem Anwender gegebene Antwort zu deinen vorgegebenen hinzugefügt werden soll, kannst du das so machen - allerdings birgt das die Gefahr unqualifizierter Antworten.

Alternativ könnte man auch eine Tablle erstellen z.B. "Benutzerdefinierte_Antworten" mit "Id" und "Beschreibung" als Spalten, die du mit der Fragen-Tabelle verknüpfst(zusätzliche Spalte mit Referenz zu Fragentabelle).
So kannst du zum einen alle benutzerdefinierten Antworten zu den Fragen sammeln und zum anderen die ursprünglich vorgegebenen unverändert lassen.

Das ist Vorteilhaft, wenn du bei jedem Neuaufruf nur die vorgegebenen angezeigt haben möchtest, aber dennoch in der DB auch andere gespeichert haben möchtest.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 10.06.11 13:02 
Soll das Ding später erweiterbar oder einfach veränderbar sein?

Ich habe sowas vor einiger Zeit für eine Webseite gemacht, in der die Profilfragen sehr flexibel sein mussten. Ergebnisse waren folgende Tabellen:
1. Fragentabelle mit Fragetext und dem Typ der Frage (Eingabe, Auswahl, Mehrfachauswahl, Liste, Ja/Nein) als Integer, wurde nachher gemapped auf ein Enum
2. FrageAntwortentabelle mit den Antworten zu jeder der Frage, soweit vorhanden
3. Antwortentabelle, verknüpft mit Fragen und FragenAntworten, in der die eigentlich Auswahl des Benutzers protokolliert wurde

Die Oberfläche wurde dann natürlich dynamisch aufgebaut. Ich iterierte durch die anzuzeigenden Fragen durch und abhängig vom Typ erzeugte ich ein eigenes UserControl, dem ich die Antwortdaten übergeben habe. Beim Speichern habe ich Antwort-Daten aus dem UserControl wieder eingesammelt und in die Datenbank gespeichert.

So ist zwar einiges an Code aufgelaufen, aber dafür kann ich jedes Feld sehr flexibel verändern oder auch ganz neue Fragen hinzufügen.
m-s Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Fr 10.06.11 17:00 
user profile iconUGrohne hat folgendes geschrieben Zum zitierten Posting springen:
Soll das Ding später erweiterbar oder einfach veränderbar sein?

Ich habe sowas vor einiger Zeit für eine Webseite gemacht, in der die Profilfragen sehr flexibel sein mussten. Ergebnisse waren folgende Tabellen:
1. Fragentabelle mit Fragetext und dem Typ der Frage (Eingabe, Auswahl, Mehrfachauswahl, Liste, Ja/Nein) als Integer, wurde nachher gemapped auf ein Enum
2. FrageAntwortentabelle mit den Antworten zu jeder der Frage, soweit vorhanden
3. Antwortentabelle, verknüpft mit Fragen und FragenAntworten, in der die eigentlich Auswahl des Benutzers protokolliert wurde

Die Oberfläche wurde dann natürlich dynamisch aufgebaut. Ich iterierte durch die anzuzeigenden Fragen durch und abhängig vom Typ erzeugte ich ein eigenes UserControl, dem ich die Antwortdaten übergeben habe. Beim Speichern habe ich Antwort-Daten aus dem UserControl wieder eingesammelt und in die Datenbank gespeichert.

So ist zwar einiges an Code aufgelaufen, aber dafür kann ich jedes Feld sehr flexibel verändern oder auch ganz neue Fragen hinzufügen.

Also im Prinzip bräuchte ich schon diese Variante, weil es verschiedene Fragekataloge in der Software geben soll. Allerdings habe ich doch reichlich Respekt vor dieser Lösung, weil es mir einfach doch für meinen Wissensstand zu komplex erscheint. Es sollen später auch die Ergebnisse gedruckt werden usw.. Ich müsste dann alle Funktionen dynamisch aufbauen und vermutlich noch dem Anwender die Möglichkeit geben eine Kataloge selbst aufzubauen bzw. zu ändern.

Ich dachte ich hebe mir die "vollautomatische" Variante dann für Version 2 auf. In zwei Jahren weiß ich hoffentlich mehr und habe auch mehr Erfahrungen gemacht. Vorerst wollte ich zwei Fragenkataloge in die Software einbauen, die weitgehend fest gezimmert sind. Pro Katalog sind es ca. 100 Fragen, 12 davon Auswahl + Freitext, viele Freitexte und einige Ja/Nein.

Ich habe mir ja schon die Oberfläche für den ersten Katalog geklöppelt mit mehreren UC die über einen Treeview aufgerufen werden.
Jetzt gehts an die Erstellung der Datenbank für den ersten Katalog und da kam ich ins Stocken.

Aber ich denke ich werde das so machen, jeden Auswahlfrage bekommt eine festgefüllte ComboBox und ein Textfeld welches dann über ComboBox oder Eingabe gefüllt werden kann und gespeichert wird. Die anderen Felder gehen auch direkt in die Datenbank. Damit müsste ich klar kommen.

Ist die von Dir erwähnte Datenbank öffentlich zu sehen? Würde mich ja mal interessieren wie das aussehen kann, wenn man's kann :)

_________________
Gruß Markus