ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
959
959
EMPFEHLEN
-
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
-
Zeig halt mal den relevanten Sourcecode her, dann können wir dir schon sagen, was du falsch machst ...
Und sollte das Statement nicht eher so aussehen:
Code :1 2 3 4
SELECT WarenID, Gruppe, Text1, Text2, MwSt, Preis FROM Waren WHERE (Text1 LIKE '%@text%') OR (Text2 LIKE '%@text%')
-
Der Code ist:
Me.WarenTableAdapter.FillBySuchText(Me.XpressPizzaDataSet.Waren, SuchstringTB.Text)
Hinter FillBySuchText verbirgt sich die SQL Abfrage
Wie schon geschrieben, die SQL Abfrage ist Ok solange sie nicht im Programm aufgerufen wird.
-
Und wo befüllst du die Parameter?
-
03.05.06 01:00 #5
- Registriert seit
- Apr 2006
- Beiträge
- 7
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.
Zitat von someone-m
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 SvenGeändert von rumsrumsrums (03.05.06 um 01:08 Uhr)
-
Moin, moin,
habe das Problem gelöst. Der "Fehler" war folgender:
Die Textvariablen wurden intern von VB auf "NChar" gesetzt. Dadurch wurden nur strings in fester länge gesucht. Nachdem ich das in "NvarChar" geändert hatte funktioniert es Problemlos. Im Dataset.xsd über die entsprechenden Eigenschaften der Variablen in den Tabellen. Das Problem entsteht wohl auch nicht, wenn man beim Anlegen der Tabellen nvarchar als Typ festlegt. Habe ich allerdings nicht ausprobiert.
DIe Lösung habe ich über den Support von MS erhalten. 2 Anfragen sind da ja kostenlos
Gruß
Jörg
-
03.05.06 11:45 #7
- Registriert seit
- Apr 2006
- Beiträge
- 7
Hallo Jörg, du bist der beste!
hab mir die Frechheit erlaubt und deinen Typ mal ausprobiert. Und siehe da, es geht.
So ne blöder , hab die letzten Wochen nur an diesem Problem gehockt.
deine Where Klausel funktioniert genauso wie ich mir es gewünscht hab. Soll man erstmal drauf kommen das man den DataTyp auf NVarChar zu setzen hat.
Aber am Ende ist es meist wieder Logisch.
Ist einfach nichts für Leute mit ner Denkschwäche
Also nochmal besten Dank
hast mir mit deinem Post ne Menge nerven gespart.
Gruss aus Kiel
Sven
Ähnliche Themen
-
winsock.getdata unter vb2005?
Von flrz80 im Forum .NET Web und KommunikationAntworten: 3Letzter Beitrag: 11.07.07, 07:14 -
Arrays.fill() Problem
Von NetPerformance im Forum JavaAntworten: 1Letzter Beitrag: 08.01.06, 00:45 -
RealFlow Fill-Deform und C4D-Text
Von meta_grafix im Forum Cinema 4DAntworten: 8Letzter Beitrag: 30.06.05, 17:41 -
VB 6 Problem mit winsockets und Getdata
Von Inkubus im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 14.04.05, 15:27 -
Fill() erlaubt nur 1 Parameter?
Von Deemax im Forum .NET ArchivAntworten: 0Letzter Beitrag: 08.11.04, 09:27





Zitieren
Login





