SQL-Abfragen sind was ganz feines Statische SQL-Abfrage ' Beispiel für eine statische SQL-Abfrage "SELECT * FROM Adressen WHERE Name = 'Meier'" Variable SQL-Abfrage ' Beispiel für eine parametisierte SQL-Abfrage "SELECT * FROM Adressen WHERE Name = '" & strName & "'" Jetzt werden Sie sich fragen: "Was spielt es für eine Rolle, ob man im obigen Beispiel den Namen nun direkt angibt oder über die String-Variable strName? Wo sollte es da zu Problemen kommen? Auf was sollte man denn da besonders achten?" Fallbeispiel ' SQL-Abfragestring Dim SQL As String Dim Rs As Recordset SQL = "SELECT * FROM Adressen WHERE Name = '" & txtSuch.Text & "'" Set Rs = Db.OpenRecordset(SQL) Als Ergebnis erhält man nun alle Datensätze, bei denen im Feld 'Name' der gesuchte Eintrag gespeichert ist. Das funktioniert auch ziemlich lange einwandfrei, es gibt also keinerlei Reklamation seitens des Anwenders. Nun kommt der Tag x, jener Tag, an dem der Anwender zum Hörer greift und Ihnen mitteilt: Beim Suchen nach einem Kundennamen erscheint plötzlich der Laufzeitfehler 3075 - Syntaxfehler (fehlender Operator) in Abfrageausdruck.... Was nun? Warum ging's jahrelang gut und auf einmal erscheint eben genannter Fehler? Hmm... Welchen Namen hat denn der Anwender im Suchfeld eingegeben? Nun ja, er wollte einfach den Datensatz des Kunden O'Neil bearbeiten. O'Neil? - Halt! Was sucht denn das Hochkomma da im Namen? Was ist zu tun? Wie kann man dem vorbeugen? Die nachfolgende Funktion prüft, ob im angegebenen String Hochkommas vorhanden sind und ersetzt diese durch doppelte Hochkommas, so dass es zu keinem unerwarteten Fehler im SQL-Abfragestring kommt. Public Function SQLExpr(ByVal sExpr As String) As String Dim sPos As Integer sPos = -1 Do sPos = InStr(sPos + 2, sExpr, "'") If sPos > 0 Then sExpr = left$(sExpr, sPos) + "'" + Mid$(sexpr, sPos + 1) End If Loop Until sPos = 0 SQLExpr = sExpr End Function Unter Einbeziehung der SQLExpr-Funktion sieht der SQL-Abfragestring dann folgendermassen aus... ' SQL-Abfragestring Dim SQL As String Dim Rs As Recordset SQL = "SELECT * FROM Adressen WHERE Name = '" & _ SQLExpr(txtSuch.Text) & "'" Set Rs = Db.OpenRecordset(SQL) ...und Sie bekommen keine lästigen Anrufe seitens der Anrufer mehr Dieser Tipp wurde bereits 31.125 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. sevAniGif (VB/VBA) Anzeigen von animierten GIF-Dateien Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. |
||||||||||||||||
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. |