Achtung Newbie hat einige Fragen zur Programmierung

HorsemanNo1

Grünschnabel
Hallo zusammen,

ich bin, was VB-Programmierung angeht, relativ unerfahren und möchte jetzt für meine Gruppe von Mitspielern ein Programm entwerfen, was verschiedene Optionen beinhalten muss...

Ich habe als Programmieroberfläche VisualStudio 6.0 Professional. Dort hab ich mich aber hauptsächlich bisher mit VB beschäftigt.

Hier nun meine Fragen, bzw. Probleme:

1. Habe sämtliche Spieler als Checkboxes angelegt. Wenn diese nun ausgewählt werden, sollen die ausgewählten mit Knopfdruck in Spielpaarungen aufgeteilt werden...

2. Da pro Abend mehrere Spiele gespielt werden, sollten die Paarungen nicht doppelt auftauchen...

(Bsp.: Spiel 1: Spieler 1 gegen Spieler 2, Spieler 3 gegen Spieler 4...
Spiel 2: Spieler 2 gegen Spieler 3, Spieler 1 gegen Spieler 4, usw...)

3. Die Punkteverteilung die im Programm eingegeben wird, soll in einer Access-Datenbank festgehalten und gespeichert werden... Diese Datenbank besteht auch bereits...PROBLEM: Da mehrere Turnierleiter dieses Programm haben müssen, kann ich zwar ne .exe-Datei erstellen, aber wie schaffe ich es, das in diesem Programm die Datenbank drin ist und auch andere darauf zugreifen können, bzw. die Datenbank mit der Installationsroutine auch auf deren Rechnern erstellt wird...

4. Ich schaffe es einfach nicht, besagte Datenbank einzubinden...

Ich weiss, das ist ziemlich viel an Problemen, aber ich bin euch für eure Hilfe schonmal im Voraus dankbar.

Gruß HorsemanNo1
 
Hi!

Also:

Zu 1/2.
Schau dir mal die VB-Funktion "Randomize" an. Hiermit kannst du Zufallszahlen erstellen und damit zufällige Paarauslosungen.
Damit beim nächsten Spiel nicht wieder zwei die gleichen gegeneinander antreten, muss du die Werte vom Spiel davor mit den neuen Zufallszahlen vergleichen. Stimmen beide überein muss nochmal neu "gewürfelt" werden.

Zu 3.
Mit den Pack- und Weitergabe-Assisten (unter Addins) kannst du eine Installationsroutine erstellen. Wenn du dich da durchklickst erscheint dann "Enthaltene Dateien". Dort kannst du über hinzufügen deine Datenbank auswählen. Dadurch ist sie mit im Installationspaket.

Zu 4.
Es gibt verschiedene Wege eine Access-DB anzubinden. Hier der Zugriff über ADO:
Unter Projekt > Verweise findest du den Eintrag "Microsoft ActivX Data Object Libary", den klickst du an und bestätigst mit OK. Damit hast du Zugriff auf die Datenbank mit ADO.
Nun der Code:
Code:
'  Im Formular musst du die Variablen setzen (nicht unter Sub!, sonder global)
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset

Code:
'  Im Sub kommt dann folgendes rein
conn.Provider = "Microsoft.Jet.OLEDB.4.0"   '  Bei Access 2000 DB, bei 97 3.51 statt 4
conn.Open "C:\Datenbank\Spiele.mdb"

  Set rs = New Recordset
    
'  ---  Anweisung ----

Weitere Tips zu ADO:
http://www.vbarchiv.net
ADO Grundbeispiel

Bei Fragen (und die kommen jetzt bestimmt ;) ) einfach posten, dann können wir es nochmal Schritt-für-Schritt durchgehen! :-)

Viele Grüße,
Jacka
 
Vielen Dank für die schnelle Antwort, werds mal durchprobieren... falls ich Fragen habe, poste ich es dann...

ansonsten hab ich jetz noch ne Frage, die auch dazugehört... hab die Spieler als Optionsbuttons angelegt, da immer nur die selben spielen... kann ich das, was ich als Caption eingegeben hab (Spielername) an eine textbox übergeben auf einem anderen Formular? und zwar so, dass nur die übergeben werden, wenn der wert, der checkbox auf "True" steht...Wenn ja, wie? und is das dann mit randomize auch noch möglich, wovon du geschrieben hattest...?

Gruß Horseman
 
Hi!

Ja das geht, würde aber zur Listbox greifen. Ich habe hier mal den Code dafür.
Das 1. Formular besteht aus 4 Checkboxen mit Namen und einem Button.
Das 2. Formular besteht aus einer Listbox.

Code:
Private Sub Command1_Click()

    If Check1.Value = 1 Then
        Form2.List1.AddItem Check1.Caption
    End If
  
    If Check2.Value = 1 Then
        Form2.List1.AddItem Check2.Caption
    End If
    
    If Check3.Value = 1 Then
        Form2.List1.AddItem Check3.Caption
    End If
    
    If Check4.Value = 1 Then
        Form2.List1.AddItem Check4.Caption
    End If

End Sub

An dein Stelle würde ich das Programm so flexibel wie möglich halten!
Mal angenommen es kommt noch jemand zur Spielgruppe dazu! Was dann?
Dann müsstest du das Programm ändern, neu kompilieren und und und...

Ich würde es gleich mit einer Listbox machen. Standardspieler kannst du ja in einer text-Datei speichern. Schau dir mal das Beispiel im Anhang an!
Dort kannst du einfach Spieler hinzufügen und löschen, abspeichern und wieder laden.

Randamize / rnd gibt eine Zufallszahl aus, damit du die Spieler auslosen kannst.

Viele Grüße,
Jacka
 
Vielen Dank erneut für deine Hilfe...

is an sich ne gute Idee, Deine Lösung. Wichtig is nur, dass ja pro Listbox nur 1 Name drinstehen darf, da diese an die Paarungsauslosung übergeben werden...

und so, wie ich deine Codezeilen verstehe, kann ich zwar jeder Listbox (Deine Idee is übrigens besser als meine mit der Textbox, danke) eine eigene Caption zuweisen, aber das jedoch nur statisch. Dann funktioniert doch randomize nich mehr, wenn jeder Spieler einer bestimmten Listbox zugewiesen wird... oder hab ich das falsch verstanden?

Hab jetz versucht, deine programmierung auf mein programm umzuschreiben. Der stellt mir aber gar kein VALUE zur Verfügung?! Kann das daran liegen, dass ich den Paarungsgeneratorbutton und die optionsboxen in einem Frame angelegt hab? Hab schon versucht, den Namen des Frames im Code voranzustellen. Er macht es einfach nich... Bei Autovervollständigen stehen nur 4 Möglichkeiten anstelle des VALUE, unter anderem COUNT... Wenn ich trotzdem VALUE eingebe, schmiert er mir beim Testlauf ab, sobald ich den Paarungsgen.-Button drücke... HEUL, VERZWEIFEL... Diese Blöde msdn-library is auch nich wirklich hilfreich...

Übrigens hab versucht dein Beispiel mit WinRar zu öffnen, sagt mir andauernd nach dem Download, dass die Datei defekt is und nicht geöffnet werden kann...hmm

Gruß Horse
 
Zuletzt bearbeitet:
Ich habe die Paarzuweisung mal so versucht (siehe Anhang :) ):
Code:
Private Sub Command6_Click()
'Sicherstellen, daß bei jedem Start wirklich
'eine neue Zufallszahl generiert wird
Randomize -Timer

'Insgesamt 2 Zufallszahlen ermitteln
Dim Ziehung As Integer
Dim i As Integer
Dim Result As Boolean
Dim Zahl As Integer
Dim wert As Variant
Dim SpielerA, SpielerB As String
Dim Spieler(10) As Integer
Dim MsgAr As String

wert = List1.ListCount
List2.Clear

Ziehung = 0
While Ziehung < wert
  Ziehung = Ziehung + 1
  Do
    'Zufallszahl 1..10
    Zahl = Int(wert * Rnd + 1)

    'Prüfen, ob Zufallszahl bereits "gezogen"
    Result = True
    For i = 1 To Ziehung - 1
      If Spieler(i) = Zahl Then
        Result = False: Exit For
      End If
    Next i
  Loop Until Result = True

  Spieler(Ziehung) = Zahl
Wend

For i = 1 To wert
     SpielerA = Spieler(i)
     i = i + 1
     SpielerB = Spieler(i)
     MsgAr = List1.List(SpielerA - 1) & " und " & List1.List(SpielerB - 1)
     List2.AddItem MsgAr
Next i

End Sub
Jetzte bekomme ich alle Paare eines Spiels in eine Listbox geschrieben!

Der stellt mir aber gar kein VALUE zur Verfügung?!
Das ist überaus seltsam! Hast du Checkboxen oder OptionsButtons genommen?
Aber auch da gibts Value... :confused:

Grüße,
Jacka

P.S.: Bitte achte darauf, wenn du das nächste mal einen Thread erstellst, das Thema genauer zu nennen! "Achtung Newbie hat einige Fragen zur Programmierung" ist nicht sonderlich aussagekräftig. :)
 

Anhänge

Vielen Dank,

ich bin jetz wirklich weitergekommen... Allerdings müsste ich ne Möglichkeit haben, die Spielpaarungen an ein anderes Programm zu übergeben... wird im Internet gespielt... per strg+c und strg+v klappt das ja nich, durch das listenfeld...Hast du evtl. ne Idee, wie man das veranstalten könnte...?

weiterhin, kann ich den zufallsgenerator auch global setzen? hab das probiert, bin jedoch gescheitert, bei der Abfrage, ob zufallszahl schon ausgelost... Hab nämlich für jede Runde n eigenes Listenfeld, damits bei der Neuauslosung nich verschwindet...

Gruß Horse

P.S. Sorry für den Titel. Werds mir in Zukunft merken... :-( :-)
 
Hi!

Man könnte per Doppeklick in das Listenfeld die Werte in die Zwischenablage kopieren. Habe ich aber keine guten Erfahrungen mit gemacht.
Ich würde es mit einer Inputbox machen. Der angeklickte Wert erscheint in der Box und man kann dann gleich mit Copy & Paste arbeiten!
Code:
Private Sub List2_DblClick()
Dim wert As Variant
Dim listwert As Variant
Dim s As String

    listwert = List2.ListIndex
    wert = List2.List(listwert)
    s = InputBox("Namen", , wert)

End Sub

kann ich den zufallsgenerator auch global setzen?
Du könntest den Teil als Funktion schreiben.

Viele Grüße,
Jacka
 
Zurück