Inserting or deleting records is impossible after sorting SQLQuery: lazarus / 16-Databases ---------------------------------------------------------------------- salah · 2011-04-27 11:05 Hello, I created ascending and descending indexes for SQLQuery after opening it, and I sorted the data by these indexes, but when I try to post changes after inserting a record the exception 'External: SIGSEGV' is raised. And when I delete a record, the message 'List index (12) out of bounds' is displayed. (I use Lazarus 0.9.30, fpc 2.4.2, FireBird 2.1.3, win XP SP3) This is the code: (an image of this project is attached) ////////////////////////////////////////////////////////////////////// //// procedure TForm1.FormCreate(Sender: TObject); begin   SQLQuery1.MaxIndexesCount := SQLQuery1.FieldCount * 2 + 2;   SQLQuery1.Open; end; procedure TForm1.SQLQuery1AfterOpen(DataSet: TDataSet); var   i: LongInt;   Field: TField;   FieldName: String; begin   for i := 0 to SQLQuery1.FieldCount - 1 do   begin     Field := SQLQuery1.Fields;     if (Field.FieldKind = fkData) and (Field.DataType in [ftString, ftDate, ftBCD, ftInteger]) then     begin       FieldName := Field.FieldName;       SQLQuery1.AddIndex(Format('AscIndex%d', ), FieldName, []);       SQLQuery1.AddIndex(Format('DesIndex%d', ), FieldName, [ixDescending], FieldName);     end;   end; end; procedure TForm1.Button1Click(Sender: TObject); begin   SQLQuery1.ApplyUpdates(-1);   SQLTransaction1.CommitRetaining; end; procedure TForm1.DBGrid1TitleClick(Column: TColumn); begin   SortDataSet(Column); end; procedure TForm1.SortDataSet(Column: TColumn); var   Field: TField;   SQLQuery: TSQLQuery;   IndexName, AscIndexName, DesIndexName: String;   IndexDefs: TIndexDefs;   i, ImageIndex: LongInt;   IsIndexExist: Boolean;   DBGridColumns: TDBGridColumns; begin   Field := Column.Field;   if Field = nil then Exit;   SQLQuery := Field.DataSet as TSQLQuery;   if SQLQuery.State in [dsInsert, dsEdit] then SQLQuery.Post;   AscIndexName := Format('AscIndex%d', [Field.Index]);   DesIndexName := Format('DesIndex%d', [Field.Index]);   IndexDefs := SQLQuery.IndexDefs;   IndexDefs.Update;   for i := 0 to IndexDefs.Count - 1 do     if (IndexDefs.Name = AscIndexName) or (IndexDefs.Name = DesIndexName) then     begin       IsIndexExist := True;       Break;     end;   if IsIndexExist then   begin     IndexName := SQLQuery.IndexName;     if IndexName = AscIndexName then     begin       IndexName := DesIndexName;       ImageIndex := 1;     end     else     begin       IndexName := AscIndexName;       ImageIndex := 0;     end;     SQLQuery.IndexName := IndexName;     DBGridColumns := (Column.Grid as TDBGrid).Columns;     for i := 0 to DBGridColumns.Count - 1 do       DBGridColumns.Title.ImageIndex := - 1;     Column.Title.ImageIndex := ImageIndex;   end; end; ////////////////////////////////////////////////////////////////////// //// Can anyone help me ? ---------------------------------------------------------------------- Lacak2 · 2011-04-28 05:18 And when you do not add indexes (without use "AddIndex") then all works without any error ? If yes then it seems like some bug related to indexes used at TBufDataSet level. Then if you can provide some reproducible test program, please report it as bug in bug tracker.