Entwickler-Ecke
Datenbanken - Nach speziellem Datensatz suchen (und diesen modifizierern)?
alexschultze - Do 07.11.02 20:19
Titel: Nach speziellem Datensatz suchen (und diesen modifizierern)?
hi
ich habe mich gerade in lokale Datenbanken eingearbeitet. Ich arbeite mit den Standardkomponenten und komme mithilfe von einem ziemlich dicken Buch gut voran.
Ich mache also zum Eintragen folgendes:
Quelltext
1: 2: 3: 4: 5:
| table1.Append; table1.FieldByName('Nickname').AsString:='Greengrinch' table1.FieldByName('Passwort').AsString:='Servus2'; table1.FieldByName('Email').AsString:='Servus4'; table1.post; |
Jetzt habe ich nur ein kleines Problem: Das Feld Nickname ist redundant (oder war es nicht-redundant? Zumindest kommt da alles nur einmal vor und es ist ein Primary Key).
Nickname ist der Primärindex oder wie das Ding verdonnert noch mal heißt ;)
So, in dem Buch steht beschrieben wie man einen Filter setzt und die Prozedur 'findkey' , die mir aber offenbar auch nix nützt.
Ich will folgendes machen: ich möchte zuerst prüfen ob ein Datensatz mit dem Nicknamen bereits existiert und danach müsste ich wissen wie ich aus diesem einem speziellen Datensatz Daten auslesen kann (d.h. wie ich ihn einmal auswähle und dann mit ihm arbeite).
Oder ist es notwendig jedes mal einen Filter zu benutzen und diesen einen Datensatz zu filtern?
okay? ich habe mich so gut ich konnte informiert ;)
alex
MrSpock - Do 07.11.02 22:52
Hallo Alex,
wenn Nickname der primary key ist (und dieser ausgewählt ist), dann geht das wie folgt:
Quelltext
1: 2: 3: 4: 5: 6:
| if table1.FindKey([NeuerName]) then table1.Edit else begin table1.Append; table1.FieldByName('Nickname').AsString := NeuerName; end; |
Übrigens heißt es "unique" und nicht redundant :D .
alexschultze - Fr 08.11.02 13:48
okay ;)
also, klaro, ist primary und ausgewählt.
Ich habe bei recherchen auch neben der FIndKey Variante (wegen den Klammern ging die bei mir nicht! ich idi**) noch eine locate() Funktion.
Bei locate springt ttable, falls er den Datensatz findet, auf den ersten passenden Datensatz.
Wie folgt: Springt findkey dann auch auf den entsprechenden Datensatz?
oder: wie kann ich dieses 'springen' bei locate aussschalten?
LCS - Fr 08.11.02 15:25
Hi
| alexschultze hat folgendes geschrieben: |
Wie folgt: Springt findkey dann auch auf den entsprechenden Datensatz?
|
Ja
| alexschultze hat folgendes geschrieben: |
oder: wie kann ich dieses 'springen' bei locate aussschalten?
|
Gar nicht. Was würde eine Suchfunktion nützen wenn der gefundene Datensatz nicht geliefert wird :roll:
Der Unterschied: FindKey verwendet immer einen Index um einen exakt passenden Satz zu liefern, Locate funktioniert auch ohne, weil dann ein entsprechender Filter verwendet wird und ermöglicht das Arbeiten mit Teilschlüsseln.
Gruss Lothar
alexschultze - Fr 08.11.02 15:27
gut gut. ich verwende locate auf einem Index.
Würde da findkey trotzdem schneller sein?
LCS - Fr 08.11.02 15:29
Theoretisch sollten bei Verwendung eines Index beide Methoden gleich schnell sein. Aber was ist schon Theorie :wink:
Gruss Lothar
alexschultze - Fr 08.11.02 16:09
wenn ich filtere, dann würden ja sicherlich beide nur in diesem Filter arbeiten, oder?
(filtered=true)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!