TSDFDataset ftString wird zu kurz gespeichert

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

TSDFDataset ftString wird zu kurz gespeichert

Beitragvon BrunoT » 26. Jan 2017, 00:11 TSDFDataset ftString wird zu kurz gespeichert

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];
 
BrunoT
 
Beiträge: 9
Registriert: 24. Jun 2015, 20:12
OS, Lazarus, FPC: Mint Linux 17.3 | noch Win10 | L 1.4.4 | FPC 2.6.4 | 
CPU-Target: 64Bit
Nach oben

Beitragvon Bitschubser » 26. Jan 2017, 10:15 Re: TSDFDataset ftString wird zu kurz gespeichert

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?
Bitschubser
 
Beiträge: 61
Registriert: 27. Aug 2012, 14:43

Beitragvon wp_xyz » 26. Jan 2017, 11:07 Re: TSDFDataset ftString wird zu kurz gespeichert

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)
wp_xyz
 
Beiträge: 2895
Registriert: 8. Apr 2011, 08:01

Beitragvon MacWomble » 26. Jan 2017, 11:58 Re: TSDFDataset ftString wird zu kurz gespeichert

Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
Lazarusforum e. V.
 
Beiträge: 787
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.1 Cinnamon / CodeTyphon LAB Version 6.80 / FP 3.3.1 SVN Rev 41791 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon wp_xyz » 26. Jan 2017, 13:26 Re: TSDFDataset ftString wird zu kurz gespeichert

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"...)
wp_xyz
 
Beiträge: 2895
Registriert: 8. Apr 2011, 08:01

Beitragvon shokwave » 26. Jan 2017, 14:14 Re: TSDFDataset ftString wird zu kurz gespeichert

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
shokwave
 
Beiträge: 420
Registriert: 15. Nov 2007, 16:58
Wohnort: Rudolstadt
OS, Lazarus, FPC: Win10 (L 1.6 FPC 3.0.0) | 
CPU-Target: i386,x64
Nach oben

Beitragvon wp_xyz » 26. Jan 2017, 16:41 Re: TSDFDataset ftString wird zu kurz gespeichert

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.
wp_xyz
 
Beiträge: 2895
Registriert: 8. Apr 2011, 08:01

Beitragvon BrunoT » 26. Jan 2017, 20:26 Re: TSDFDataset ftString wird zu kurz gespeichert

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];
 
BrunoT
 
Beiträge: 9
Registriert: 24. Jun 2015, 20:12
OS, Lazarus, FPC: Mint Linux 17.3 | noch Win10 | L 1.4.4 | FPC 2.6.4 | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried