vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 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
SQL-Abfrage 
Autor: tYphOon
Datum: 04.06.05 15:12

Hi, ihr seid meine letzte Hoffnung. Ich schildere einfach mal mein Problem, vielleicht kann man mir ja helfen.:

Ich habe eine Tabelle mit vielen Kundenstammdaten.
Nun habe ich in VB ein Formular gemacht, in welchem man eben alles so eingibt was man sucht: Name,Vorname etc.

Nachdem man auf den Suchen Button drückt öffnet sich ein neues Formular, welches ein Datagrid beinhaltet und die gefundenden Daten anzeigen soll.

Mein Problem liegt beim Erstellen des SQL-Strings.
Nehmen wir mal nur Name und Vorname, dann würde der String
ja so ähnlich aussehen:
"Select Name,Vorname FROM Kundenstammdaten WHERE Name Like '" & Trim( _
  txtName.Text) & "%' AND Vorname Like '" & Trim(txtVorname.Text) & "%'"
Was aber ist, wenn der Benutzer keinen Namen eingibt, sondern nur den Vorname? Dann bekommt man ziemlich viele Fehlermeldungen, deswegen wollte ich das Problem umgehen in dem ich viele kleine IF-Abfragen eingebaut habe. Das resultat war nicht befriedigend, hat jemand eine bessere Idee wie ich weiterkommen würde?

Vielen Dank im Voraus!

mfg viTa
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL-Abfrage 
Autor: StoneX
Datum: 04.06.05 16:22

Hallo Typhoon,

was sind denn das für Fehlermeldungen? Wenn das Namensfeld leer ist, wird halt nur das Vornamensfeld ausgewertet. Wäre ja auch Wahnsinn, wenn Du beispielsweise 10 mögliche Suchfelder hast, hier alle Eventualitäten codemässig zu berücksichtigen. Also meiner Meinung müsst das so laufen...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL-Abfrage 
Autor: wincnc
Datum: 04.06.05 16:33

Hallo, versuch´s mal so:
Private Sub Command1_Click()
If txtVorname <> "" And txtName = "" Then
 "Select * FROM Kundenstammdaten WHERE Vorname Like '" & Trim(txtVorname.Text) _
   & "%'"
ElseIf txtName <> "" And txtVorname = "" Then
 "Select * FROM Kundenstammdaten WHERE Name Like '" & Trim(txtName.Text) & "%'"
Else
 "Select Name,Vorname FROM Kundenstammdaten WHERE Name Like '" & Trim( _
   txtName.Text) & "%'  AND Vorname Like '" & Trim(txtVorname.Text) & "%'"
End If
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL-Abfrage 
Autor: tYphOon
Datum: 05.06.05 13:54

@ Stonex

Wenn ich zb "Name" freilasse und nur bei "Vorname" was drin stehen habe, hängt sich das Programm ohne irgendeine Fehlermeldung auf . Und so habe ich probiert den Quelltext auf alle eventualitäten umzuschreiben, was sich aber sehr sehr schwer gestaltet und was mir nicht sehr klug vorkam.

@wincnc

Bin noch nicht lange bei VB, was bedeutet "<>" ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL-Abfrage 
Autor: StoneX
Datum: 06.06.05 08:09

Hallo Typhoon,

also der Weg von wincnc ist sicherlich eine Möglichkeit und bei zwei Parametern lässt sich das Problem so ja auch umgehen.

Klüger wäre es allerdings herauszufinden, warum sich das Programm aufhängt, wie Du sagst. M.E ist mit dem String alles in Ordnung. Probier doch zunächst mal die Abfrage codeseitig mit den gewünschten Abfragefeld(ern) auszuführen ohne den Weg über die Textfelder.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL-Abfrage 
Autor: tYphOon
Datum: 06.06.05 21:16

Ich hab es jetzt auf dem Weg von wincnc probiert und habe genau das selbe problem.
Wenn ich beide Textfelder ausgefüllt habe geht es. Wenn ich das 1. leer und das 2. voll habe auch. Aber wenn ich das 1. voll und 2. leer hängt sich das Programm ohne jede Rückmeldung auf. Ich verstehs echt nicht
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL-Abfrage 
Autor: me36835
Datum: 07.06.05 21:35

Hallo,

auch wenn ich vielleicht ein bisserl spät meinen Senf dazu gebe, aber ich würds so versuchen:

Private Sub Command1_Click()
Dim Ssql as String
 
Ssql="SELECT * FROM [kundenstammdaten] "
 
' Wenn Du keine Bedingung hast, die Du immer brauchst, nimm diese:
 
Ssql=Ssql & " WHERE 1=1" ' 1=1 ist immer Wahr
 
' ein keiner Dummy, um nicht den Übergang von
' WHERE-Schlüsselwort auf AND-Schlüsselwort
' irgendwie im Code regeln zu müssen
 
If Len(Trim(txtVorname.Text) ) >1 Then
     Ssql=Ssql & " AND [vorname] LIKE '" & Trim(txtVorname.Text) & "%'"
End If
 
If Len(Trim(txtName.Text))>1 Then
     Ssql=Ssql & " AND [name] LIKE '" & Trim(txtName.Text) & "%'"
End If
 
End Sub
Und richtig Cool finde ich so etwas, wenn noch mehr Textfelder hinzukommen:

Private Sub Command1_Click()
Dim Ssql as String
Dim Ctrl as Control ' unter VBA: MSforms.Control
 
Ssql="SELECT * FROM [kundenstammdaten] "
Ssql=Ssql & " WHERE 1=1" ' 1=1 ist immer Wahr
 
' bis hier hin wie oben
 
For Each Ctrl In FrmAuswahl.Controls
     If Ctrl.Type= vbTextfeld Then
' vbTextFeld - siehe Anmerkung 1
          If Len(Trim(Ctrl.Text) ) >1 Then
               Ssql=Ssql & " AND [" & Mid(Ctrl.name,4) & "] LIKE '" & Trim( _
                 Ctrl.Text) & "%'"
' Ctrl.name - siehe Anmerkung 2
          End If
     End If
Next Ctrl
End Sub
Anmerkung 1
Welcher Zahlwert dem Control Type "Textfeld" entspricht, musst Du selber rauskriegen.
Ich arbeite in VBA und da gehts mit MSforms und der Konstanten acCommandButton für den CommandButton.
Alternativ kann man auch auf Ctrl.Name Like "txt*" oder Left(Ctrl.Name,3)="txt" abfragen.

Anmerkung 2
Mid(Ctrl.name,4) geht natürlich nur dann, wenn die Textfeldnamen, wie in dem o.g. Beispiel mit den Tabellenfeld Bezeichnern ab Position 4 übereinstimmen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL-Abfrage 
Autor: tYphOon
Datum: 08.06.05 06:17

Danke für die Hilfe. Mitlerweile funktioniert es
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