![]() |
Datenbank: SQLite • Version: 3.7.15.2 • Zugriff über: Programm
Suche in Adressbuch
Hallo an alle fleißigen Tüftler da draußen ;-)
Ich zerbreche mir grade den Kopf. Ich habe eine Tabelle "Autoren" mit jeweils einer Spalte für den "Nachname" und für den "Vorname". Ich möchte nun eine Suche gestalten, bei der nur Ergebnisse zurückgeliefert werden, wenn wirklich der Vor- und Zuname in einem Datensatz derselbe sind. Also nichts mir dem SQL LIKE Befehl. Ich bekomme es nicht hin. Wenn ich folgende Beispielabfrage durchführe:
Code:
, dann wird mir dennoch ein True zurückgegeben, obwohl es nur einen Bertolt Brecht in der DB gibt, d.h. es soll nur ein True zurückgeliefert werden, wenn beide Werte stimmen, in etwa so:
"SELECT * FROM Autoren WHERE Nachname = 'Brecht' AND Vorname = 'Klaus'"
Code:
. Das funktioniert leider aber nicht. Kann mir bitte jemand auf die Sprünge helfen?
"SELECT * FROM Autoren WHERE Nachname = 'Brecht' AND Vorname = 'Bertolt'"
Beste Grüße hansklok |
AW: Suche in Adressbuch
Dein erstes Statement ist völlig korrekt, wenn ich nichts übersehen habe. Wie genau sieht denn die Ergebnismenge aus?
|
AW: Suche in Adressbuch
Es werden eben alle Personen ausgegeben, deren Nachname "Brecht" ist, unabhängig davon, wie der Vorname lautet...
|
AW: Suche in Adressbuch
Sry, aber da musst Du irgend etwas falsch machen, so schlecht kann SQLite nicht sein. Wird das Statement evtl. noch zwischendurch unbeabsichtigt geändert? Du darfst auch gern einmal den relevanten Code zeigen.
|
AW: Suche in Adressbuch
Hallo...
Code:
+
"SELECT * FROM Autoren WHERE Nachname = 'Brecht' AND Vorname = 'Klaus'"
Zitat:
|
AW: Suche in Adressbuch
Aufgepasst, dass ganze ist nicht in Delphi geschrieben, sondern RealBasic ;-)
Code:
Dim AutorVorname As String =Trim(Vorname)
Dim AutorNachname As String =Trim(Nachname) Dim rsAutor As RecordSet = DB.SQLSelect("SELECT * FROM Autoren WHERE (Nachname = '" + AutorNachname + "' AND Vorname = '" + AutorVorname + "')") // Alternative Dim rsAutor As RecordSet = DB.SQLSelect("SELECT * FROM Autoren WHERE (Nachname = '" + AutorNachname + "' AND Vorname LIKE '" + AutorVorname + "%'") //wenn Autor bereits vorhanden If rsAutor <> Nil Then Return True 'Do Until rsAutor.EOF 'If (Lowercase(rsAutor.Field("Nachname").StringValue) = Lowercase(AutorNachname)) And (Lowercase(rsAutor.Field("Vorname").StringValue) = Lowercase(AutorVorname)) Then 'AutorenID = rsAutor.Field("AutorenID").IntegerValue ' 'Else 'Return False 'End If 'rsAutor.MoveNext 'Loop Else Return False End If |
AW: Suche in Adressbuch
Ich hab keine Ahnung von RealBasic, aber was ist, wenn Du zusätzlich auf EOF prüfst?
Code:
Syntax ist natürlich ggf. anzupassen.
If (rsAutor <> Nil) and (not rsAutor.EOF) Then
Return True |
AW: Suche in Adressbuch
Oder evtl auf count
|
AW: Suche in Adressbuch
...verdammt, dann gibt er mir dennoch False zurück... ich muss nochmal die Strategie überdenken, vielleicht geht das ja auch anders, obwohl ich es sehr komisch finde. Psydocode von Delphi kann ich ohne weiteres in RealBasic umschreiben, also keine Sorge und erstmal Danke fürs mitdenken ;-)
|
AW: Suche in Adressbuch
Wenn false zurückkommt, ist das doch richtig :gruebel:.
|
AW: Suche in Adressbuch
wie, was? Nein, oder ich verstehe etwas nicht.
Ich prüfe ob Vor- und Nachname vorhanden, wenn ja, dann True, sonst False. Oder verstehe ich da etwas falsch? ;-) |
AW: Suche in Adressbuch
So sehe ich das auch. Du hast aber doch den umgekehrten Fall geschildert: Nachname vorhanden, aber nicht in Kombination mit dem Vornamen, trotzdem true als Ergebnis. Oder kommt jetzt immer false zurück, auch bei vorhandenem Datensatz?
|
AW: Suche in Adressbuch
Zäume das Pferd doch mal anders herum auf:
Code:
... ohne Gewährleistung für die Syntax...
Dim AutorVorname As String =Trim(Vorname)
Dim AutorNachname As String =Trim(Nachname) Dim rsAutor As RecordSet = DB.SQLSelect("SELECT * FROM Autoren WHERE (Nachname = '" + AutorNachname + "' AND Vorname = '" + AutorVorname + "')") // Alternative Dim rsAutor As RecordSet = DB.SQLSelect("SELECT * FROM Autoren WHERE (Nachname = '" + AutorNachname + "' AND Vorname LIKE '" + AutorVorname + "%'") Return False //wenn Autor bereits vorhanden If rsAutor <> Nil Then 'If not rsAutor.EOF Then // ggf. rsAutor.IsEmpty oder über rsAutor.Count (RecordCount) ... also quasi ist Leer 'Return True 'End If End If |
AW: Suche in Adressbuch
Es ist mir ein Rätsel,
nachdem ich die letzten 1,5 h damit verbracht habe alle möglichen Varianten der Abfrage zu checken, funktionierts plötzlich doch mit:
Code:
Vielen Dank für euren Einsatz, auch wenn ich mittlerweile nicht mehr aktiv mit Delphi programmiere, ich weiß schon, warum ich weiterhin in diesem Forum aktiv bin.
"select * from Autoren where Nachname = '"+ Nachname +"' AND Vorname = '"+ Vorname +"'"
HG HansKlok |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz