Összedobtam egy kódot, amivel kipróbáltam, hogy mennyi adatot visz fel az adatbázisba és azt tapasztaltam, hogy az adatokat kiírja bele gond nélkül, de a visszaolvasásnál akadnak gondok. Nekem mondjuk nem 255 karakter a limit, mert olyan közel 7000 karaktert még visszaolvas, afelett már szegmentálási hibával elszáll a program.
Íme a kód:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Sqlite3DS, db, FileUtil, Forms, Controls, Graphics,
Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Datasource1: TDatasource;
Label1: TLabel;
Memo1: TMemo;
db: TSqlite3Dataset;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
Szoveg : TStringField;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:=IntToStr(Length(Memo1.Lines.Text));
with db do
begin
sql:='INSERT INTO Adatok (Szoveg) VALUES ("'+Memo1.Lines.Text+'");';
ExecSQL;
ApplyUpdates;
close;
Memo1.Clear;
sql:='SELECT Szoveg FROM Adatok;';
open;
While not Eof do
begin
Szoveg:=TStringField(Fields[0]);
ShowMessage('Max méret: '+IntToStr(Szoveg.Size));
Memo1.Lines.Text:=Szoveg.Value;
ShowMessage('Tényleges méret: '+IntToStr(length(Szoveg.Value)));
Next;
end;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
db.close;
db.free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
db:= TSqlite3Dataset.Create(nil);
with db do
Begin
FileName:='test.db3';
TableName:='Adatok';
if not FileExists(FileName) then
begin
with FieldDefs do
begin
Clear;
Add('Szoveg',ftString,0,False);
end;
CreateTable;
Active:=True;
end
else
begin
Active:=True;
Open;
end;
end;
end;
end.
Ha terminálban belenézel az adatbázisodba az sqlite3 adatbazineve paranccsal és kiadsz benne egy Select Length(SzövegesMezőNeve) as Hossz From Táblaneve; parancsot, akkor ott láthatod, hogy milyen hosszú adatok vannak az adott mező adott sorában. Gyanítom, ez nem oldja meg a problémádat, de talán segít valamit.