TSDFDataset ftString wird zu kurz gespeichert

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
BrunoT
Beiträge: 9
Registriert: Mi 24. Jun 2015, 21:12
OS, Lazarus, FPC: Mint Linux 17.3 | noch Win10 | L 1.4.4 | FPC 2.6.4
CPU-Target: 64Bit

TSDFDataset ftString wird zu kurz gespeichert

Beitrag von BrunoT »

Hallo,

ich habe ein Problem mit langen Strings (80 Zeichen) in Kombination mit TSDFDataset.
Schon bei der Eingabe in ein DBTextfeld wird die Eingabe auf 49 Zeichen begrenzt. Warum? Kann mir jemand dabei helfen?

Code: Alles auswählen

 
for i:=1 to n do
SummeUnsinn := SummeUnsinn + Unsinn[i];
 

Bitschubser
Beiträge: 61
Registriert: Mo 27. Aug 2012, 15:43

Re: TSDFDataset ftString wird zu kurz gespeichert

Beitrag von Bitschubser »

BrunoT hat geschrieben:Schon bei der Eingabe in ein DBTextfeld wird die Eingabe auf 49 Zeichen begrenzt. Warum? Kann mir jemand dabei helfen?


Wie ist denn das zugehörige Feld in der Datenbak definiert?
Kann das überhaupt Strings mit >= 50 Zeichen aufnehmen?

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: TSDFDataset ftString wird zu kurz gespeichert

Beitrag von wp_xyz »

Das ist eine sehr eigenwillige Komponente...Ich kriege per Code nicht einmal eine leere SDF-Tabelle erstellt. Und wenn ich die FieldDefs im ObjectInspektor eintrage, kann ich die Feldgröße nicht mehr ändern, sie bleibt hartnäckig auf dem zuerst eingegebenen Wert, auch wenn ich die SDFDatei lösche. Das hat sich offenbar seit langem niemand mehr angesehen...

Hat jemand bessere Erfahrungen? Wenn ja, wie wird die Komponente angewendet? (Bitte Schritt für Schritt, für Dumme wie mich)

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: TSDFDataset ftString wird zu kurz gespeichert

Beitrag von MacWomble »

Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: TSDFDataset ftString wird zu kurz gespeichert

Beitrag von wp_xyz »

Nein, kannte ich schon, die verlinkte Seite existiert nicht mehr (und wird auch in der WayBack Machine nicht gefunden - von wegen "Das Internet vergisst nichts"...)

shokwave
Beiträge: 470
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: TSDFDataset ftString wird zu kurz gespeichert

Beitrag von shokwave »

Hi,

ich glaube ich hab was gefunden. http://fpc-devel.freepascal.narkive.com/BYDaIFLy/tsdfdataset-does-not-work-with-records-larger-then-255-chars
In der ersten Antwort ist von den Schemas die Rede.
Possibly because FieldDefs[<n>].Size is too small. Did you setup
TSdfDataset.Schema according to your needs? The format is
<fieldname>=<fieldsize> AFAIK, MAXSTRLEN is a default value only.


Hab gerade getestet, mit folgendem Code:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  SdfDataSet1.FileName := ExtractFilePath(ParamStr(0)) + 'test.csv';
  SdfDataSet1.FieldDefs.Add('id', ftInteger);
  SdfDataSet1.Schema.Add('ID = 8');
  SdfDataSet1.FieldDefs.Add('text', ftMemo);
  SdfDataSet1.Schema.Add('TEXT = 300');
 
  SdfDataSet1.FileMustExist := False;
  SdfDataset1.FirstLineAsSchema := False;
  SdfDataSet1.Open;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  SdfDataSet1.Append;
  SdfDataSet1.FieldByName('id').AsInteger := 99;
  SdfDataSet1.FieldByName('text').AsUTF8String :=
    QuotedStr('ein neuer furchtbar langer langer text mit ganz vielen neuen zeichen und was weiß ich nicht alles');
  SdfDataSet1.Post;
end;


Wichtig ist hier FirstLineAsSchema auf False und das Schema anzulegen.
mfg Ingo

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: TSDFDataset ftString wird zu kurz gespeichert

Beitrag von wp_xyz »

Richtig, mit Schema ist die Komponente wesentlich zahmer... Das Schema hat auch Priorität vor den Einstellungen von FieldDefs. Evtl werden diese sogar komplett ignoriert, denn wenn ich die Schema-Einträge lösche, sind die Feldnamen verloren, obwohl sie noch in den FieldDefs stehen. Vielleicht wäre die Komponente einfach zu verstehen, wenn die FieldDefs nicht published wären.

BrunoT
Beiträge: 9
Registriert: Mi 24. Jun 2015, 21:12
OS, Lazarus, FPC: Mint Linux 17.3 | noch Win10 | L 1.4.4 | FPC 2.6.4
CPU-Target: 64Bit

Re: TSDFDataset ftString wird zu kurz gespeichert

Beitrag von BrunoT »

Hallo,

Danke für die Antworten.
Ich habe schon mitbekommen, dass die Datensatzlänge beim anlegen einer leeren DB auf 255 begrenzt wird.
Sind aber schon lange Datensätze in der Datei nimmt TSDFDataset den längsten Record als Maß aller Dinge.
Ich werde gleich mal mit dem Schema experimentieren. Eventuell löst das meine Probleme.

Danke für die Hilfe :lol:

Code: Alles auswählen

 
for i:=1 to n do
SummeUnsinn := SummeUnsinn + Unsinn[i];
 

Antworten