vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Datenbanken
Liste als Parameter für Abfrage 
Autor: Git-Git
Datum: 17.07.15 11:48

Hallo!

Ich hab ein Problem. Ich soll eine Abfrage machen, für welche die Parameter aber eine Mehrfachauswahl sein soll.

Ich habe ein Formular mit Listenfeld mit Mehrfahrauswahl erzeugt.
Ich habe die Daten aus dem Listenfeld jetzt mal in einen String umgewandelt und in ein Textfeld zwischengespeichert aber wie kann ich diese Daten nun als Parameter übergeben bzw. geht es besser gleich direkt die Listendaten zu übergeben, ohne sie in einen String umzuwandeln?

Ich hatte schon mehrere Ansätze komme aber bei keinem weiter. Weiß jemand vielleicht eine Einfache lösung?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste als Parameter für Abfrage 
Autor: Manfred X
Datum: 17.07.15 15:19

Hallo!

Ich vermute, zu jedem Deiner Auswahl-Items läßt sich eine
SQL-Where-Abfrage formulieren.
Diese Abfragen sind dann geeignet zu verknüpfen (AND, OR).
http://www.w3schools.com/sql/sql_and_or.asp
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste als Parameter für Abfrage 
Autor: Blackbox
Datum: 17.07.15 17:11

Hallo,

ich sehe keine andere Möglichkeit als die Mehrfachauswahl aus der Liste in einen String umzusetzen.
Können aus einer Liste zB mehrere Städte ausgewählt werden und die ausgewählten Städte wären in dem Beispiel:

Berlin
München
Hannover
Stuttart

so wäre eine Abfrage in SQL etwa so:

"SELECT * FROM ReiseFieber WHERE City IN 'Berlin','München','Hannover','Stuttgart'"

Wieso Du diesen String einer einer Textbox zwischenspeichern willst, will sich mir nicht erschließen.

Den SQL oben würde Oracle akzeptieren. Andere DBEngines vertragen vielleicht das Komma als ODER-Verknüpfung nicht, dann muss anstelle dem Komme eben:

"SELECT * FROM ReiseFieber WHERE City IN 'Berlin' OR 'München' OR 'Hannover' OR 'Stuttgart'"

gesetzt werden.

Beitrag wurde zuletzt am 17.07.15 um 17:15:02 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste als Parameter für Abfrage 
Autor: Git-Git
Datum: 20.07.15 07:49

Ja schon, die sache ist, dass die anzahl der Wher sachen ja variabel ist. kann man im SQL auch eine schleife rein machen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste als Parameter für Abfrage 
Autor: Git-Git
Datum: 20.07.15 07:52

Ja ok. aber die sache ist die, dass die Anzahl der Auswahlen variabel ist. kann man da irgendwie eine schleife machen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste als Parameter für Abfrage 
Autor: Git-Git
Datum: 20.07.15 12:58

Also ich hab jetzt eine Funtktion geschrieben, die die einzelnen teil ausliest, das funktioniert soweit auch.

hab im SQL jetzt so geschrieben:
.....
WHERE (
(
([Datenbank].Arg1)=fcDatenausStrg(Arg1_TF,1) Or
([Datenbank].Arg1)=fcDatenausStrg(Arg1_TF,2) Or
([Datenbank].Arg1)=fcDatenausStrg(Arg1_TF,3) Or
([Datenbank].Arg1)=fcDatenausStrg(Arg1_TF,4)
) And
(
([Datenbank].Arg2)=fcDatenausStrg(Arg2_TF,1)
) And
(
([Datenbank].Arg3)=fcDatenausStrg(Arg3_TF,1)
));

Wenn ich jetzt 4-2 Sachen für Arg1 Auswähle funktioniert es, wenn ich nur eine ausähle nicht...

Das ist meine Funktion:

Public Function fcDatenausStrg(str As String, Komma As Integer)
Dim a As String
Dim Pos As Integer
Dim Pos2 As Integer
Dim n As Integer
n = 1
Pos = InStr(1, str, ",", vbTextCompare)
If str = "" Then
fcDatenausStrg = "nix"
ElseIf Pos = 0 Then
fcDatenausStrg = "nix"
ElseIf Komma > 2 Then
Do While n < Komma - 1
Pos = InStr(Pos + 1, str, ",", vbTextCompare)
n = n + 1
If Pos = 0 Then
a = "nix"
Exit Do
End If
Loop
Pos2 = InStr(Pos + 1, str, ",", vbTextCompare)
If Pos > Pos2 Then
fcDatenausStrg = "nix"
ElseIf a = "nix" Then
fcDatenausStrg = a
Else
fcDatenausStrg = Mid(str, Pos + 1, Pos2 - Pos - 1)
End If

ElseIf Komma = 2 Then
Pos2 = InStr(Pos + 1, str, ",", vbTextCompare)
If Pos2 = 0 Then
fcDatenausStrg = Mid(str, 1, Pos - 1)
Else
fcDatenausStrg = Mid(str, Pos + 1, Pos2 - Pos - 1)
End If
ElseIf Komma = 1 Then
fcDatenausStrg = Mid(str, 1, Pos - 1)
End If
End Function

Sieht vielleicht jemand woran das liegt?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste als Parameter für Abfrage 
Autor: Git-Git
Datum: 21.07.15 10:54

Hab die Funktion etwas verbessert.

Public Function fcDatenausStrg(str As String, Komma As Integer)
    Dim a As String
    Dim Pos As Integer
    Dim Pos2 As Integer
    Dim n As Integer
        n = 1
    Pos = InStr(1, str, ",", vbTextCompare)
    If str = "" Then
        fcDatenausStrg = "nix"
    ElseIf Pos = 0 Then
        fcDatenausStrg = "nix"
    ElseIf Komma > 1 Then
        Do While n < Komma - 1
            Pos = InStr(Pos + 1, str, ",", vbTextCompare)
            n = n + 1
            If Pos = 0 Then
                a = "nix"
                Exit Do
            End If
        Loop
        Pos2 = InStr(Pos + 1, str, ",", vbTextCompare)
        If Pos > Pos2 Then
            fcDatenausStrg = "nix"
        ElseIf a = "nix" Then
            fcDatenausStrg = a
        Else
        fcDatenausStrg = Mid(str, Pos + 1, Pos2 - Pos - 1)
        End If
 
    ElseIf Komma = 1 Then
        fcDatenausStrg = Mid(str, 1, Pos - 1)
    End If
End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste als Parameter für Abfrage 
Autor: Git-Git
Datum: 21.07.15 11:00

OK Jetzt funktioniert es, ich danke euch VIELMALS!!!!!!!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel