[NEED HELP] MySQL ABFRAGE

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von raist10.

    [NEED HELP] MySQL ABFRAGE

    Hier mein code und mein problemm:

    VB.NET-Quellcode

    1. Dim SQLAbfrage As String = "SELECT * FROM login WHERE User='" + Replace(benutzer, " ", "") + "' AND Pass='" & Replace(passwort, " ", "") + "' AND Hwid='" & Replace(HWID & "-" & GetHDSerial(), " ", "") + "' AND datum='" & Replace(datum, " ", "") & "'"


    Also datum funktioniert net wenn ich das weg mache dann funkt alles das problemm ist ich brauche das ablauf datum..


    das soll in ein label reingehen

    also

    VB.NET-Quellcode

    1. Dim datum As String = Label1.Text


    Danke im Voraus!
    Also ... mal langsam ... was sollen denn die ganzen Replace in der Anweisung? Gerade bei Zahlen- oder Datumswerten sind die ja mal völlig unnötig. Wenn Du führende/endende Leerzeichen entfernen willst dann oder sonstwas mit dem String anstellen magst, dann setzte Dich mal mit der Klasse String auseinander und auch mit Methoden wie Trim und Konsorten. Macht einen deutlich schlankeren Fuß. ;)

    Das Datum nicht klappt ist klar. ;)

    Die Hochkommas müssen einen String-Wert umfassen, für Datums-Werte gibt es das Literal #.

    Und das bezieht sich nicht darauf als was Du die Variable übergibst, sondern als was das Feld in der Datenbank deklariert wird. Da es dort mit sicherheit als Datum deklariert ist gibt es halt Ärger wenn Du versuchst da einen String reinzuwürgen.

    Also musst Du zu erst einmal dafür sorgen das die Variable Datum auch als Date in .NET deklariert ist.

    Änder das also wie folgt ab (wie man den Inhalt einer TextBox in ein Datum konvertiert muss ich ja bestimmt nicht erklären ^^):

    VB.NET-Quellcode

    1. Dim datum As String
    2. 'abändern in:
    3. Dim datum As Date


    Und dann änderst Du das SQL-Statement wie folgt ab:

    [MySQL]
    ... AND datum='" & Replace(datum, " ", "") & "'" ...

    'abändern in:

    ... And datum = #" & datum & "#"
    [/MySQL]

    Dann klappt es auch mit dem SQL-Statement. ;)

    Gruß

    Rainer

    P.S.: Datum ist immer ein schlechter Name, irgendwann ändert man das automatisch ins Englische Date ab und denkt sich nix dabei und schwupps kracht es massiv an allen Ecken und Enden da Date sowohl in .NET wie auch in SQL reserviert ist.

    VB.NET-Quellcode

    1. Dim SQLAbfrage As String = "SELECT * FROM login WHERE User='" + Replace(benutzer, " ", "") + "' AND Pass='" & Replace(passwort, " ", "") + "' AND Hwid='" & Replace(HWID & "-" & GetHDSerial(), " ", "") + "And date = #" & date & "#" & "'"


    VB.NET-Quellcode

    1. Dim date As String = (TextBox1.Text)





    kommt torzdem ein fehler oder is das noch net richtig :/

    xun1337 schrieb:

    kommt torzdem ein fehler oder is das noch net richtig :/


    Guckst Du oben ... Du hast Datum immer noch als STRING deklariert, Du musst Datum aber als DATE deklarieren.

    EDIT:

    Und natürlich am Ende des Statements das Hochkomma weglassen ... Hochkommas in SQL sind NUR für String-Werte gedacht, Du darfst damit weder einen Zahlen-Wert noch einen Datums-Wert einfassen.

    Gruß

    Rainer
    Zu aller erst: Option Strict ON !

    Dann wie hast Du denn den Inhalt der TextBox an die Variable Datum übergeben? Das Du die zuerst von Text nach Date konvertieren musst ist klar, oder? Z.B. so:

    VB.NET-Quellcode

    1. Dim Datum As Date = DateValue(Me.TextBox1.Value)


    Und zum anderen sind mir noch was an Deinem SQL-Statement aufgefallen:

    Du musst bei SQL-Statements aufpassen ... es sind Flüchtigkeitsfehler drinnen und dann bekommst Du Error oder gar nichts zurück. SQL ist extrem pingelig ... auch mit falsch gesetzten Leerzeichen. Hast Du zwischen einem Wert und der Anweisung AND kein Leerzeichen drinnen, dann wird das AND nicht als Operator gewertet sondern u.U. als zugehörig zu der vorangegangenen Zeichenfolge.

    Teil Dir solche längeren Anweisung am Besten in einzelne Zeilen auf und schreibe die SQL-Keywords immer in Großbuchstaben, also so:

    VB.NET-Quellcode

    1. Dim SQLAbfrage As String = _
    2. "SELECT * " & _
    3. "FROM login " & _
    4. "WHERE " & _
    5. "User = '" + Replace(benutzer, " ", "") + "' " & _
    6. "AND Pass = '" & Replace(passwort, " ", "") + "' " & _
    7. "AND Hwid = '" & Replace(HWID & "-" & GetHDSerial(), " ", "") + "' " &
    8. "AND date = #" & Datum & "#"


    Da siehst Du jetzt sofort auf einen Blick das alle Leerzeichen zur Operator-Trennung vorhanden sind, dass alle Werte ihre Literale haben und das Du date als Datenbankfield eingerichtet hast ... GAAAANZ MIES! ;)

    Date ist ein reserviertes Wort. Es gibt SQL-Dialekte die das schlucken weil date leftsided ist, aber es gibt auch SQL-Dialekte die date als SQL-Funktion date interpretieren und dann mit der Anweisung rein gar nichts anfangen können da die SQL-Funktion DATE() das aktuelle Datum liefert und Zuweisung nicht möglich ist. ;)

    Gruß

    Rainer

    xun1337 schrieb:

    "Value" ist kein Member von "System.Windows.Forms.TextBox"


    Sorry, mein Fehler.

    Muss natürlich so heissen:

    VB.NET-Quellcode

    1. Dim Datum As Date = DateValue(Me.TextBox1.Text)


    Und wenn es dann nicht klappt, dann prüfe mal ob in der TextBox überhaupt ein gültiges Datum drinnen steht. ;)

    Gruß

    Rainer

    xun1337 schrieb:

    Meine eig das der text im MySQL feld in die textbox soll :>
    also is dort nix drin...


    Öhem ... WHAT!? o_O

    Ja okay ... dann wäre es aber mal interessant wo der Code ist der die SQL-Anweisung executed und das Record-/Dataset vorhält aus dem dann die Werte ausgelesen werden können.

    Bis jetzt sehe ich nur das Du den Inhalt einer TextBox einer Variablen zuweist und diesen Variablen-Inhalt an ein SQL-Statement als Filter-Parameter übergibst. Das war's ... da fehlt also alles was nötig ist um das zu erreichen was Du da gerade schreibst. Auch und vor allem die Connection zur Datenbank ... ohne die geht ja mal gar nichts. ;)

    Gruß

    Rainer

    xun1337 schrieb:

    ya und was mache ich falsch =/ die connection geht ja und ohne das datum geht alles ... mit dem datum gehts net -.-


    Zum Thema Datum siehe oben ... Du musst das SQL-Statement genauso schreiben wie ich. Mir stellst sich gerade nur dann die Frage wie und wo befüllst Du die Variable Datum den bevor Du das SQL-Statement erstellst?

    Und das Du mit Deinem Code aus dem Eingangspost kein Text-Feld befüllen kannst ... ist klar, oder?

    VB.NET-Quellcode

    1. Dim Datum As Date = ...


    Damit befüllst du die Variable Datum aber nicht die TextBox.

    Um die TextBox zu befüllen musst Du den Weg andersrum gehen:

    VB.NET-Quellcode

    1. Me.TextBox1.Value = Datum.ToString


    Allerdings zuvor die Variable Datum dann mit dem Ergebnis aus Deiner SELECT-Abfrage befüllen.

    Aber da ich den Rest-Code nicht kenne kann ich gerade natürlich nur raten woran es liegen könnte.

    Gruß

    Rainer