Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Suche in Adressbuch (https://www.delphipraxis.net/173092-suche-adressbuch.html)

hansklok 6. Feb 2013 18:10

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:
"SELECT * FROM Autoren WHERE Nachname = 'Brecht' AND Vorname = 'Klaus'"
, 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:

Code:
"SELECT * FROM Autoren WHERE Nachname = 'Brecht' AND Vorname = 'Bertolt'"
. Das funktioniert leider aber nicht. Kann mir bitte jemand auf die Sprünge helfen?

Beste Grüße hansklok

DeddyH 6. Feb 2013 18:17

AW: Suche in Adressbuch
 
Dein erstes Statement ist völlig korrekt, wenn ich nichts übersehen habe. Wie genau sieht denn die Ergebnismenge aus?

hansklok 6. Feb 2013 18:18

AW: Suche in Adressbuch
 
Es werden eben alle Personen ausgegeben, deren Nachname "Brecht" ist, unabhängig davon, wie der Vorname lautet...

DeddyH 6. Feb 2013 18:29

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.

haentschman 6. Feb 2013 18:34

AW: Suche in Adressbuch
 
Hallo...
Code:
"SELECT * FROM Autoren WHERE Nachname = 'Brecht' AND Vorname = 'Klaus'"
+
Zitat:

dann wird mir dennoch ein True zurückgegeben
...paßt nicht zusammen. Das Statement gibt eine Ergebnismenge zurück. Um auf ein "True" zu kommen mußt du die Ergebnismenge untersucht haben. Wie sieht die entsprechende Funktion aus ?

hansklok 6. Feb 2013 18:35

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

DeddyH 6. Feb 2013 18:39

AW: Suche in Adressbuch
 
Ich hab keine Ahnung von RealBasic, aber was ist, wenn Du zusätzlich auf EOF prüfst?
Code:
If (rsAutor <> Nil) and (not rsAutor.EOF) Then
    Return True
Syntax ist natürlich ggf. anzupassen.

Aphton 6. Feb 2013 18:42

AW: Suche in Adressbuch
 
Oder evtl auf count

hansklok 6. Feb 2013 18:43

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 ;-)

DeddyH 6. Feb 2013 18:46

AW: Suche in Adressbuch
 
Wenn false zurückkommt, ist das doch richtig :gruebel:.

hansklok 6. Feb 2013 18:49

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? ;-)

DeddyH 6. Feb 2013 18:52

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?

haentschman 6. Feb 2013 18:56

AW: Suche in Adressbuch
 
Zäume das Pferd doch mal anders herum auf:
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 + "%'")
  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
... ohne Gewährleistung für die Syntax...

hansklok 6. Feb 2013 18:59

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:
"select * from Autoren where Nachname = '"+ Nachname +"' AND Vorname = '"+ Vorname +"'"
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.

HG HansKlok


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz