Lazarus 3.2 (2024.02.28.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Válasz:win - linux string length 2011 ápr. 18 09:40 #758

  • slama
  • slama profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 17
  • Köszönetek: 0
Nullával adom a hosszt. Ugyanúgy mindkét rendszerben. A kód ugyanaz.
Winen jól fut, linuxon levágja 255re.
Megfoghatatlan.
Vagy hiba esetleg?
De muszáj első indításkor létrehoznom az adatokat, bizonyos okok miatt, vagyis nem tudom vele adni. És ez a létrehozás a ludas, vagyis az sqlite deklarációja.

Válasz:win - linux string length 2011 ápr. 17 18:40 #757

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
Ez a jelenség inkább olyan, mintha az oszlop (mező) deklarációja által lenne korlátozva annak mérete.
pl.:

CREATE TABLE "adattabla" (
"
szovegesadat" VARCHAR(255)
)


...mert egyébként az SQLite nem korlátozza a szöveges mezők métetét (TEXT,VARCHAR,CHAR,stb.)
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Válasz:win - linux string length 2011 ápr. 17 13:35 #756

  • slama
  • slama profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 17
  • Köszönetek: 0
Az is megvolt. MInden megvolt. Nem ma kezdtem.

Válasz:win - linux string length 2011 ápr. 17 12:50 #755

  • ejbenjaro
  • ejbenjaro profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 66
  • Köszönetek: 4
Bemásolnád ide azt a kódrészletet, meg a deklarációkat mivel az adatbázisba írod az adatokat? Esetleg próbálkozhatsz a ZEOS komponenssel is, hátha ott van a bibi. Illetve a 0.9.28-as Lazarus nem a legfrissebb. Próbáld ki a 0.9.30-ast, meg a hozzá való legfrissebb Free Pascalt, hátha megoldja a problémádat.
Mottó:
"Az ember sokszor más mint aminek látszik. De ritkán jobb..."
--
Gép : Asus P5G41T-M LX, Intel Celeron DC E3400, 4GB DDR3, 320GB SATA2, minden más integrált.
OS : Ubuntu 14.04
--
web: lassuviz.blogspot.hu/

Válasz:win - linux string length 2011 ápr. 17 12:36 #754

  • slama
  • slama profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 17
  • Köszönetek: 0
Fizikálisan belenéztem a file-ba, és kb 255 hosszu stringek vannak benne a q.rva hosszúak helyett, vagyis már a beírás is szar.
Mondom, win alatt tökéletes, linux alatt barmol csak. (meglepő...) Mintha a két compilálás eltérne egymástól.
Ugyebár ha a H+ be van állítva, akkor mehetne a memória hosszú string is bele, pláne, hogy a project opcióknál az ansi string be van állítva...
De linux alatt leszarja. 255 és punktum...

Válasz:win - linux string length 2011 ápr. 17 11:36 #753

  • ejbenjaro
  • ejbenjaro profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 66
  • Köszönetek: 4
Ö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.
Mottó:
"Az ember sokszor más mint aminek látszik. De ritkán jobb..."
--
Gép : Asus P5G41T-M LX, Intel Celeron DC E3400, 4GB DDR3, 320GB SATA2, minden más integrált.
OS : Ubuntu 14.04
--
web: lassuviz.blogspot.hu/

Válasz:win - linux string length 2011 ápr. 17 04:51 #752

  • slama
  • slama profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 17
  • Köszönetek: 0
Egészen adatbázisba írásig minden oké. Az adatbázisba rögzítés strippeli le 255-re.
A normál sqlite3 lazarus "gyári" komponens megy.

Válasz:win - linux string length 2011 ápr. 16 19:28 #751

  • ejbenjaro
  • ejbenjaro profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 66
  • Köszönetek: 4
Ha megnézed a Memo-ban levő szöveg hosszát, ott helyes értéket ad vissza, vagy már ott is levágja 255 karakterre (length(Memo.lines.text))? Az adatbázis eléréséhez melyik komponenst használod?
Mottó:
"Az ember sokszor más mint aminek látszik. De ritkán jobb..."
--
Gép : Asus P5G41T-M LX, Intel Celeron DC E3400, 4GB DDR3, 320GB SATA2, minden más integrált.
OS : Ubuntu 14.04
--
web: lassuviz.blogspot.hu/

win - linux string length 2011 ápr. 15 11:03 #749

  • slama
  • slama profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 17
  • Köszönetek: 0
Sziasztok!
Egy win alatt jól működő cuccot portolnék át linuxra, lazarus 0.9.28 és sqlite3 használatával.
A probléma a stringek hosszával van.
Gyakorlatilag egy memo mezőt (ami lehet akár pl 16000 char. hosszú is) pakolok egy sqlite adatbázis egy mezőjébe, amit a program hoz létre első induláskor, "...ftstring,0..." deklarációval. Win alatt ez jól működik, szinte bármekkora szöveget bele tudok írni, linux alatt viszont ( {$H+ } paraméter mellett akár delphi, akár objpascal beállítással) a stringeket 255-re vágja. Próbáltam ansistring definíciókkal is. A compilerbe fixen be van állitva az ansistring használata, tehát mehetne bármekkora.
Tehát win alatt jó az akármekkora hossz, linux alatt 255-re vágja.
Itt kínlódok vele két napja. Nem jövök rá a megoldásra.
Találkozott már vele valaki...?

  • Oldal:
  • 1