Formel 1 Datenbank

    • VB.NET

    Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

      Formel 1 Datenbank

      Hi,

      mein Vater ist Formel 1 "freak" und wollte von mir ein Program dafür. mittlerweile hat er aber dies aufgegeben (kein intresse mehr).
      Der Anfang ist gemacht und es ist schade dies in der Schublade zulassen.
      Vielleicht sind ja bei vbParadise Formel 1 freaks und wollen es weiter voran bringen?
      Wenn nicht zeigt es wie mann ein Kalender mit einem DGV erstellen kann, und aus einer Datenbank Termine(Warmup, Quali., Rennen)
      in diese DGV eintragen kann.

      hier der Code:

      im Modul:

      VB.NET-Quellcode

      1. Imports System.Reflection
      2. Module modHelper
      3. Public Sub DoubleBuffered(ByVal dgv As DataGridView, ByVal setting As Boolean)
      4. Dim dgvType As Type = dgv.[GetType]()
      5. Dim pi As PropertyInfo = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance Or BindingFlags.NonPublic)
      6. pi.SetValue(dgv, setting, Nothing)
      7. End Sub
      8. End Module


      im Formular:
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Option Strict On
      2. Imports System.Data.OleDb
      3. Public Class calVertical
      4. Dim ActivYear As Integer
      5. Private Sub calVertical_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      6. modHelper.DoubleBuffered(DataGridView1, True)
      7. With DataGridView1
      8. .RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
      9. .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
      10. .ScrollBars = ScrollBars.None
      11. .AllowUserToResizeRows = False
      12. .MultiSelect = False
      13. .RowHeadersVisible = False
      14. End With
      15. ActivYear = If(ActivYear = 0, Year(Now), ActivYear)
      16. IniCombos()
      17. End Sub
      18. Public Sub IniCombos()
      19. For i As Integer = 2019 To Year(Now) + 2
      20. cboYear.Items.Add(i)
      21. Next
      22. cboYear.SelectedIndex = Year(Now) - 2019
      23. End Sub
      24. Private Sub MakeHeader()
      25. Dim col As New List(Of String)
      26. col.Add("Jan")
      27. col.Add("Feb")
      28. col.Add("Mar")
      29. col.Add("Apr")
      30. col.Add("May")
      31. col.Add("Jun")
      32. col.Add("Jul")
      33. col.Add("Aug")
      34. col.Add("Sep")
      35. col.Add("Oct")
      36. col.Add("Nov")
      37. col.Add("Dec")
      38. With DataGridView1
      39. Dim Ft As New Font("Tahoma", 8)
      40. .Font = Ft
      41. For i As Integer = 1 To 12
      42. Dim key As String = "C" & i.ToString("00")
      43. .Columns.Add(key, col(i - 1))
      44. .Columns(key).Width = 40
      45. .Columns(key).SortMode = DataGridViewColumnSortMode.NotSortable
      46. Next
      47. End With
      48. DataGridView1.Rows.Add(31)
      49. DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
      50. End Sub
      51. Private Sub MakeKalendar(ByVal ActiveYear As Integer)
      52. With DataGridView1
      53. For i As Integer = 1 To 12
      54. Dim d As Date = New Date(ActiveYear, i, 1)
      55. For j As Integer = 1 To Date.DaysInMonth(ActiveYear, i)
      56. Dim col As Integer = (i - 1)
      57. .Rows(j - 1).Cells(col).Value = d.ToString("ddd dd")
      58. .Rows(j - 1).Height = 20
      59. If d.DayOfWeek = DayOfWeek.Saturday Or d.DayOfWeek = DayOfWeek.Sunday Then
      60. .Rows(j - 1).Cells(col).Style.BackColor = Color.LightSteelBlue
      61. End If
      62. d = d.AddDays(1)
      63. Next
      64. Next
      65. End With
      66. End Sub
      67. Private Sub AddRacesDates(ByVal nYear As Integer)
      68. 'Tabellenname in .mdb = tbl_SeasonRaces
      69. 'Feldbezeichnungen in Tabelle :
      70. 'R_No = Autoincrement (Lfd.Nr in der Tabelle)
      71. 'R_RaceDate = Date (Training-Quali oder Rennen eingeben)
      72. 'Race = Text (wo findet was statt)
      73. 'R_Day = Integer (was findet statt Training-Quali oder Rennen)
      74. Dim sDB As String = "D:\DotNet\Sample DotNet\sample DGV\Cal F1\Formula1.mdb"
      75. Dim sCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      76. "Data Source=" & sDB & ";"
      77. Dim Cn As OleDb.OleDbConnection = New OleDb.OleDbConnection(sCon)
      78. Dim sSql As String = "SELECT R_RaceDate, R_No, race, R_Day"
      79. sSql &= " FROM tbl_SeasonRaces "
      80. sSql &= "WHERE R_RaceDate Is Not Null AND Format(R_RaceDate,'yyyy')=@RacesYear;"
      81. Dim Cmd As New OleDb.OleDbCommand(sSql, Cn)
      82. Cmd.Parameters.AddWithValue("@RacesYear", nYear)
      83. Cn.Open()
      84. Dim dr As OleDbDataReader = Cmd.ExecuteReader()
      85. While dr.Read()
      86. With DataGridView1
      87. For i As Integer = 1 To 12
      88. Dim d As Date = New Date(nYear, i, 1)
      89. For j As Integer = 1 To Date.DaysInMonth(nYear, i)
      90. Dim col As Integer = (i - 1)
      91. 'ist was zum Eintragen:
      92. If CDate(dr.Item(0)) = CDate(d) Then
      93. 'ja dann Text einfügen und Färben:
      94. 'Text eintragen
      95. Dim race As String = CStr(dr.Item(2).ToString)
      96. .Rows(j - 1).Cells(col).Value = race
      97. 'Färben nach : Training - Quali. oder Rennen
      98. Dim RDay As Integer
      99. RDay = CInt(dr.Item(3).ToString)
      100. Select Case RDay
      101. Case 1
      102. .Rows(j - 1).Cells(col).Style.BackColor = Color.Aquamarine
      103. Case 2
      104. .Rows(j - 1).Cells(col).Style.BackColor = Color.Gold
      105. Case 3
      106. .Rows(j - 1).Cells(col).Style.BackColor = Color.BurlyWood
      107. Case Else
      108. End Select
      109. End If
      110. d = d.AddDays(1)
      111. Next
      112. Next
      113. End With
      114. End While
      115. dr.Close()
      116. Cmd.Dispose()
      117. Cn.Close()
      118. End Sub
      119. Private Sub cboYear_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cboYear.SelectedIndexChanged
      120. With DataGridView1
      121. .Rows.Clear()
      122. .Columns.Clear()
      123. .SuspendLayout()
      124. MakeHeader()
      125. MakeKalendar(CInt(cboYear.Text))
      126. AddRacesDates(CInt(cboYear.Text))
      127. .ResumeLayout()
      128. .AllowUserToAddRows = False
      129. End With
      130. End Sub
      131. Private Sub DataGridView1_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
      132. 'If DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value IsNot Nothing Then
      133. ' MessageBox.Show(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value.ToString())
      134. 'End If
      135. End Sub
      136. Private Sub DataGridView1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseUp
      137. 'standard breite einstellen
      138. For Each c As DataGridViewColumn In DataGridView1.Columns
      139. c.Width = 40
      140. Next
      141. 'ändere breite wenn spalte gewählt wird
      142. If e.Button = Windows.Forms.MouseButtons.Left Then
      143. Dim hitRow As Integer, hitCol As Integer
      144. hitRow = e.RowIndex
      145. hitCol = e.ColumnIndex
      146. Dim column As DataGridViewColumn = DataGridView1.Columns(hitCol)
      147. column.Width = 120
      148. End If
      149. End Sub
      150. Private Sub DataGridView1_MouseLeave(sender As Object, e As System.EventArgs) Handles DataGridView1.MouseLeave
      151. 'standard breite einstellen
      152. For Each c As DataGridViewColumn In DataGridView1.Columns
      153. c.Width = 40
      154. Next
      155. End Sub
      156. Private Sub DataGridView1_CellPainting(sender As Object, e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
      157. For Each row As DataGridViewRow In DataGridView1.Rows
      158. For Each cell As DataGridViewCell In row.Cells
      159. Dim value As String = Convert.ToString(cell.Value)
      160. If String.IsNullOrEmpty(value) Then
      161. cell.Style.BackColor = Color.Silver
      162. End If
      163. Next cell
      164. Next row
      165. End Sub
      166. End Class


      der Code zeigt wie alles geladen wird, Insert, Update und Delete könnt Ihr selbst erweitern.

      und hier noch ein Bild



      Bild Tabelle in Datenbank




      viel spaß damit
      Gruss


      kasi

      *Spoiler wegen überlangem Code eingefügt*

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Marcus Gräfe“ ()

      Bitte Screenshot/Anhang korrigieren. Titel anpassen, da die F1-Datenbank ja wenig bis nichts mit dem Control zu tun hat.

      Eine sinnvolle Benennung (DataGridView1) wäre schön gewesen.
      Auskommentierter Code hinterlässt beim Leser immer die Frage: »Ist das Kunst oder kann das weg.«
      Der Schritt ohne VB6-Namespace ist klein und sollte gegangen werden, wenn nichts Relevantes dagegen spricht.
      Das DGV sollte so vorbereitet sein, dass man die Inhalte nicht bearbeiten kann. Oder ist das Absicht? Schließlich ist die codeseitige Zellinhaltsmanipulation ja unabhängig von der Usermanipulation.
      Aber eine nette Idee. Für einen Kalender sollten ggf. noch Feiertagsmarkierungen ergänzt werden.
      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

      Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

      Das DGV sollte so vorbereitet sein, dass man die Inhalte nicht bearbeiten kann. Oder ist das Absicht?


      ist Absicht, ist nur zum schauen was,wann stattfindet, es kann aber jeder ändern wie er möchte

      Für einen Kalender sollten ggf. noch Feiertagsmarkierungen ergänzt werden.

      die Anweisung wie Daten aus der Datenbank Tabelle ausliest ist ja da, jeder kann eine Feiertags
      Tabelle dort anlegen und genauso auslesen und einfügen wie die Funktion "AddRacesDates"
      Für das Laden der Race-Dates hätte ich es interessant gefunden, wenn man diese nicht in einer MDB manuell pflegen müsste, sondern automatisch aus frei verfügbaren Quellen laden könnte.
      z.B. hier: motorsport-total.com/formel-1/termin-kalender/2021
      Am besten direkt aus der dort verfügbaren ICS-Datei.
      motorsport-total.com/motorsport-termine/termine_formel-1.ics
      --
      If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
      --

      petaod schrieb:

      Für das Laden der Race-Dates hätte ich es interessant gefunden, wenn man diese nicht in einer MDB manuell pflegen müsste, sondern automatisch aus frei verfügbaren Quellen laden könnte.


      Danke für die Info
      der Import in die DB sollte damals mit .csv Files geschehen, die Quelle die ich gefunden habe ist
      ergast.com/mrd/db/#csv
      dort ist alles in csv vorhanden (f1db_csv)