Retrieve Multiple Records as TStringList Array. lazarus / 63-Database ---------------------------------------------------------------------- nugax · 2022-02-08 16:48 I created a type: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i type  TStringListArray = array of TStringList; I am trying to retrieve a bunch of text(string) fields from a sqlite3 database. I have the return code as below. The issue is, its failing (cant see errors) on the [ code=pascal]TReturnList[iCnt].Add(Query.FieldByName('mailid').AsString );  [/code] I cannot figure out why. Can someone assist - full function below: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i  //Get All Mail Array  function GetMailFromLocalMailConf(): TStringListArray;  var    Connect: TSQLite3Connection;    Trans: TSQLTransaction;    Query: TSQLQuery;    db_name: string[100];    sqlhandle: string[255];    TReturnList: TStringListArray;    iCnt: integer;   begin    //Setup SQL    db_name := programinfo.cbbsInfo.sLocalMailDB;    sqlhandle := 'SELECT mailid, to_id, from_id, subject, date, read, message FROM localmail WHERE to_id = ' + userhandler.recCurrentUser.UserID.ToString;    write('SQL' + sqlhandle);    //Code to update password from handle    Connect := TSQLite3Connection.Create(nil);    Query := TSQLQuery.Create(nil);    Trans := TSQLTransaction.Create(Connect);    Connect.Transaction := Trans;    Connect.DatabaseName := db_name;    Trans.StartTransaction;  // opens Connect, EInOutError if SQLite not installed    Query.SQL.Text := sqlhandle;    write('here1');    Query.Database := Connect;  //Connection for SQL  write('here23');    Query.Open;    //boolFoundUser := (Query.RecordCount > 0) and (Query.FieldByName('password').AsString <> '');     TReturnList.      write('here');     iCnt := 1;       repeat      TReturnList[iCnt].Add(Query.FieldByName('mailid').AsString);      TReturnList[iCnt].Add(Query.FieldByName('to_id').AsString);      TReturnList[iCnt].Add(Query.FieldByName('from_id').AsString);      TReturnList[iCnt].Add(Query.FieldByName('subject').AsString);      TReturnList[iCnt].Add(Query.FieldByName('date').AsString);      TReturnList[iCnt].Add(Query.FieldByName('read').AsString);      TReturnList[iCnt].Add(Query.FieldByName('message').AsString);      iCnt := iCnt + 1;      write('Adding');      query.Next;    until (iCnt = Query.RecordCount);     {    while not Query.EOF do    begin       TReturnList[iCnt].Add(Query.FieldByName('mailid').AsString);      TReturnList[iCnt].Add(Query.FieldByName('to_id').AsString);      TReturnList[iCnt].Add(Query.FieldByName('from_id').AsString);      TReturnList[iCnt].Add(Query.FieldByName('subject').AsString);      TReturnList[iCnt].Add(Query.FieldByName('date').AsString);      TReturnList[iCnt].Add(Query.FieldByName('read').AsString);      TReturnList[iCnt].Add(Query.FieldByName('message').AsString);       Write('local + ' + TReturnList[iCnt].ToString);       iCnt := iCnt + 1;    end;    }      Query.Close;    Query.Free;    Connect.Free;    exit(TReturnList);   end; ---------------------------------------------------------------------- nugax · 2022-02-08 16:50 Excuse the test code, and unfinished area. I was testing.. ---------------------------------------------------------------------- bytebites · 2022-02-08 17:18 Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i TReturnList[iCnt]:=TStringList.create ---------------------------------------------------------------------- nugax · 2022-02-08 17:29 So I changed it to a array of records and it does the exact same thing. Where would you initialize (create) the record? Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i type  LocalMailRecord = record    mailid  : string;    to_id   : string;    from_id : string;    subject : string;    date    : string;    read    : string;    message : string;   end; type  LocalMailArray = array of LocalMailRecord;   Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i //Get All Mail Arrayfunction GetMailFromLocalMailConf(): LocalMailArray;var  Connect: TSQLite3Connection;  Trans: TSQLTransaction;  Query: TSQLQuery;  db_name: string[100];  sqlhandle: string[255];  MailRecordArray : LocalMailArray;  iCnt: integer;  begin  //Setup SQL  db_name := programinfo.cbbsInfo.sLocalMailDB;  sqlhandle := 'SELECT mailid, to_id, from_id, subject, date, read, message FROM localmail WHERE to_id = ' +    userhandler.recCurrentUser.UserID.ToString;  Write('SQL' + sqlhandle);  //Code to update password from handle  Connect := TSQLite3Connection.Create(nil);  Query := TSQLQuery.Create(nil);  Trans := TSQLTransaction.Create(Connect);  Connect.Transaction := Trans;  Connect.DatabaseName := db_name;  Trans.StartTransaction;  // opens Connect, EInOutError if SQLite not installed  Query.SQL.Text := sqlhandle;  Write('here1');  Query.Database := Connect;  //Connection for SQL  Write('here23');  Query.Open;  //boolFoundUser := (Query.RecordCount > 0) and (Query.FieldByName('password').AsString <> '');      Write('here');   iCnt := 1;     repeat   // test := Query.FieldByName('mailid').AsString;    // TReturnList[iCnt].create;    Write('at least here');    write('test data: ' +  Query.FieldByName('subject').AsString);    MailRecordArray[iCnt] := LocalMailArray.    MailRecordArray[iCnt].mailid := Query.FieldByName('mailid').AsString;   // TReturnList[iCnt] := TStringList.Create;  //  TReturnList[iCnt].Add(test);    Write('ahah!');    {    TReturnList[iCnt].Add(Query.FieldByName('to_id').AsString);    TReturnList[iCnt].Add(Query.FieldByName('from_id').AsString);    TReturnList[iCnt].Add(Query.FieldByName('subject').AsString);    TReturnList[iCnt].Add(Query.FieldByName('date').AsString);    TReturnList[iCnt].Add(Query.FieldByName('read').AsString);    TReturnList[iCnt].Add(Query.FieldByName('message').AsString);    }    iCnt := iCnt + 1;    Write('Adding');    query.Next;  until (iCnt = Query.RecordCount);     {    while not Query.EOF do    begin       TReturnList[iCnt].Add(Query.FieldByName('mailid').AsString);      TReturnList[iCnt].Add(Query.FieldByName('to_id').AsString);      TReturnList[iCnt].Add(Query.FieldByName('from_id').AsString);      TReturnList[iCnt].Add(Query.FieldByName('subject').AsString);      TReturnList[iCnt].Add(Query.FieldByName('date').AsString);      TReturnList[iCnt].Add(Query.FieldByName('read').AsString);      TReturnList[iCnt].Add(Query.FieldByName('message').AsString);       Write('local + ' + TReturnList[iCnt].ToString);       iCnt := iCnt + 1;    end;    }  Query.Close;  Query.Free;  Connect.Free;  exit(MailRecordArray); //Return Mail Array end; ---------------------------------------------------------------------- bytebites · 2022-02-08 17:35 Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i SetLength(MailRecordArray,Query.RecordCount)repeat...