willekeurige rij uit een databank halen

Status
Niet open voor verdere reacties.

Kai Nickson

Nieuwe gebruiker
Lid geworden
3 mrt 2009
Berichten
3
Yu, Folks

Ik zit met een kleine probleempje ivb met het werken in VB.NET met databanken.
Ik maak een soort van Quiz en het is de bedoeling dat er at random een vraag uit de tabel vragen word gehaald en dat daarvan de gegevens toegekend worden aan een variabele.

Dit is de code tot nu toe heb gevonden:
Code:
 Dim rndfoutantwoord1 As String
    Dim rndfoutantwoord2 As String
    Dim rndfoutantwoord3 As String
    Dim rndjuistantwoord As String

'De variabelen worden gedeclareerd
        Dim rows As Int32
        Dim vraaggenereren As Integer

' Er word berekend hoeveel rijen er in de tabel Vragen staan
        rows = HielQuizDataSet.Tables(0).Rows.Count

        'Er word een willekeurig getal gegenereerd om een vraag uit de databank te kiezen
        Randomize()
        vraaggenereren = Int((rows * Rnd()) + 1)
        Me.VragenTableAdapter.FillByNummer(vraaggenereren)

'de gegevens uit de databank worden aan variabelen toegekend
        rndfoutantwoord1 = 1stefoutantwoorduitdatabank
        rndfoutantwoord2 = 2defoutantwoorduitdatabank
        rndfoutantwoord3 = 3defoutantwoorduitdatabank
        rndjuistantwoord = juistantwoorduitdatabank

Dat laatste stuk heb ik er hier bijgeschreven omdat ik dus niet weet hoe ge variabelen de waarde geeft van een cel uit een databank.

Ook van het stuk
Code:
rows = HielQuizDataSet.Tables(0).Rows.Count
weet ik dat het niet werkt mar dat is de code die het dichts bij het juiste resultaat leund die ik al heb gevonden

Dank bij voorbaad,
Kai
 
Weet niet wat je precies aan het doen bent, maar als zo iets zou doen, zou ik met Arrays werken, of je kan met structures werken
Array methode:
Code:
Module Module1
    Const VragenAantal As Integer = 2
    Dim Vragen(0 To VragenAantal - 1) As String
    Dim Antwoorden(0 To VragenAantal - 1, 0 To 3) As String
    Dim GoedeAntwoord(0 To VragenAantal - 1) As Integer
    Dim GoedeAntwoorden As Integer
    Dim SlechteAntwoorden As Integer
    Sub Main()
        GenerateQandA()
        For Vraag = 0 To VragenAantal - 1
            Vraagiets(Vraag)
        Next
        Console.WriteLine("Goede antwoorden: " & GoedeAntwoorden.ToString)
        Console.WriteLine("Slechte antwoorden: " & SlechteAntwoorden.ToString)
        Console.ReadLine()
    End Sub
    Function Vraagiets(ByVal Vraag As Integer) As Boolean
        Console.WriteLine(Vragen(Vraag))
        For X = 0 To 3
            Console.WriteLine(Chr(X + 65) & ": " & Antwoorden(Vraag, X))
        Next
        Dim antwoord As String = LCase(Console.ReadLine)
        If antwoord.Length = 1 Then
            If Int(Asc(antwoord) - 97) = GoedeAntwoord(Vraag) Then
                Console.WriteLine("Dat is goed")
                GoedeAntwoorden += 1
            Else
                Console.WriteLine("Dat is fout")
                SlechteAntwoorden += 1
            End If
        Else
            WriteLine("Dit is geen goed antwoord")
        End If
    End Function
    Sub GenerateQandA()
        'Vraag 0
        Vragen(0) = "Wat is 3 + 2?"
        Antwoorden(0, 0) = "3"
        Antwoorden(0, 1) = "4"
        Antwoorden(0, 2) = "5"
        Antwoorden(0, 3) = "6"
        GoedeAntwoord(0) = 2
        'Vraag 1
        Vragen(1) = "Wat is het Nederlandse word voor 'Yes'?"
        Antwoorden(1, 0) = "Oui"
        Antwoorden(1, 1) = "Wel"
        Antwoorden(1, 2) = "Si"
        Antwoorden(1, 3) = "Ja"
        GoedeAntwoord(1) = 3
        'Etc.
    End Sub
End Module


Of je doet het met structures:
Code:
Module Module1
    Dim Vragen(0 To 1) As Vraag
    Public Structure Vraag
        Dim Vraag As String
        Dim Antwoorden() As String
        Dim GoedeAntwoord As Integer
    End Structure
    Sub Main()
        Vragen(0).Vraag = "Wat is 3 + 2?"
        Vragen(0).Antwoorden(0) = "3"
    End Sub
End Module
Enz. was te lui om het af te maken :P
 
Weet niet wat je precies aan het doen bent, maar als zo iets zou doen, zou ik met Arrays werken, of je kan met structures werken
Array methode:
...

Enz. was te lui om het af te maken :P

Ik was begonnen vanuit het idee om met arrays te werken maar men zij mij dat dat makkelijker kon. In ieder geval moet het programma werken via een databank en dat gebeurd precies niet in bovenstaande code:confused:
het grootste probleem is vooral dat ik een code zoek om:
-het aantal rijen in de tabel "Vragen" te berekenen en die waarde aan een variabele toe te kennen.
-een willekeurige rij uit de tabel "Vragen" uitkiezen en de waarden daaruit toekennen aan de respectievelijke variabelen
 
Maak je database structuur op deze manier

6eowfa.jpg


Maak een form onderstaande controls

191mc4.jpg


Kopieer het stukje code en probeer het eens uit. Want het kan allemaal een stuk makkelijker met 1 LINQ statement

Code:
Public Class Form1

    Dim Antwoord As String

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim db As New Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\vragen.mdb")
        Dim dt As New DataTable
        Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM tabel1", db)

        da.Fill(dt)

        Dim Items As EnumerableRowCollection(Of DataRow) = From Item In dt 'LINQ

        Dim Rand As New Random
        Dim RandomNumber As Integer = Rand.Next(0, Items.Count) 'Maak Randomgetal(Min,Max)

        Label1.Text = Items(RandomNumber).Item(1).ToString()
        RadioButton1.Text = Items(RandomNumber).Item(2).ToString
        RadioButton2.Text = Items(RandomNumber).Item(3).ToString
        RadioButton3.Text = Items(RandomNumber).Item(4).ToString
        RadioButton4.Text = Items(RandomNumber).Item(5).ToString

        Antwoord = Items(RandomNumber).Item(6).ToString

    End Sub

End Class
 
Maak je database structuur op deze manier

6eowfa.jpg


Maak een form onderstaande controls

191mc4.jpg


Kopieer het stukje code en probeer het eens uit. Want het kan allemaal een stuk makkelijker met 1 LINQ statement

Bedankt voor de uitleg ik ben er een stuk verder mee gekomen:(. De code die ik nu heb gaat als vlogt:

Code:
Dim MSAccessConnection As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source= C:\Users\Kai Nickson\Documents\GIP\Progameren\VBGIP\HielQuiz\HielQuiz\HielQuiz.mdb")
        MSAccessConnection.Open()


        Dim strSQL As String = "SELECT COUNT(*) AS MYCOUNT FROM Vragen"
        Dim myCmd As New OleDb.OleDbCommand
        Dim myReader As OleDb.OleDbDataReader
            With myCmd
                .Connection = MSAccessConnection
                .CommandText = strSQL
                myReader = .ExecuteReader
                If myReader.Read Then

                    Dim intCount As Integer = myReader("MYCOUNT")
                End If
            End With
            myReader.Close()

        Dim myReadertwo As OleDb.OleDbDataReader
            With myCmd
                .Connection = MSAccessConnection
                .CommandText = strSQL
            myReadertwo = .ExecuteReader
            Do While myReadertwo.Read
                Dim getvraag As String = myReadertwo("Vraag")
                Dim getfoutantwoord1 As String = myReadertwo("Fout antwoord 1")
                Dim getfoutantwoord2 As String = myReadertwo("Fout antwoord 2")
                Dim getfoutantwoord3 As String = myReadertwo("Fout antwoord 3")
                Dim getjuistantwoord As String = myReadertwo("Juist antwoord")
                Dim getafbeelding As String = myReadertwo("afbeelding")
            Loop
        End With
        myReadertwo.Close()

Ik krijg aleen nog een foutmelding op het moment dat hij aan "Dim getvraag As String = myReadertwo("Vraag")" begind" en dan stopt de debugger.
Enig idee?
 
zet er eens een try-catch-endtry omheen en meld eens wat voor error het is.

Code:
try

                Dim getvraag As String = myReadertwo("Vraag")
                Dim getfoutantwoord1 As String = myReadertwo("Fout antwoord 1")
                Dim getfoutantwoord2 As String = myReadertwo("Fout antwoord 2")
                Dim getfoutantwoord3 As String = myReadertwo("Fout antwoord 3")
                Dim getjuistantwoord As String = myReadertwo("Juist antwoord")
                Dim getafbeelding As String = myReadertwo("afbeelding")

catch ex as exeption
msgbox(ex.message)
end try
 
Heeft er iemand een volledige code/voorbeeld in VB van een werkende Multiple choice quiz?

waar gebruik wordt gemaakt van een database met de vragen en antwoorden in.

Bedankt
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan