Frage zu SQL Befehl in VB 2010

  • VB.NET

Es gibt 76 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    Frage zu SQL Befehl in VB 2010

    Hallo zusammen,

    Ich schreibe zur Zeit an meine Bachelorarbeit ( Maschinenbau ). Im Rahmen dieser Arbeit habe ich viel Daten sammeln können und da es irgendwie langweilig ist diese nur in Tabellen mit in die Arbeit zu packen, dachte ich mir ich schreib ein kleines Programm welches auf eine Datenbank zugreifen kann ( ACCESS ) und mir über 6 ComboBox's durch falsifizieren eine geeignete Technologie am Ende ausspuckt. Nachdem ich nach 10 Stunden endlich geschafft habe eine Datenbank mit Visual Basic zu verknüpfen und auch tatsächlich mir Werte teilweise auslesen zu lassen komme ich nun zu einem kleinen aber weitreichenden Problem. Und zwar möchte ich im folgenden Programmtext ( Auschnitt aus meinem Quellcode ), die Abfrage mit mehren Bedingungen eben verknüpfen, diese Bedingungen stehen in meinen Combos und sind sozusagen Wortgleich mit denen in meiner Datenbank um mir das geskripte zu sparen dachte ich ich löse das am besten wie im folgenden. Nur Frage ich mich wie schaffe ich es die ComboBox1.Text richtig in den cmd.CommandText zu implementieren damit das funktioniert ? Bitte um Hilfe, hab zwar noch knapp 4 Wochen aber ich will mich damit nicht allzu lange aufhalten wollen.

    Visual Basic-Quellcode

    1. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    2. Try
    3. con.Open()
    4. cmd.CommandText = "SELECT * FROM dredger WHERE eg1 = ComboBox1.Text OR eg2 = ComboBox1.Text OR eg3 = ComboBox1.Text"
    5. reader = cmd.ExecuteReader
    6. Do While reader.Read
    7. TextBox1.Text = reader("tech")
    8. Loop
    9. reader.Close()
    10. con.Close()
    11. Catch ex As Exception
    12. con.Close()
    13. MsgBox(ex.Message)
    14. End Try
    15. End Sub


    Hier nochmal als Screenshot :








    Beste Grüße

    Don

    PS : Ich weiss dass es wenig Sinn macht die ComboBox1.Text Ausdrücke so einzupflanzen wie ich es oben gemacht habe, damit möchte ich nur mein Problem veranschaulichen :)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DonQuijote“ ()

    Erstmal VB-BBCode bitte: [code=vb][/code]

    Dann einfach so:

    Visual Basic-Quellcode

    1. cmd.CommandText = "SELECT * FROM dredger WHERE eg1 = " & ComboBox1.Text & " OR eg2 = " & ComboBox1.Text & " OR eg3 = " & ComboBox1.Text

    Da die Text-Eigenschaft vom Typ String ist, kann das ganze ohne weiteres verknüpft werden mit dem &-Operator.

    PS.: Hjertelig Velkommen!
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Superb! Ich probier das gleich mal aus. Danke.

    Mist folgender Fehler taucht auf :




    Hier mein kompletter Code :

    Visual Basic-Quellcode

    1. Imports System.Data.OleDb
    2. Public Class Form1
    3. Public con As New OleDb.OleDbConnection
    4. Public cmd As New OleDb.OleDbCommand
    5. Public reader As OleDb.OleDbDataReader
    6. Public anzahl As Integer
    7. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    8. Provider()
    9. End Sub
    10. Public Sub Provider()
    11. con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=D:\dredgers.accdb;"
    12. cmd.Connection = con
    13. End Sub
    14. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    15. Try
    16. con.Open()
    17. cmd.CommandText = "SELECT * FROM dredger WHERE eg1 = " & ComboBox3.Text & " OR eg2 = " & ComboBox3.Text & " OR eg3 = " & ComboBox3.Text
    18. reader = cmd.ExecuteReader
    19. Do While reader.Read
    20. TextBox1.Text = reader("tech")
    21. Loop
    22. reader.Close()
    23. con.Close()
    24. Catch ex As Exception
    25. con.Close()
    26. MsgBox(ex.Message)
    27. End Try
    28. End Sub
    29. End Class



    Hier noch die Testdatenbank :




    Jetzt fällt mir noch eine zusätzliche Frage ein (hat aber noch Zeit, muss ja erstmal das obige hinbekommen) und zwar, kann es ja durchaus vorkommen dass mehrere Technologien zutreffen werden, wie kann ich das in meiner einzelnen TextBox1.Text ausgeben ? Also bspw "Schneidkopfsaugbagger, Laderaumsaugbagger usw." Bis jetzt wird mir beim Vergleich nur der erste angezeigt.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „DonQuijote“ ()

    ich kann dir nur empfehlen: Lass das erstmal mitte Datenbank.
    Für so Kleinkram fährst du mit Dataset-Only viel besser, und gewöhnst dir gleichzeitig einen sauberen Programmierstil an: vier Views-Videos
    Bestimmte Sachen suchen dann einfach mit Linq aus dem Dataset.
    Linq ist ähnlich Sql, nur hilft dabei Intellisense, während du in sql jeden besch... Fehler erst beim Testlauf erfährst, und auch noch mit so total unverständlichen Meldungen.
    Wirklich: wenn du das bis zur Abgabe noch fertig kriegen willst - besser ohne den Db-Krampf.

    DonQuijote schrieb:

    Danke @diylab, geht aber auch nicht

    Na Moment mal bitte..

    Wenn ich mir Deinen Screenshot ansehe, dann ist es natürlich so nicht richtig - bei Dir sind alle Hochkommas an der falschen Stelle!
    Hast Du denn meinen Vorschlag übernommen und richtig hingesehen?

    Denn wenn ich das mal nachstelle und diesen kleinen Test bei mir ausführe:

    VB.NET-Quellcode

    1. MessageBox.Show("SELECT * FROM dredger WHERE eg1 = '" & ComboBox1.Text & "' OR eg2 = '" & ComboBox1.Text & "' OR eg3 = '" & ComboBox1.Text & "';")

    ..dannn bekomme ich folgende Anzeige:


    ..die dann auch als Query passen würde.
    Perfekt danke! So komm ich heute vormittag gut weiter!

    Ich werde die Zeile jetzt um die 6 Combos erweitern, hoffe klappt da alles.


    Hast du eine Idee wie ich mir jetzt auch mehrere Treffer in die TextBox auspucken lassen kann ??




    DonQuijote schrieb:

    Hast du eine Idee wie ich mir jetzt auch mehrere Treffer in die TextBox auspucken lassen kann ??

    VB.NET-Quellcode

    1. TextBox1.AppendText(reader("tech"))


    Aber so richtig wohl ist mir bei der Sache, die Du da machst, nicht :/ ..
    Das ist alles Gefrickel - ist Dir schon klar?
    Und Dein QuellCode sollte nicht in die falschen Hände geraten, sonst machst Du vielleicht Deinen Bachelor noch mal von vorne :D ..
    Ja Hehe :) Das ist aufjedenfall gefrickel. Aber so lange es funktioniert =)

    Ich spiel hier mal den vormittag rum, ich berichte weiter ob's klappt =)

    Danke nochmals.

    PS : Genies den schönen Tag in B, in Kreuzberg ist zumindest gutes Wetter wenn ich so aus dem Fenster schaue

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DonQuijote“ ()

    Die selbe Fehlermeldung hattet Du doch schon ganz oben, bevor Du die Tipps bekamst!
    Hast Du vom dem was Du da tust, irgend etwas verstanden?
    Lass Dir doch etwas anzeigen, wenn so etwas kommt. In der MessageBox oder setz einen Breakpoint und geh mit der Maus über die Stellen und nimm diesen Try-Catch Block raus, solange Du nicht weißt wo, wann und wieso es knallt.
    Ich habe keinen Bock mehr, wenn Du nicht mitarbeitest - sorry :S ..
    Ich war zu voreilig, sorry, deswegen hab ich den Post nochmal überarbeitet (s.o.) , hatte die falsche Datenbank :)


    Hmm.... aber anscheinend spuckt er mir auch quatsch aus nur wenn einer der ComboBoxen den Wert der Datenbank trifft. Ist das AND zwischen denen nicht eindeutig ? Also so al la : nur wenn daten1 und daten2 und daten3 spucke mir Ergebnis aus ???

    Visual Basic-Quellcode

    1. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    2. Try
    3. con.Open()
    4. cmd.CommandText = ("SELECT * FROM dredger WHERE eo1 = '" & ComboBox1.Text & "' OR eo2 = '" & ComboBox1.Text & "' OR eo3 = '" & ComboBox1.Text & "' OR eo4 = '" & ComboBox1.Text & "' OR eo5 = '" & ComboBox1.Text & "' AND beweg1 = '" & ComboBox4.Text & "' OR beweg2 = '" & ComboBox4.Text & "' OR beweg3 = '" & ComboBox4.Text & "' AND eg1 = '" & ComboBox3.Text & "' OR eg2 = '" & ComboBox3.Text & "' OR eg3 = '" & ComboBox3.Text & "';")
    5. reader = cmd.ExecuteReader
    6. Do While reader.Read
    7. TextBox1.Text = reader("tech")
    8. Loop
    9. reader.Close()
    10. con.Close()
    11. Catch ex As Exception
    12. con.Close()
    13. MsgBox(ex.Message)
    14. End Try
    15. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DonQuijote“ ()

    DonQuijote schrieb:

    PS : Genies den schönen Tag in B, in Kreuzberg ist zumindest gutes Wetter wenn ich so aus dem Fenster schaue

    Mhh - in Steglitz scheint auch die Sonne und ich sitze im Büro. Das genieße ich total :whistling: ..

    Hmm.... aber anscheinend spuckt er mir auch quatsch aus nur wenn einer der ComboBoxen den Wert der Datenbank trifft. Ist das AND zwischen denen nicht eindeutig ?

    Also ab hier sollte jetzt mal ein anderer User übernehmen, ich wusste nicht, dass wir noch bei den SQL-Basics landen - danke!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „diylab“ ()

    Nicht wenigstens einen Tip ? :(

    Hab mir die Befehlsliste auch schon längst besorgt


    :) Und ich sitz zu hause und werde den ganzen Tag die BA schreiben und diese Datenbank hoffentlich mal zum laufen bekommen, das genies ich auch total :)


    DonQuijote schrieb:

    Ich schnall dass nur nicht warum er mir jetzt falsche Ergebnise auspuckt, ich dachte immer AND und OR wären eindeutige Dinge...


    Nimm doch einfach Deine Access-DB und mach sie direkt auf, dort hast Du doch jede Menge Unterstützung, Abfragegeneratoren etc. Da baust Du Dir Deine Abfragen BEQUEM zusammen, schaust Dir die Ergebnisse an und brauchst das SQL doch nur zu übernehmen - wo ist das Problem? Und denke auch an Herrn Gustav Klammer - der hat die Selbige erfunden :D !
    Ich werde mir wohl im Master ein paar Informatikfächer raussuchen... Datenbanken sind ja eigentlich schon was geiles

    3 getrennte Ergebnisse ? Welche aus den 3 Comboboxen resultieren ? Ich will doch nur dass ich alle meine Comboboxen einstelle und er mir dann die Datenbank filtert welches System da in Frage kommt :( Das kann doch kein Hexenwerk sein.

    Ich schau mal was ich mit dem Abfragegenerator hinbekomme