Abfrage von Daten aus mehreren Tabellen in einer Form darstellen

  • VB.NET
  • .NET 5–6

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Abfrage von Daten aus mehreren Tabellen in einer Form darstellen

    Hallo liebes Forum

    Mich beschäftigt momentan das abfragen von mehreren Tabellen aus einer phpmyadmin DB.
    Ich habe 5 Tabellen mit Inhalt.
    tbl_gtuchDE1, tbl_gtuchDE2, tbl_gtuchDE3, tbl_gtuchDE4, tbl_gtuchDE5
    Ich Frage im moment so ab:

    VB.NET-Quellcode

    1. Private Sub UserForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim AktFldNme As String = String.Empty
    3. Dim MyReader As MySqlDataReader = Nothing
    4. Dim cmd As New MySqlCommand
    5. Dim table As New DataTable
    6. Dim sql As String = "SELECT tnk1lwt, tnk2lwt, tnk3lwt, tnk1phw, tnk2phw, tnk3phw, tnk1temp,
    7. tnk2temp, tnk3temp, tnk1fmz, tnk2fmz, tnk3fmz, tnk1anmerk, tnk2anmerk, tnk3anmerk, datum, username, bearbam,
    8. datumDE5, datumDE4, datumDE3, datumDE2, datumDE1, gummituchDE5, gummituchDE4, gummituchDE3, gummituchDE2, gummituchDE1,
    9. usernameDE5, usernameDE4, usernameDE3, usernameDE2, usernameDE1, ueberrollungenDE5, ueberrollungenDE4, ueberrollungenDE3,
    10. ueberrollungenDE2, ueberrollungenDE1 FROM tbl_tank_feucht, tbl_gtuchDE5, tbl_gtuchDE4, tbl_gtuchDE3, tbl_gtuchDE2, tbl_gtuchDE1"
    11. Try
    12. If OpenDB() Then
    13. cmd = New MySqlCommand With {
    14. .Connection = Conn,
    15. .CommandText = sql
    16. }
    17. MyReader = cmd.ExecuteReader
    18. With MyReader
    19. While .Read
    20. For N As Integer = 0 To .FieldCount - 1
    21. AktFldNme = .GetName(N)
    22. Select Case AktFldNme.ToLower
    23. 'Feuchtmittelraum
    24. Case "datum".ToLower
    25. lblDatum.Text = .GetDateTime(N).ToString("d") '"dd/MM/yyyy HH:mm:ss"
    26. Case "tnk1lwt".ToLower
    27. lbltnk1lwt.Text = .GetInt32(N).ToString("D")
    28. Case "tnk1phw".ToLower
    29. lbltnk1phw.Text = .GetDecimal(N).ToString("F2")
    30. Case "tnk1temp".ToLower
    31. lbltnk1temp.Text = .GetDecimal(N).ToString("F1")
    32. Case "tnk1fmz".ToLower
    33. lbltnk1fmz.Text = .GetString(N)
    34. Case "tnk1anmerk".ToLower
    35. lbltnk1anmerk.Text = .GetString(N)
    36. Case "tnk2lwt".ToLower
    37. lbltnk2lwt.Text = .GetInt32(N).ToString("D")
    38. Case "tnk2phw".ToLower
    39. lbltnk2phw.Text = .GetDecimal(N).ToString("F2")
    40. Case "tnk2temp".ToLower
    41. lbltnk2temp.Text = .GetDecimal(N).ToString("F1")
    42. Case "tnk2fmz".ToLower
    43. lbltnk2fmz.Text = .GetString(N)
    44. Case "tnk2anmerk".ToLower
    45. lbltnk2anmerk.Text = .GetString(N)
    46. Case "tnk3lwt".ToLower
    47. lbltnk3lwt.Text = .GetInt32(N).ToString("D")
    48. Case "tnk3phw".ToLower
    49. lbltnk3phw.Text = .GetDecimal(N).ToString("F2")
    50. Case "tnk3temp".ToLower
    51. lbltnk3temp.Text = .GetDecimal(N).ToString("F1")
    52. Case "tnk3fmz".ToLower
    53. lbltnk3fmz.Text = .GetString(N)
    54. Case "tnk3anmerk".ToLower
    55. lbltnk3anmerk.Text = .GetString(N)
    56. Case "username".ToLower
    57. lblusername.Text = .GetString(N)
    58. Case "bearbam".ToLower
    59. lblbearbam.Text = .GetDateTime(N).ToString("d")
    60. Case "bearbam".ToLower
    61. lblbearbamzeit.Text = .GetDateTime(N).ToLongTimeString
    62. 'Druckerei
    63. Case "datumDE5".ToLower
    64. txtdatumde5.Text = .GetDateTime(N)
    65. Case "gummituchDE5".ToLower
    66. txtgtuchDE5.Text = .GetString(N)
    67. Case "usernameDE5".ToLower
    68. txtUsernameDE5.Text = .GetString(N)
    69. Case "ueberrollungenDE5".ToLower
    70. txtumrDE5.Text = .GetDecimal(N).ToString("n0")
    71. Case "datumDE4".ToLower
    72. txtdatumde4.Text = .GetDateTime(N)
    73. Case "gummituchDE4".ToLower
    74. txtgtuchDE4.Text = .GetString(N)
    75. Case "usernameDE4".ToLower
    76. txtUsernameDE4.Text = .GetString(N)
    77. Case "ueberrollungenDE4".ToLower
    78. txtumrDE4.Text = .GetDecimal(N).ToString("n0")
    79. Case "datumDE3".ToLower
    80. txtdatumde3.Text = .GetDateTime(N)
    81. Case "gummituchDE3".ToLower
    82. txtgtuchDE3.Text = .GetString(N)
    83. Case "usernameDE3".ToLower
    84. txtUsernameDE3.Text = .GetString(N)
    85. Case "ueberrollungenDE3".ToLower
    86. txtumrDE3.Text = .GetDecimal(N).ToString("n0")
    87. Case "datumDE2".ToLower
    88. txtdatumde2.Text = .GetDateTime(N)
    89. Case "gummituchDE2".ToLower
    90. txtgtuchDE2.Text = .GetString(N)
    91. Case "usernameDE2".ToLower
    92. txtUsernameDE2.Text = .GetString(N)
    93. Case "ueberrollungenDE2".ToLower
    94. txtumrDE2.Text = .GetDecimal(N).ToString("n0")
    95. Case "datumDE1".ToLower
    96. txtdatumde1.Text = .GetDateTime(N)
    97. Case "gummituchDE1".ToLower
    98. txtgtuchDE1.Text = .GetString(N)
    99. Case "usernameDE1".ToLower
    100. txtUsernameDE1.Text = .GetString(N)
    101. Case "ueberrollungenDE1".ToLower
    102. txtumrDE1.Text = .GetDecimal(N).ToString("n0")
    103. End Select
    104. Next
    105. End While
    106. End With
    107. End If
    108. Catch ex As Exception
    109. MsgBox(ex.Message, MsgBoxStyle.Critical, "Error [" & ex.GetType.Name & ", Akt. Feld: """ & AktFldNme & """]")
    110. Finally
    111. If MyReader IsNot Nothing Then
    112. MyReader.Close()
    113. MyReader = Nothing
    114. End If
    115. If cmd IsNot Nothing Then
    116. cmd.Dispose()
    117. cmd = Nothing
    118. End If
    119. If Conn IsNot Nothing Then
    120. Conn.Close()
    121. Conn.Dispose()
    122. Conn = Nothing
    123. End If
    124. End Try
    125. End Sub


    Wenn ich das Programm laufen lasse, benötigt die Abfrage mind. 1 Minute bis die Einträge in der From erscheinen obwohl in der DB gerademal 550 Einträge vorhanden sind und tbl_3 bis tbl_1 leer sind.
    Wahrscheinlich gibt es eine bessere Lösung um die Abfrage etwas zu beschleunigen aber leider komme ich nicht drauf.

    Vielleicht kann mir ein Profi einen Tipp geben.

    Vielen Dank

    Gebhard
    Bei SQL bin ich raus. Aber: Welche Zeile ist der Flaschenhals? Setze Haltepunkte z.B. in Zeile#16, #23# und #29 und schau, wie lange der Code von der einen zur nächsten Stelle braucht. Das wird dann angezeigt.
    Bilder
    • Messung1.png

      8,42 kB, 667×126, 83 mal angesehen
    • Messung2.png

      13,23 kB, 668×124, 77 mal angesehen
    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.

    Typhoon schrieb:

    Ich habe 5 Tabellen mit Inhalt.
    tbl_gtuchDE1, tbl_gtuchDE2, tbl_gtuchDE3, tbl_gtuchDE4, tbl_gtuchDE5
    uih - diese Tabellennamen deuten fast eindeutig daraufhin, dass das Datenmodell in der Datenbank bereits völlig verfehlt ist.
    Darauf aufbauend kann eiglich nichts bei rauskommen.
    Beschäftige dich mit relationaler Datenmodellierung, lass dir im Forum dabei helfen, für deine Anwendung ein geeignetes Datenmodell zu konzipieren.



    Ansonsten scheint auch die Abfrage ohne SQL-Kenntnisse erstellt zu sein.
    Sie wird ein Kartesisches Produkt aus allen 6(!) angesprochenen Tabellen erbringen.
    Dabei entstehen riesige Datenmengen: die Anzahl der Datensätze entspricht der Auf-Multiplikation aller Tabellen.



    Diese Abermillionen Datensätze liest du alle in immer dieselben Controls ein.
    Also erst einen, dann den nächsten - der überschreibt den vorherigen.
    dann den nächsten - der überschreibt den vorherigen.
    dann den nächsten - der überschreibt den vorherigen.
    dann den nächsten - der überschreibt den vorherigen.
    ...
    Am Ende hast du alle Datensätze durchlaufen, und nur der letzte wurde nicht vom nachfolgenden überschrieben, und verbleibt so in deinen Controls.
    Guten Morgen

    @ VaporiZed
    Danke für den Tipp. Ich habe Haltepunkte gesetzt. Hier das Ergebnis.

    [img][/img]">

    Knapp 4 min.

    @ ErfinderDesRades

    Auch dir Danke für deinen Beitrag.
    Ich drehe mich schon seit Monaten im Kreis und langsam habe ich die Lust verloren an meinem Projekt weiter zu machen.
    Ich habe schon etliche Anläufe hinter mir und das ergebniss ist immer das selbe. Irgendwann ist der Punkt erreicht wo es nicht mehr weiter geht.
    Es ist doch sehr umfangreich und ohne Grundkenntnisse ist es für mich unmöglich hierbei weiter zu kommen. Dachte es wäre einfacher.
    Es gibt da duzende Lösungswege.... aber welcher ist der richtige. Angefangen vom Aufbau der DB.
    Vielleicht kennst Du jemanden, der sich mir annehmen kann/wird :P . Ich bin für jede Hilfe dankbar. Ich möchte ja nicht das es mir fertig gemacht wir sondern eher erklärt wird wie ich vorgehen muss um an das Ziel zu kommen.
    Ich bin kein Unternehmen sondern eine Private Person die sich gerne in der Freizeit mit diesem Thema beschäftigt mir aber dann in meinem Beruf zugute kommt.

    uih - diese Tabellennamen deuten fast eindeutig daraufhin, dass das Datenmodell in der Datenbank bereits völlig verfehlt ist.


    Genau so ein Thema. Wie ist das in der DB zu lösen. Mache ich eine Tabelle wo alles drinnen steht oder andersrum oder ganz anders.

    Vielen Dank für eure Hilfe

    Gruß Gebhard
    Echt jetzt? Du sollst nicht meinen Code messen, sondern Deinen aus Post#1! Und die Stellen, an denen es sinnvoll wäre, Haltepunkte zu setzen, habe ich auch in Post#2 erwähnt.
    Mein Code mit der For-Schleife war nur dafür da, dass Du weißt, wo die Zeitmessung zu finden ist, die Dir Visual Studio anbietet.
    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.
    @ VaporiZed

    Also ich habe schon in meinem Code aus Post#1 die Haltepunkte gesetzt. Tut mir leid, wenn ich da etwas falsch verstanden habe.
    Ich setzte die Haltepunkte mit F9. Aber das Ergenbis ist gleich geblieben.



    knapp 4 min. bis die Form mit den Einträgen erscheint.



    Meine Frage war nicht, wie lange es dauert, bis das Form gesezigt wird, sondern wie lange es von Zeile#16 Deines Post#1-Codes zu Zeile#23 dauert, wie lange von #23 bis #29 und wie lange von #29 zur nächsten Zeile. So findest Du heraus, was da so lange dauert. Und dann kannst Du Dich gezielt an die Optimierung machen, weil Du nicht rumrätseln musst, was da so lange dauert.
    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.
    @ VaporiZed

    Ok, jetzt hat es gezündet. :)

    Also ich habe 8 Haltepunkte verteilt vom Anfang bis zum Ende des Codes.

    Aufgefallen ist, dass das Programm zwischen den Zeilen 33 und 153 hin und her springt. Nach 3 min. auf WEITER drücken habe ich dann abgebrochen. Aber in der regel waren die Zeiten 1-2 ms in diesem Abschnitt.

    Typhoon schrieb:

    zwischen den Zeilen 33 und 153 hin und her springt
    Das erscheint mir merkwürdig.
    Ich hätte verstanden, wenn es zwischen 29 und 158 oder zwischen 27 und 160 springt.

    Typhoon schrieb:

    Also ich habe 8 Haltepunkte verteilt vom Anfang bis zum Ende des Codes.
    Versuch's mal nicht mit Haltepunkten, sondern mit Einzelschritten.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @ petaod

    Guten Morgen

    Also wenn ich das Programm in Einzelschritten Durchlaufen lassen ( F10 ) werden die Prozedurschritte ca. 4 min. wiederholt bis die Form mit der Ausgabe erscheint.

    VB.NET-Quellcode

    1. AktFldNme = .GetName(N)
    2. Select Case AktFldNme.ToLower
    3. 'Feuchtmittelraum
    4. Case "datum".ToLower
    5. lblDatum.Text = .GetDateTime(N).ToString("d") '"dd/MM/yyyy HH:mm:ss"
    6. Case "tnk1lwt".ToLower
    7. lbltnk1lwt.Text = .GetInt32(N).ToString("D")
    8. Case "tnk1phw".ToLower
    9. lbltnk1phw.Text = .GetDecimal(N).ToString("F2")
    10. Case "tnk1temp".ToLower
    11. lbltnk1temp.Text = .GetDecimal(N).ToString("F1")
    12. Case "tnk1fmz".ToLower
    13. lbltnk1fmz.Text = .GetString(N)
    14. Case "tnk1anmerk".ToLower
    15. lbltnk1anmerk.Text = .GetString(N)
    16. Case "tnk2lwt".ToLower
    17. lbltnk2lwt.Text = .GetInt32(N).ToString("D")
    18. Case "tnk2phw".ToLower
    19. lbltnk2phw.Text = .GetDecimal(N).ToString("F2")
    20. Case "tnk2temp".ToLower
    21. lbltnk2temp.Text = .GetDecimal(N).ToString("F1")
    22. Case "tnk2fmz".ToLower
    23. lbltnk2fmz.Text = .GetString(N)
    24. Case "tnk2anmerk".ToLower
    25. lbltnk2anmerk.Text = .GetString(N)
    26. Case "tnk3lwt".ToLower
    27. lbltnk3lwt.Text = .GetInt32(N).ToString("D")
    28. Case "tnk3phw".ToLower
    29. lbltnk3phw.Text = .GetDecimal(N).ToString("F2")
    30. Case "tnk3temp".ToLower
    31. lbltnk3temp.Text = .GetDecimal(N).ToString("F1")
    32. Case "tnk3fmz".ToLower
    33. lbltnk3fmz.Text = .GetString(N)
    34. Case "tnk3anmerk".ToLower
    35. lbltnk3anmerk.Text = .GetString(N)
    36. Case "username".ToLower
    37. lblusername.Text = .GetString(N)
    38. Case "bearbam".ToLower
    39. lblbearbam.Text = .GetDateTime(N).ToString("d")
    40. Case "bearbam".ToLower
    41. lblbearbamzeit.Text = .GetDateTime(N).ToLongTimeString
    42. 'Druckerei
    43. Case "datumDE5".ToLower
    44. txtdatumde5.Text = .GetDateTime(N)
    45. Case "gummituchDE5".ToLower
    46. txtgtuchDE5.Text = .GetString(N)
    47. Case "usernameDE5".ToLower
    48. txtUsernameDE5.Text = .GetString(N)
    49. Case "ueberrollungenDE5".ToLower
    50. txtumrDE5.Text = .GetDecimal(N).ToString("n0")
    51. Case "datumDE4".ToLower
    52. txtdatumde4.Text = .GetDateTime(N)
    53. Case "gummituchDE4".ToLower
    54. txtgtuchDE4.Text = .GetString(N)
    55. Case "usernameDE4".ToLower
    56. txtUsernameDE4.Text = .GetString(N)
    57. Case "ueberrollungenDE4".ToLower
    58. txtumrDE4.Text = .GetDecimal(N).ToString("n0")
    59. Case "datumDE3".ToLower
    60. txtdatumde3.Text = .GetDateTime(N)
    61. Case "gummituchDE3".ToLower
    62. txtgtuchDE3.Text = .GetString(N)
    63. Case "usernameDE3".ToLower
    64. txtUsernameDE3.Text = .GetString(N)
    65. Case "ueberrollungenDE3".ToLower
    66. txtumrDE3.Text = .GetDecimal(N).ToString("n0")
    67. Case "datumDE2".ToLower
    68. txtdatumde2.Text = .GetDateTime(N)
    69. Case "gummituchDE2".ToLower
    70. txtgtuchDE2.Text = .GetString(N)
    71. Case "usernameDE2".ToLower
    72. txtUsernameDE2.Text = .GetString(N)
    73. Case "ueberrollungenDE2".ToLower
    74. txtumrDE2.Text = .GetDecimal(N).ToString("n0")
    75. Case "datumDE1".ToLower
    76. txtdatumde1.Text = .GetDateTime(N)
    77. Case "gummituchDE1".ToLower
    78. txtgtuchDE1.Text = .GetString(N)
    79. Case "usernameDE1".ToLower
    80. txtUsernameDE1.Text = .GetString(N)
    81. Case "ueberrollungenDE1".ToLower
    82. txtumrDE1.Text = .GetDecimal(N).ToString("n0")
    83. End Select
    84. Next
    @ petaod

    Beim durchlaufen der Zeilen braucht das Programm an der Stelle " End While " Zeile 136. am längsten.

    Visual Basic-Quellcode

    1. With MyReader
    2. While .Read
    3. For N As Integer = 0 To .FieldCount - 1
    4. AktFldNme = .GetName(N)
    5. Select Case AktFldNme.ToLower
    6. 'Feuchtmittelraum
    7. Case "datum".ToLower
    8. lblDatum.Text = .GetDateTime(N).ToString("d") '"dd/MM/yyyy HH:mm:ss"
    9. Case "tnk1lwt".ToLower
    10. lbltnk1lwt.Text = .GetInt32(N).ToString("D")
    11. Case "tnk1phw".ToLower
    12. lbltnk1phw.Text = .GetDecimal(N).ToString("F2")
    13. Case "tnk1temp".ToLower
    14. lbltnk1temp.Text = .GetDecimal(N).ToString("F1")
    15. Case "tnk1fmz".ToLower
    16. lbltnk1fmz.Text = .GetString(N)
    17. Case "tnk1anmerk".ToLower
    18. lbltnk1anmerk.Text = .GetString(N)
    19. Case "tnk2lwt".ToLower
    20. lbltnk2lwt.Text = .GetInt32(N).ToString("D")
    21. Case "tnk2phw".ToLower
    22. lbltnk2phw.Text = .GetDecimal(N).ToString("F2")
    23. Case "tnk2temp".ToLower
    24. lbltnk2temp.Text = .GetDecimal(N).ToString("F1")
    25. Case "tnk2fmz".ToLower
    26. lbltnk2fmz.Text = .GetString(N)
    27. Case "tnk2anmerk".ToLower
    28. lbltnk2anmerk.Text = .GetString(N)
    29. Case "tnk3lwt".ToLower
    30. lbltnk3lwt.Text = .GetInt32(N).ToString("D")
    31. Case "tnk3phw".ToLower
    32. lbltnk3phw.Text = .GetDecimal(N).ToString("F2")
    33. Case "tnk3temp".ToLower
    34. lbltnk3temp.Text = .GetDecimal(N).ToString("F1")
    35. Case "tnk3fmz".ToLower
    36. lbltnk3fmz.Text = .GetString(N)
    37. Case "tnk3anmerk".ToLower
    38. lbltnk3anmerk.Text = .GetString(N)
    39. Case "username".ToLower
    40. lblusername.Text = .GetString(N)
    41. Case "bearbam".ToLower
    42. lblbearbam.Text = .GetDateTime(N).ToString("d")
    43. 'Case "bearbam".ToLower
    44. 'lblbearbamzeit.Text = .GetDateTime(N).ToLongTimeString
    45. 'Druckerei
    46. Case "datumDE5".ToLower
    47. txtdatumde5.Text = .GetDateTime(N)
    48. Case "gummituchDE5".ToLower
    49. txtgtuchDE5.Text = .GetString(N)
    50. Case "usernameDE5".ToLower
    51. txtUsernameDE5.Text = .GetString(N)
    52. Case "ueberrollungenDE5".ToLower
    53. txtumrDE5.Text = .GetDecimal(N).ToString("n0")
    54. Case "datumDE4".ToLower
    55. txtdatumde4.Text = .GetDateTime(N)
    56. Case "gummituchDE4".ToLower
    57. txtgtuchDE4.Text = .GetString(N)
    58. Case "usernameDE4".ToLower
    59. txtUsernameDE4.Text = .GetString(N)
    60. Case "ueberrollungenDE4".ToLower
    61. txtumrDE4.Text = .GetDecimal(N).ToString("n0")
    62. Case "datumDE3".ToLower
    63. txtdatumde3.Text = .GetDateTime(N)
    64. Case "gummituchDE3".ToLower
    65. txtgtuchDE3.Text = .GetString(N)
    66. Case "usernameDE3".ToLower
    67. txtUsernameDE3.Text = .GetString(N)
    68. Case "ueberrollungenDE3".ToLower
    69. txtumrDE3.Text = .GetDecimal(N).ToString("n0")
    70. Case "datumDE2".ToLower
    71. txtdatumde2.Text = .GetDateTime(N)
    72. Case "gummituchDE2".ToLower
    73. txtgtuchDE2.Text = .GetString(N)
    74. Case "usernameDE2".ToLower
    75. txtUsernameDE2.Text = .GetString(N)
    76. Case "ueberrollungenDE2".ToLower
    77. txtumrDE2.Text = .GetDecimal(N).ToString("n0")
    78. Case "datumDE1".ToLower
    79. txtdatumde1.Text = .GetDateTime(N)
    80. Case "gummituchDE1".ToLower
    81. txtgtuchDE1.Text = .GetString(N)
    82. Case "usernameDE1".ToLower
    83. txtUsernameDE1.Text = .GetString(N)
    84. Case "ueberrollungenDE1".ToLower
    85. txtumrDE1.Text = .GetDecimal(N).ToString("n0")
    86. End Select
    87. Next
    88. End While
    ich sagss nochmal: nach meiner Vermutung ist das Konzept vermurkst.
    Und das Problem ist, dass irrsinnige Mengen an Daten erzeugt und wieder verworfen werden.
    Also statt zu messen, wie lange das dauert, zähl doch einmal mit, wieviele Umdrehungen die While-Schleife macht.
    Vielleicht irre ich mich auch, aber den versuch sollteste unbedingt machen.

    Typhoon schrieb:

    Beim durchlaufen der Zeilen braucht das Programm an der Stelle " End While " Zeile 136. am längsten.
    Weil er dann die nächste Zeile ausführt, das ist Zeile 3 While .Read.
    Da liest er den nächsten Datensatz.

    Wie lange benötigt er denn, wenn du das SQL-Statement in der MySql-Workbench ausführst?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo zusammen

    Durch zufall konnte mir ein Nachbar Licht ins Dunkle bringen.
    Bei mir war generell die DB-Struktur schon falsch. Ich habe die Schlüssel ganz falsch vergeben.

    [/URL][/img]Falsche DB-Struktur





    Richtige oder bessere DB-Struktur

    [img][/img]">


    Und die Abfrage sieht jetzt so aus:

    VB.NET-Quellcode

    1. Private Sub UserForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim AktFldNme As String = String.Empty
    3. Dim MyReader As MySqlDataReader = Nothing
    4. Dim cmd As New MySqlCommand
    5. Dim table As New DataTable
    6. Dim sql As String = "Select * FROM `feuchtmittelmessung` WHERE tank = 'T1' ORDER BY datum DESC LIMIT 1"
    7. Try
    8. If OpenDB() Then
    9. cmd = New MySqlCommand With {
    10. .Connection = Conn,
    11. .CommandText = sql
    12. }
    13. MyReader = cmd.ExecuteReader
    14. With MyReader
    15. While .Read
    16. For N As Integer = 0 To .FieldCount - 1
    17. AktFldNme = .GetName(N)
    18. Select Case AktFldNme.ToLower
    19. Case "datum".ToLower
    20. lblDatumT1.Text = .GetDateTime(N).ToString("d") '"dd/MM/yyyy HH:mm:ss"
    21. Case "leitwert".ToLower
    22. lbltnk1lwt.Text = .GetInt32(N).ToString("D")
    23. Case "phwert".ToLower
    24. lbltnk1phw.Text = .GetDecimal(N).ToString("F2")
    25. Case "temperatur".ToLower
    26. lbltnk1temp.Text = .GetDecimal(N).ToString("F1")
    27. Case "feuchtmittelzusatz".ToLower
    28. lbltnk1fmz.Text = .GetString(N)
    29. Case "anmerkung".ToLower
    30. lbltnk1anmerk.Text = .GetString(N)
    31. End Select
    32. Next
    33. End While
    34. End With
    35. End If
    36. Catch ex As Exception
    37. MsgBox(ex.Message, MsgBoxStyle.Critical, "Error [" & ex.GetType.Name & ", Akt. Feld: """ & AktFldNme & """]")
    38. Finally
    39. If MyReader IsNot Nothing Then
    40. MyReader.Close()
    41. MyReader = Nothing
    42. End If
    43. If cmd IsNot Nothing Then
    44. cmd.Dispose()
    45. cmd = Nothing
    46. End If
    47. End Try


    Jetzt habe ich ca. 3500 Einträge und diese werden Blitz schnell in der Form ausgegeben.

    Danke trotzalledem an petaod, ErfinderDesRades und alle die mir Tipps geben konnten.

    Ein nächstes Problem kommt sicher :P :P

    Grüße Gebhard
    was du "dbStruktur" nennst ist nur das Design zweier Tabellen (alt, neu).

    Eine Datenbank enthält viele Tabellen, und die sind untereinander verknüpft - das meint das Wort "dbStruktur" (ich nenne es lieber "Datenbank-Design").
    Ein Riesen-Unterschied, ungefähr wie der Unterschied zwischen "Finger" und "Hand".

    Du solltest unbedingt relationale Datenmodellierung erlernen. Im Datenbank-Tutorial-Bereich habich ein Tut gemacht zu "Grundlagen der Datenmodellierung".
    Eine Anwendung, die auf einem unbrauchbaren Datenmodell aufbaut, kann nichts werden - ganz ausgeschlossen.
    Das musst du lernen - oder lass deinen Nachbarn dein Programm schreiben.