TSdfDataSet Filter nicht möglich

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

TSdfDataSet Filter nicht möglich

Beitrag von KOBOLD Messring GmbH »

Habe eine kleine generelle Frage:
Während man über die Filter-Funktion bei z.B. DBase (TDbf) fast wie bei SQL mit WHERE Datensätze auswählen kann, habe ich das bei der Text-Datei-basierten Komponente TSdfDataSet nicht hinbekommen, obwohl es da genauso die Eigenschaft Filter und Filtered gibt. ¿Ist das generell so, oder mach ich da was falsch?
Egal was ich da reinschreibe, es wird vollkommen ignoriert, auch totaler Blödsinn (z.B. einfach "grüne Hühner") führt nicht einmal zu einem DB-Fehler (Dbase sagt da ganz richtig "unknown field").
¿Sieht so aus, als ob die Filter-Funktion bei dem TSdfDataSet überhaupt (noch) nicht implementiert sei?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: TSdfDataSet Filter nicht möglich

Beitrag von mse »

KOBOLD Messring GmbH hat geschrieben: ¿Sieht so aus, als ob die Filter-Funktion bei dem TSdfDataSet überhaupt (noch) nicht implementiert sei?
OnFilterRecord sollte funktionieren:

Code: Alles auswählen

function TFixedFormatDataSet.RecordFilter(RecBuf: Pointer; ARecNo: Integer): Boolean;
var
  Accept: Boolean;
  SaveState: TDataSetState;
begin                          // Returns true if accepted in the filter
  SaveState := SetTempState(dsFilter);
  FFilterBuffer := RecBuf;
  PRecInfo(FFilterBuffer + FRecInfoOfs)^.RecordNumber := ARecNo;
  Accept := TRUE;
  if Accept and Assigned(OnFilterRecord) then
    OnFilterRecord(Self, Accept);
  RestoreState(SaveState);
  Result := Accept;
end;

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: TSdfDataSet Filter nicht möglich

Beitrag von KOBOLD Messring GmbH »

Hola lieber Martin,
ja, diese Funktion ist bei mir auch vorhanden (in /usr/share/fpcsrc/2.2.2/packages/fcl-db/src/sdf/sdfdata.pp der fp-compiler sollte das eigentlich auch verwenden), funktioniert aber trotzdem nicht :cry:
¡Ist mir aber inzwischen egal! :lol: Denn ich habe mich für TDbf (also DBase) entschieden.
Ich brauche:
* eine Desktop-Datenbank, da ich - diesmal - keinen DB-Server verwenden kann.
* eine DB, die OHNE Client-Bibliotheken funktioniert, will auch kein ODBC verwenden, da ich keine aufwendige Installation und (fast) keinerlei Abhängigkeiten haben will, Motto: Programm-CD einlegen und los-gehts: Keine Installation, kein Eingriff ins System.
* aber Datenbank-Funktionalität, super wäre SQL (da ich über mehrere Tabellen Inner- und Outer-Joins machen müsste und Datensätze einschränken will), das geht aber nicht, also muss ich das wohl über Filter-Funktionen, MasterFields/MasterSource-Funktionen machen.
* aber nur wenig Datensätze (in den Stammdaten-Tabellen ca 100, in 3 Verknüpfungs-Tabellen maximal 25000 Datensätze (nur Integer mit Integer, keine Strings)
Meine Wahl fiel - gemäss dem Wiki - damit auf DBase, dass müsste dBase doch eigentlich schaffen.
¿Habt Ihr vielleicht damit Erfahrungen oder einen besseren Vorschlag?

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: TSdfDataSet Filter nicht möglich

Beitrag von mse »

KOBOLD Messring GmbH hat geschrieben: ja, diese Funktion ist bei mir auch vorhanden (in /usr/share/fpcsrc/2.2.2/packages/fcl-db/src/sdf/sdfdata.pp der fp-compiler sollte das eigentlich auch verwenden), funktioniert aber trotzdem nicht
Die Filter property wird nicht ausgewertet, du musst OnFilterRecord verwenden, zusätzlich muss Filtered:= true gesetzt werden. Funktioniert es immer noch nicht?
Meine Wahl fiel - gemäss dem Wiki - damit auf DBase, dass müsste dBase doch eigentlich schaffen.
¿Habt Ihr vielleicht damit Erfahrungen oder einen besseren Vorschlag?
SQLite3, eventuell statisch eingebunden? Die SQLite3 Lizenz erlaubt es AFAIK.

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: TSdfDataSet Filter nicht möglich

Beitrag von KOBOLD Messring GmbH »

mse hat geschrieben:SQLite3, eventuell statisch eingebunden?
¿Wie macht man denn das?
Alles was ich in den Tutorials darüber gefunden habe, besagt, dass man zuerst die Bibliotheken installieren muss, gerade aber dass möchte ich vermeiden.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: TSdfDataSet Filter nicht möglich

Beitrag von mse »

Da müsste in der unit sqlite3conn in uses sqlite3dyn durch sqlite3 ersetzt werden (nicht getestet).
Die Mitgabe von sqlite3.dll ist aber auch kein Problem, unter Windows einfach in das gleiche Verzeichnis wie die Applikations-exe-Datei kopieren.

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: TSdfDataSet Filter nicht möglich

Beitrag von KOBOLD Messring GmbH »

mse hat geschrieben:uses sqlite3dyn durch sqlite3 ersetzt werden (nicht getestet).
Das funktioniert leider nicht, dann findet er diverse Methoden (?) oder Procedure nicht, die es offenbar nur in sqlite3dyn gibt.
naja, trotzdem vielen Dank.

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: TSdfDataSet Filter nicht möglich

Beitrag von creed steiger »

Evtl. JanSQL?

http://forum.lazarus.freepascal.org/ind ... pic=6086.0" onclick="window.open(this.href);return false;

http://freepascal.org/contrib/db.php3?category=Database" onclick="window.open(this.href);return false;

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: TSdfDataSet Filter nicht möglich

Beitrag von Christian »

@Kobold Messring
von TDbf würd ich bei grösseren Datenmengen die auch halbwegs wichtig sein könnten dringendst abraten. Ich hab beim Prometheus damals erst Probleme bekommen nachdem ich den e-Mail Client dafür geschrieben habe und 500 Mails täglich die Datenbank belasteten aber dafür umso heftiger. Resultat waren zerstörte Datenbanken die kein DBase Reparaturtool wiederbeleben konnte. TDbf ist toll um was kleines zu machen oder vorhandene Datenbanken zu importieren in wichtigen Sytemen würd ich das nie wieder verwenden.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: TSdfDataSet Filter nicht möglich

Beitrag von mse »

KOBOLD Messring GmbH hat geschrieben:
mse hat geschrieben:uses sqlite3dyn durch sqlite3 ersetzt werden (nicht getestet).
Das funktioniert leider nicht, dann findet er diverse Methoden (?) oder Procedure nicht, die es offenbar nur in sqlite3dyn gibt.
Habe die MSEgui Version von tsqlite3connection mit einem Schalter für statisches linken der SQLite3 lib ausgestattet (trunk 2858).
Für statisches linken ist etwas Handarbeit notwendig. Für Linux:
Kompiliere mit den Parametern -dmse_sqlite3static -Cn.
In link.res ersetze

Code: Alles auswählen

INPUT(
-ldl
-lpthread
-lX11
-lsqlite3
-lc
)
durch

Code: Alles auswählen

INPUT(
-ldl
-lpthread
-lX11
/usr/lib/libsqlite3.a
/usr/lib/gcc/i586-suse-linux/4.3/libgcc.a
-lc
)
exakte Pfade gegebenenfalls anpassen.
Starte das script ppas.sh.
ldd sollte nun keine libsqlite3 Abhängigkeit mehr anzeigen:

Code: Alles auswählen

ldd ./sqlite
        linux-gate.so.1 =>  (0xffffe000)
        libdl.so.2 => /lib/libdl.so.2 (0xb7f21000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb7f07000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0xb7dd4000)
        libc.so.6 => /lib/libc.so.6 (0xb7c78000)
        /lib/ld-linux.so.2 (0xb7f52000)
        libxcb-xlib.so.0 => /usr/lib/libxcb-xlib.so.0 (0xb7c75000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb7c57000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0xb7c52000)
Zuletzt geändert von mse am Mo 2. Mär 2009, 09:43, insgesamt 1-mal geändert.

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: TSdfDataSet Filter nicht möglich

Beitrag von KOBOLD Messring GmbH »

@Christian: Vielen Dank für den Hinweis, habe keinerlei Erfahrungen mit DBase, aber ich glaube ich lasse die Finger davon und nehme SQLite
@Martin: ¡Vielen, vielen Dank! ich glaube so mache ich das, bist eine grossartige Hilfe.

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: TSdfDataSet Filter nicht möglich

Beitrag von Christian »

ja hab ich dann auch gemacht. Mit ZeOS und bin bis heut recht zufrieden damit. Multiuser ist nicht wirklich toll möglich mit SQLite aber es geht zur not auch.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

psycodad
Beiträge: 18
Registriert: Mi 13. Dez 2006, 12:57
OS, Lazarus, FPC: Win OS X (L 0.9.28 FPC 2.4.3)
CPU-Target: 32Bit/64Bit
Wohnort: Embrach ZH / Schweiz
Kontaktdaten:

Re: TSdfDataSet Filter nicht möglich

Beitrag von psycodad »

Kann nicht firebird als embedded gelinkt werden?
Bankraub: eine Initiative von Dilettanten. Wahre Profis gründen eine Bank.... Bertolt Brecht

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: TSdfDataSet Filter nicht möglich

Beitrag von mse »

psycodad hat geschrieben:Kann nicht firebird als embedded gelinkt werden?
Ich bin nicht sicher, ob die Lizenz statisches linken zulässt.

psycodad
Beiträge: 18
Registriert: Mi 13. Dez 2006, 12:57
OS, Lazarus, FPC: Win OS X (L 0.9.28 FPC 2.4.3)
CPU-Target: 32Bit/64Bit
Wohnort: Embrach ZH / Schweiz
Kontaktdaten:

Re: TSdfDataSet Filter nicht möglich

Beitrag von psycodad »

Auf jeden Fall gibts ne Integration in Lazarus.

http://sourceforge.net/project/showfile ... _id=260272" onclick="window.open(this.href);return false;

Wie das Lizenztechnisch aussieht, wird wohl auf der firebird homepage stehen.
Bankraub: eine Initiative von Dilettanten. Wahre Profis gründen eine Bank.... Bertolt Brecht

Antworten