Autor Beitrag
alexschultze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 317



BeitragVerfasst: Do 07.11.02 20:19 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Do 07.11.02 22:52 
Hallo Alex,

wenn Nickname der primary key ist (und dieser ausgewählt ist), dann geht das wie folgt:

ausblenden 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 .

_________________
Live long and prosper
MrSpock \\//
alexschultze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 317



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...


Zuletzt bearbeitet von LCS am Fr 08.11.02 15:27, insgesamt 1-mal bearbeitet
alexschultze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 317



BeitragVerfasst: Fr 08.11.02 15:27 
gut gut. ich verwende locate auf einem Index.
Würde da findkey trotzdem schneller sein?
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
alexschultze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 317



BeitragVerfasst: Fr 08.11.02 16:09 
wenn ich filtere, dann würden ja sicherlich beide nur in diesem Filter arbeiten, oder?
(filtered=true)