someone-m hat gesagt.:
SELECT WarenID, Gruppe, Text1, Text2, MwSt, Preis
FROM Waren
WHERE (Text1 LIKE '%' + @text + '%') OR
(Text2 LIKE '%' + @text + '%')
Diese SQl Abfrage Funktioniert einwandfrei im Abfrage Generator, rufe ich die Abfrage aus dem Prgramm ab funktionieren die Platzhalter nicht... Ich bekomme nur einen Datensatz wenn ich exakt einen der Inhalte der Textfelder eingebe...
Bin etwas Ratlos, jemand eine Idee oder workaround für mich ?
Danke
Jörg
Ich hab das auch mit einen Beispielprogramm von Microsoft gegengecheckt. Auch bei dem Programm funktioniert es nur im Abfrage Generator
Jörg hab das selbe Problem. Du willst ja das deine Textbox als Suchkreterium für die Abfrage dient, und du automatisch mit Platzhaltern wärend der Laufzeit arbeiten möchtest.
Sprich ich will alle finden die mit Mü anfangen.
Versuchs mal so:
im SQL Statement deines SQLDataAdpaters:
SELECT WarenID, Gruppe, Text1, Text2, MwSt, Preis
FROM Waren
WHERE (Text1 LIKE @text)
und im Code deines Click Events:
WarenTableAdapter.SelectCommand.Parameters("@text").Value = SuchstringTB.Text
jetzt sollte es in der Laufzeit klappen. Jedoch muss der Platzhalter selbst eingegeben werden.
z.b. Muster%
Hab jedoch selber das Problem , das ich dem Anwender die selbsteingabe der Platzhalter ersparn möchte.
Vielleicht Hilft dir das hier weiter hab das bei MSDN gefunden:
Wenn Parameter keinen Namen besitzen (wie in gespeicherten Prozeduren), werden die Elemente in der Auflistung den vom Befehl benötigten Parametern nach der Position zugeordnet. Wenn der Befehl eine gespeicherte Prozedur ist und einen Wert zurückgibt, wird das erste Element in der Auflistung (Element Null) für diesen Rückgabewert reserviert.
Sie können daher über die Indexposition in der Auflistung auf einzelne Parameterobjekte verweisen. Allerdings unterstützen Parameterobjekte auch eine ParameterName-Eigenschaft, die die Möglichkeit bietet, unabhängig von der Reihenfolge der Parameter auf die verschiedenen Parameter zu verweisen. Die beiden folgenden Anweisungen könnten z. B. äquivalent sein (vorausgesetzt, der zweite Parameter in der Auflistung hat den Namen Title_Keyword):
' Visual Basic
' Encloses the keyword in SQL wildcard characters.
titleKeyword = "%" & txtTitleKeyword.Text & "%"
OleDbDataAdapter1.SelectCommand.Parameters(1).Value = titleKeyword
OleDbDataAdapter1.SelectCommand.Parameters("Title_Keyword").Value = titleKeyword
Die Verwendung eines Parameternamens ist im Allgemeinen viel besser als der Verweis auf Parameter über einen Indexwert, weil sich der Verwaltungsaufwand reduziert, wenn die Anzahl der Parameter geändert wird. Sie müssen sich dann nicht merken, ob eine gespeicherte Prozedur einen Wert zurückgibt. Verweise auf Parameter nach Namen sind zwar mit etwas mehr Aufwand verbunden als Verweise über den Indexwert, der Mehraufwand wird aber durch eine komfortablere Programmierung und eine einfachere Verwaltung der Anwendung ausgeglichen.
Erstellen von Parameterwerten
Der Wert eines Parameters kann auf zwei Arten erstellt werden:
Durch explizites Festlegen der Value-Eigenschaft eines Parameters.
Durch Zuordnen der Parameter zu Spalten in einer Dataset-Tabelle, so dass die Werte bei Bedarf aus Datenzeilen extrahiert werden können.
Sie legen den Parameterwert für Auswahlparameter explizit fest, wenn Sie ein Dataset mit Daten füllen oder einen Befehl aufrufen. Die Anwendung im obigen Beispiel mit der Suche nach Büchern könnte ein Textfeld besitzen, in das Benutzer ein Titelschlüsselwort eingeben. Sie würden den Wert des Parameters in diesem Fall explizit auf den Text des Textfelds setzen, bevor Sie die Fill-Methode des Adapters aufrufen. Der dafür erforderliche Code könnte dann wie unten gezeigt aussehen.
In diesem Beispiel wird der Inhalt eines Textfelds vor dem Füllen eines Datasets als Parameter erstellt.
Jetzt kommt der Interessante Teil!
Code für das Event!
' Visual Basic
' Encloses the keyword in SQL wildcard characters.
titleKeyword = "%" & txtTitleKeyword.Text & "%"
OleDbDataAdapter1.SelectCommand.Parameters("Title_Keyword").Value = titleKeyword
OleDbDataAdapter1.Fill(dsAuthors1)
Versuchs mal in dem du den Code auf deinen Anpasst:
müsste so sein
textTB= "%" & SuchstringTB.text & "%"
WarenTableAdapter.SelectCommand.Parameters("@text").Value = textTB
wie gesagt nur ne paar Vorschläge
Falls du es hinbekommen solltest meld dich hier mal.
Gruss Sven