MySQL - Abfrage mit Bedingung

Alfred_

Erfahrenes Mitglied
Hi,
irgendwie klappt es nicht!
Über eine DataRow mit der mitlaufenden Variable i zähle ich die übereinstimmende Anzahl von Eintragungen.
Der Compiler mag aber meine Version ab der Where-Klausel nicht.
Code:
		Dim com3 As New MySqlCommand("SELECT COUNT(*) FROM treffer" + _
		"WHERE ID ='" & i & "' And Hit =3)", myconn)
Was mache ich da falsch?
Grüße
 
Hi,

was hat das mit MySQL zu tun, wenn der Compiler Deine (VB-?)Syntax oder was auch immer anmeckert.
Außerdem wäre vermutlich die Fehlermeldung hilfreich.

LG
 
Hi,
was hat das mit MySQL zu tun, wenn der Compiler Deine (VB-?)Syntax oder was auch immer anmeckert.
Außerdem wäre vermutlich die Fehlermeldung hilfreich.
LG
Weil das ein (ab der Where-Klausel ein fehlerhafter) MySql-Syntax ist, wie unschwer zu erkennen ist?
Aber Du hast natürlich recht: ohne Fehlermeldung ist die Sache komplizierter.
Fehlermeldung: You habe an error ....blablabla : use near'='1' AND Hit=3)' at line 1.
Das Benutzerhandbuch hat mir auch keine verwertbare Hilfe geben können (zumindest habe ich keine gefunden)
Würde mich trotzdem freuen, wenn Du mir helfen könntest. Sollte aufgrund Deiner Fachkompetenz - wie ich kurz recherchierte - ein 'Klacks' sein.
Jedenfalls danke für Deine grundsätzliche Bereitschaft.
 
Hi,

Weil das ein (ab der Where-Klausel ein fehlerhafter) MySql-Syntax ist, wie unschwer zu erkennen ist?

Nein, das ist so nicht zu erkennen. Zumindest nicht für jemanden, der kein VB kann. Was bewirkt z.B. dieser Underscore da?
"Compiler" liest sich auch eher so, als wäre Deine VB-Syntax falsch... :rolleyes:

Schreibe das SQL-Statement mal testhalber in eine Variable und lass diese ausgeben. Fehlerhafte SQL-Statements lassen sich nicht besonders gut an ihrem generierenden Code debuggen. Aber ich tippe auf ein fehlendes Leerzeichen zwischen "treffer" und "WHERE"...

LG
 
Zuletzt bearbeitet:
Hi,
das ist der Code in VB.Net:
Code:
	Try
	  myconn.Open()
	  Dim com1 As New MySqlCommand("SELECT * FROM basedate ORDER BY lID ASC", myconn)
	  Dim da As New MySqlDataAdapter(com1)
	  Dim ds As New DataSet()
	  da.Fill(ds, "basedate")
	  Dim dt As DataTable = ds.Tables("basedate")
	  Dim cb As New MySqlCommandBuilder(da)
	  Dim row As DataRow
	  i = 1
	  For Each row In dt.Rows
		Dim com3 As New MySqlCommand("SELECT COUNT(*) FROM treffer" & _
                       "WHERE ID='" & i & "' AND Hit=3)", myconn)
		h_3 = CInt(Format(CType(com3.ExecuteScalar, Integer), "##,##0"))
                      'weitere Abfragen.....

		Hit = h_3
		'.......
		tot = 0
		i += 1
	  Next
	  da.Update(ds, "basedaten")
	Catch ex As Exception
	  MessageBox.Show(ex.Message, "Fehler! Datenupdate ist fehlgeschlagen!")
	Finally
	  myconn.Close()
	End Try
Da aufgrund der Fehlermeldung die Variable i als 1 interpretiert wird, könnte das möglicherweise nicht die Fehlerquelle sein. Ich habe aber in der Bezugstabelle 'treffer' keinen Eintrag mit der Zahl 1, der bei Vorhandensein im ersten Datensatz eingetragen werden sollte. Ob dieser fehlende Eintrag diese Execption auslöst ist die Frage. Da bin ich mit dieser Problematik zu wenig firm und wie könnte dieses Problem gelöst werden?
Ich hoffe auf Deine Erfahrung.
 
Alfred, mit VB-Code kann ich nichts anfangen. Und auch, wenn es PHP wäre:

Schreibe das SQL-Statement mal testhalber in eine Variable und lass diese ausgeben. Fehlerhafte SQL-Statements lassen sich nicht besonders gut an ihrem generierenden Code debuggen.

Du musst Dir das zusammengesetzte Statement ausgeben lassen. Dann kann man schauen, was falsch ist.

Aber ich tippe auf ein fehlendes Leerzeichen zwischen "treffer" und "WHERE"...

LG
 
Vorerst einmal danke für Deine Bemühungen.
Du musst Dir das zusammengesetzte Statement ausgeben lassen. Dann kann man schauen, was falsch ist.
Würde ich gerne, aber wie unschwer zu erkennen ist bin ich kein 'Experte' sondern nur ein sehr interessierter Laie. Ich kann mit dem Begriff: zusammengesetztes Statement' wenig anfangen.
Könntest Du mir da bitte weiterhelfen?
Danke
 
Hi,

na, Du setzt das SQL-Statement doch durch eine Stringverkettung zusammen. Du sollst Dir anschauen, was bei diesem Zusammensetzen herauskommt. Das kannst Du, indem Du das vorher in eine Variable schreibst und ausgeben lässt. Wie das in VB geht, weiß ich nicht. Ich kann kein VB. Solch elementare Sachen schlägst Du bitte selbst nach.
Wenn Du das gemacht hast, kannst Du sehen, wo in dem Statement ein Fehler ist. Und dann weißt Du auch, wo der Fehler in der Stringverkettung zu suchen ist.

Und immer noch:
kuddeldaddeldu hat gesagt.:
Aber ich tippe auf ein fehlendes Leerzeichen zwischen "treffer" und "WHERE"...

LG
 
Danke für Deine Antwort,
Du bist mir etwas zuvorgekommen.
Ich hätte nicht geglaubt, dass mir dieses Problem eine unruhige Nacht bescheren würde... Nächstens habe ich auf der Seite :http://www.w3schools.com/sql/sql_join_right.asp fürs erste die Lösung für die Fehlermeldung gefunden.Das funktioniert! Deine Vermutung war also u.a. richtig!
Lösung:
Code:
		Dim com3 As New MySqlCommand("SELECT COUNT(*) FROM treffer WHERE ID='i' AND Hit=3", myconn)
		h_3 = CInt(Format(CType(com3.ExecuteScalar, Integer), "##0"))
Meine Freude war aber von kurzer Dauer....Ich bekomme keine Rückmeldung obwohl in der Tab 'treffer' in der Spalte 'ID' Einträge vorhanden sind.
Mit der mitlaufenden
Code:
		MessageBox.Show(i & " " & tot & " " & h_3 & " " & h_4 & " " & h_5 & " " & h_6 & "")
bekomme ich die i-Werte aber ansonsten Null.
Es ist verflixt...
Grüße

PS.:
Ich habe zu Testzwecken für die Variable tot eine Zahl eingegeben und die Routine aktiviert. In allen Zeilen ist diese Zahl eingetragen. Aufruf und Speichervorgang ist also ok. Es muss also am Query liegen.
 
Zuletzt bearbeitet:
Hi,

na ja, jetzt steht in dem Abfragestring ja auch der Buchstabe i und nicht der Inhalt der Variablen i. Und einen Eintrag mit id="i" wird's wohl nicht geben.

LG

PS.:

PS.:
Ich habe zu Testzwecken für die Variable tot eine Zahl eingegeben und die Routine aktiviert. In allen Zeilen ist diese Zahl eingetragen. Aufruf und Speichervorgang ist also ok. Es muss also am Query liegen.

Aha. Aus Deinem Code geht allerdings nicht hervor, wofür die Variable "tot" überhaupt verwendet wird...
 

Neue Beiträge

Zurück