probleme mit locate bei sdfdatasets

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
regaquak
Beiträge: 5
Registriert: Sa 6. Feb 2016, 14:45
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kürten

probleme mit locate bei sdfdatasets

Beitrag von regaquak »

Hallo zusammen,

ich hatte heute schon eine Frage ins Forum gestellt, aber ich bin grade etwas verzweifelt, dass ich Euch nochmal mit einer Frage belästigen muss:
Ich habe eine kleine Datenbank, Tabelle liegt im CSV-Format vor (kommagetrennt), kann mit einem SdfDataSet wunderbar angesteuert werden.

Wenn ich jedoch zwecks Suche mit dem "locate"-Befehl arbeiten will, funktioniert das nicht. Ich kriege keine Fehlermeldung, sondern das Suchkriterium scheint einfach nicht zu finden zu sein.
Um das auszutesten, habe ich einen Button mit folgendem Event versehen:

if not datasource1.DataSet.Locate('Name','Meier',[loCaseInsensitive,loPartialKey])
then ShowMessage('Kein Datensatz da');

Wie ich es auch drehe und wende: Ich erhalte die o.g. Fehlermeldung "Kein Datensatz da". Es gibt aber den "Meier" in der Tabelle im Feld "Name".

Liegt es an der CSV Tabelle? Am Dataset? Ich habe schon mehrere Stunden über diesem Fehler gebrütet, google spuckt auch so gar nix aus. Allüberall scheint locate zu fluppen. Nur beim Olli net. Das findet der Olli nicht nett!

LG
Olli

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6208
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: probleme mit locate bei sdfdatasets

Beitrag von af0815 »

Das sdfDataSet ist keine Datenbank PUNKT. Deshalb sind die meisten Sachen, die nicht nur dem linearen Lesen oder Schreiben entsprechen, nicht implementiert PUNKT

Ich habe dir schon im anderen Thread einen Verweis auf einen Beitrag von Theo gemacht, dort steht ein möglicher Workaround.
theo hat geschrieben:Ein TSdfDataSet auf das File ansetzen wäre eine einfache Möglichkeit.
Eigenschaft Delimiter auf ';' und Filtered auf True.
Anzeigen via TDatasource in einem TDBGrid.

In OnFilterRecord kann man sowas machen:

Code: Alles auswählen

procedure TForm1.SdfDataSet1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
  Accept:=Dataset.Fields[0].AsString='Aha';
end;


Du wirst Locate nur emulieren können. Nochmals, es ist keine Datenbank, also wirst du dich um alles selbst kümmern müssen.

Andreas
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: probleme mit locate bei sdfdatasets

Beitrag von Christian »

Nimm doch einfach SQLite, da brauchst auch keinen Server und hast nahezu die volle Power eines SQL Servers
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6208
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: probleme mit locate bei sdfdatasets

Beitrag von af0815 »

Christian hat geschrieben:Nimm doch einfach SQLite, da brauchst auch keinen Server und hast nahezu die volle Power eines SQL Servers

Den Vorschlag gabs auch schon im anderen Thread.

Es ist auch so, das sich keiner Gedanken darüber macht, das es DataAccess Seiten für die Komponenten gibt und SQLdb. DataAccess heist halt nur Zugriff, von Ver bzw. Bearbeitung hat keiner was gesagt. Und bei SQLdb ist das drinnen was draufsteht.

Immer dasselbe, man kauft einen Tata in der Basisversion und erwartet Fahrleistung und Komfort eines Quattro.

EDIT:
Wenn man sich die Sourcen ansieht, so sieht man, das Locate IMHO nicht überschrieben wird und immer false zurück gibt, daher nicht implementiert. >Etwas weniger Google und mehr an Quellcodelesen hilft oft (SCNR).
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

regaquak
Beiträge: 5
Registriert: Sa 6. Feb 2016, 14:45
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kürten

Re: probleme mit locate bei sdfdatasets

Beitrag von regaquak »

Nachdem mir Andreas noch mal auf die Finger gehauen hat, habe ich mich ein wenig mit SQLite beschäftigt und war baff erstaunt, wie unkompliziert das ging.

Ums kurz zu machen: alles funktioniert! Danke!

So, und während die Quattros schon wieder tanken müssen, tuckere ich mit meinem Tata vorbei und wink Euch mal fröhlich zu. \(^.^)/

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6208
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: probleme mit locate bei sdfdatasets

Beitrag von af0815 »

Gratulation,

ich wollte nicht wirklich grob sein. So wie es aussieht ist es aber auf fruchtbaren Boden gefallen. Die nächste Hürde könnte sein, das Deine Änderungen nicht dauerhaft gespeichert werden :D Wenn das der Fall ist, nimms nicht tragisch das hat fast jeder durchmachnen müssen. :mrgreen:
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

regaquak
Beiträge: 5
Registriert: Sa 6. Feb 2016, 14:45
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Kürten

Re: probleme mit locate bei sdfdatasets

Beitrag von regaquak »

Danke Dir, alles gut! ;)

Nachdem Du das geschrieben hattest, ging ich etwas irritiert wieder in mein Programm und murmelte ungefähr so was in der Art "Wie, die Daten werden nicht dauerhaft gespeichert? Klappt doch alles einwandfr.... oh! F***!"
Habe dann die Befehle ApplyUpdates, Commit, etc etc kennengelernt, danach die Hürde gerissen, dass die SQL Komponenten erst während runtime auf active / connected gesetzt werden müssen. Ein paar Stunden später ist das Ergebnis nun einwandfrei! :D
So, jetzt hör ich aber auf hier. ;)

Antworten