komplexer dbf Index

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

komplexer dbf Index

Beitrag von arturx »

Wie erstellt man zusammengesetzte/calculated tdbf-Indizes,
sodass sie sich nicht einfach nur auf 1 Feld beziehen ?
- Mit einem einfachen Index auf ein berechnetes Feld scheint es nicht zu gehen,
- da dieses beim nächsten "open" als nicht existierend angemahnt wird:
- "Index based on unknown field"

mögl.: Alternativen :
1. copy(Namefeld.asstring,3,10)+ (IDFeld.asinteger-20); // aber wie geht das wirklich ???
...(Ich weiß, dass das ein recht abstruses Beispiel ist, aber es enthält das komplette Problem).

2. wie bekommt man tdbf dazu, ein berechnetes Feld als Indexfeld anzuerkennen
...(das wäre die eleganteste Lösung)
.

baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Re: komplexer dbf Index

Beitrag von baba »

arturx hat geschrieben: 1. copy(Namefeld.asstring,3,10)+ (IDFeld.asinteger-20); // aber wie geht das wirklich ???
...(Ich weiß, dass das ein recht abstruses Beispiel ist, aber es enthält das komplette Problem).
.


Ungleiche Typen, String + Int funktionieren nicht.

So solle es klappen:

Code: Alles auswählen

copy(Namefeld.asstring,3,10)+ IntToStr(IDFeld.asinteger-20);


Gruß
Baba.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: komplexer dbf Index

Beitrag von af0815 »

arturx hat geschrieben: 2. wie bekommt man tdbf dazu, ein berechnetes Feld als Indexfeld anzuerkennen
...(das wäre die eleganteste Lösung)
.


Nachdem du da mit Desktopdatenbanken haderst, würde ich sage, zuerst berechnen, dann in der DB mitspeichern und es geht dann sauber mit dem Indizieren.

Philosophisch betrachtet:
Es hat einen Sinn warum es Desktop und Serverbasierende Datenbanken gibt. Mögliche Lösungen / Denkweisen aus der Serverwelt passen nicht zu 'einfachen' Datenbanken.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

Re: komplexer dbf Index

Beitrag von arturx »

1.
af0815 hat geschrieben:Baba : "copy(Namefeld.asstring,3,10)+ IntToStr(IDFeld.asinteger-20)"
geht zumindestens nicht als calculated Feld : der Compiler akzeptiert keinen Index auf ein berechnetes Feld.
Es gibt allerdings auch keine Möglichkeit, einen dbase-like string für die Indexerstellung zu hinterlegen (oder doch??).
(Dass String und integer so nicht zusammengehen war mir schon klar, entschuldigt das Beispiel)

2.
af0815 hat geschrieben:Nachdem du da mit Desktopdatenbanken haderst, würde ich sage, zuerst berechnen, dann in der DB mitspeichern
und es geht dann sauber mit dem Indizieren.
Philosophisch betrachtet:
Es hat einen Sinn warum es Desktop und Serverbasierende Datenbanken gibt. Mögliche Lösungen / Denkweisen aus der Serverwelt passen nicht zu 'einfachen' Datenbanken.
Den Index als Feld mitzuspeichern ist bis jetzt auch die einzige Lösung,
die mir eingefallen ist zu dem Problem. Ich wollte halt gern die Reundanz der Daten vermeiden.
Unter Delphi habe ich mit TOPAZ gearbeitet : da konnte man für dbase Dateien beliebig zusammengestzte Indizes
definieren und nutzen. (Auch sonst war ich von den Möglichkeiten von Topaz begeistert) .
Leider habe ich es bis heute nicht geschafft, Topaz zu portieren.
Der hersteller Softscience (http://www.softsci.com) scheint leider nicht daran interessiert zu sein,
ein Package für Lazarus anzubieten.
Klar ist bei einer größeren Anwendung die serverbasierte Lösung sinnvoll; aber selbst bei kleinen Anwendungen ist
es nett, etwas komplexere Sortierungen definieren zu können ohne gleich mehr Felder speichern zu müssen.

Vielleicht hat ja noch irgendjemand eine andere Idee /Alternative/Erweiterung zu tDBF ?!
Auf alle Fälle Danke für die Mühe !
Rainer

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: komplexer dbf Index

Beitrag von af0815 »

arturx hat geschrieben:Vielleicht hat ja noch irgendjemand eine andere Idee /Alternative/Erweiterung zu tDBF ?!
Auf alle Fälle Danke für die Mühe !
Rainer

Kann man dein Problem vielleicht so umdefinieren, das besser zu tDBF passt ?

Ich nehme an, du willst es unique haben und nutzt den Index dafür !?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: komplexer dbf Index

Beitrag von Christian »

Wofür willst du das machen ? ich habs schon oft hier erwähnt aber ich sags nochmal tDbf würd ich ganz schnell vergessen wenns um grössere Datenmengen geht. Ich hab mich dabei mal ziemlich angesch*****. Plötzlich war eine Wichtige Tabelle korrupt und kein Reparaturtool konnte mehr irgendwas machen. Ich würde für komplexere Sachen SQLite nehmen da kann man auch recht komplexe indexes definieren wunderbar filtern und das ganze ist noch schön flott und um deine Daten brauchst du dr auch keine Sorgen zu machen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Kuster Peter
Beiträge: 205
Registriert: So 2. Dez 2007, 20:47
OS, Lazarus, FPC: Windows XP Lazarus immer neueste Version
CPU-Target: xxBit
Wohnort: Schweiz

Re: komplexer dbf Index

Beitrag von Kuster Peter »

TDBF kannste total vergessen. DBF Dateien laufen nur mit XBase Entwicklungsumgebungen. Nimm SQLLite und Du hast keine solchen Probleme. Habs wirklich mit TDBF versucht, doch hatte nur Probleme genau wie Du. TDBF empfehle ich nur zum Einlesen alter Datenbankbestände.

Ansonsten hier noch ein Link zu einem TDBF Programm, mit Index und gut dokumentiert:

http://www.rgsoftware.de/

Peter

Antworten