[Lazarus] TSQLQuery limited to 255 characters in Unicode

Hugues Moisy hugues.moisy at gmail.com
Wed Apr 25 19:04:01 CEST 2012


Hi all,

I'm using TSQLQuery on SQLite in order to manipulation very long unicode  
strings (in tibetan).

On inserting there is no problem, everything in inserted correctly in the  
database, using this code, containing a SQLquery :

procedure ExecuteSQL(pRequete: string; pCommit: boolean);
   var
     conn: TSQLConnection;
     query: TSQLQuery;
begin
   query := TSQLQuery.Create(nil);
   try
     try
       conn := getConnection(_TypeConnection);
       query.DataBase := conn;
       query.UsePrimaryKeyAsKey:=false;

       query.SQL.clear;
       query.SQL.Add(pRequete);
       query.ExecSQL;
       // COMMIT de la transaction et ouvre une nouvelle transaction
       if (pCommit = true) then
          conn.Transaction.CommitRetaining;
       query.Close;
     finally
       query.Free;
       //conn.Free;
     end;
   except
     on E: Exception do
     ShowMessage(E.message);
   end;
end;

BUT when I try to get the values, also with a SQLQuery, if the value is  
not unicode (ascii characters) I can get more than 255 chars, but if it's  
unicode (tibetan) the returned value is always cut to 255 characters.

     conn: TSQLConnection;
     query: TSQLQuery;
     str: widestring;
     i, n: integer;
   begin
     query := TSQLQuery.Create(nil);
     try
       try
         conn := getConnection(_TypeConnection);
         query.DataBase := conn;
         query.UsePrimaryKeyAsKey:=false;
         query.SQL.Text := pRequest;
         query.Open;
         query.Last;
         pGrid.Clean;
         n := 1;

         pGrid.RowCount := query.RecordCount + 1;
         pGrid.ColCount := pHeaders.Count;
         pGrid.FixedCols := pNbFixedCols;

         for i := 0 to pHeaders.Count - 1 do
             pGrid.Cells[i,0] := pHeaders.ValueFromIndex[i];

         query.First;
         while not query.EOF do
         begin
           for i := 0 to pAttrs.Count - 1 do
           begin
		// HERE str is always cut
             str :=  
query.FieldByName(pAttrs.ValueFromIndex[i]).AsWideString;
             pGrid.Cells[i,n] := str;
           end;
           query.Next;
           n := n + 1;
         end;
         // ajuste les colonnes au contenu
         pGrid.AutoAdjustColumns;

       finally
         query.Free;
         //conn.Free;
       end;
     except
       on E: Exception do
       ShowMessage(E.message);
   end;

Would somebody explain my why the value is always cut and give me a  
solution ? because didn't find any explaination of the internet, and as  
it's working in one way but not the other.

Thank you very much for your answer.

Hugues MOISY

-- 
Utilisant le logiciel de courrier révolutionnaire d'Opera :  
http://www.opera.com/mail/




More information about the Lazarus mailing list