| |
VB & DatenbankenSQL-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 | |
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... | |
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 | |
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 "<>" ? | |
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. | |
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 | |
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. | |
Re: SQL-Abfrage | | | Autor: tYphOon | Datum: 08.06.05 06:17 |
| Danke für die Hilfe. Mitlerweile funktioniert es | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere Infos
|
|
|
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
|
|