viele logische Felder : wie suchen ?

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

viele logische Felder : wie suchen ?

Beitrag von AUGE_OHR »

hi,

angenommen ich hätte die FELDer A,B,C,D,E.
für den "logischen" Zustand nehme ich mal 1 bzw 0

A = 1
B = 0
C = 1
D = 1
E = 0

nun suche ich Datensätze wo C=1 und D=1 sind.

Lösung :

a.) SET FILTER TO C=1 .and. D=1
b.) SET SCOPETOP TO "00110"
SET SCOPEBOTT TO "11111"
c.) ORDWILDSEEK("??11?")

während a.) "nicht in Frage kommt" bin ich mir
mit b.) und c.) nicht sicher ob das so funktioniert
und wie sich das verhält wenn man "viel mehr FELDer"
hätte.

Hat jemand schon mal so ein Problem unter Xbase++ /
Cl*pper gelöst ?

Gruss by OHR
Jimmy
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Jimmy,

Set Filter würde ich nich empfehlen, da es bei vielen Daten sehr sehr langsam ist.
Am besten wäre meiner Meinung nach einen Index auzusetzen und Set Scope (wie unter b und c) zu benutzen. Das wäre zumindest sehr schnell.
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi Jimmy,

a) geht wenn die DBF so bis 100 je nach Hardware auch 500 Datensätze hat.
b) ist möglich, wenn die führenden Bytes immer eine Rolle spielen.
c) solange von links mit ? gearbeitet wird, kannst du so sicher gut die gewünschten Daten maskieren uns suchen.

wenn du B und C benutzt, würde ich aber keine logischen Felder nutzen, deren Index dann mit IIF() aufgebaut werden müssten, sondern wi im Beispiel angedeutet C,1,0 verwenden. Speicherplatz ist gleich und du kannst dann 0,1 oder J,N oder was auch immer verwenden.
Gruß
Hubert
Antworten