tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
959
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    someone-m someone-m ist offline Rookie
    Registriert seit
    Apr 2006
    Ort
    Steenfeld (SH)
    Beiträge
    6
    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
     

  2. #2
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    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%')
     

  3. #3
    someone-m someone-m ist offline Rookie
    Registriert seit
    Apr 2006
    Ort
    Steenfeld (SH)
    Beiträge
    6
    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.
     

  4. #4
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Und wo befüllst du die Parameter?
     

  5. #5
    rumsrumsrums rumsrumsrums ist offline Rookie
    Registriert seit
    Apr 2006
    Beiträge
    7
    Zitat Zitat von someone-m
    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
    Geändert von rumsrumsrums (03.05.06 um 01:08 Uhr)
     

  6. #6
    someone-m someone-m ist offline Rookie
    Registriert seit
    Apr 2006
    Ort
    Steenfeld (SH)
    Beiträge
    6
    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
     

  7. #7
    rumsrumsrums rumsrumsrums ist offline Rookie
    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

  1. winsock.getdata unter vb2005?
    Von flrz80 im Forum .NET Web und Kommunikation
    Antworten: 3
    Letzter Beitrag: 11.07.07, 07:14
  2. Arrays.fill() Problem
    Von NetPerformance im Forum Java
    Antworten: 1
    Letzter Beitrag: 08.01.06, 00:45
  3. RealFlow Fill-Deform und C4D-Text
    Von meta_grafix im Forum Cinema 4D
    Antworten: 8
    Letzter Beitrag: 30.06.05, 17:41
  4. VB 6 Problem mit winsockets und Getdata
    Von Inkubus im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 14.04.05, 15:27
  5. Fill() erlaubt nur 1 Parameter?
    Von Deemax im Forum .NET Archiv
    Antworten: 0
    Letzter Beitrag: 08.11.04, 09:27